Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
Другие темы раздела
C++ Подсчитать в заданной строке число слов, которые могут быть разделены пробелом, табуляцией, переводом строки https://www.cyberforum.ru/ cpp-beginners/ thread1002419.html
Объясните пожалуйста,в чем ошибка? #include<stdio.h> #include<string.h> int *words(char *s) { int len=strlen(s),i,k=1,l=0; if(len==0)return 0; if(s==' ')l=1; for(int j=l;j<len;j++)
Разность показаний на дисплее C++
Уважаемые форумчане, помогите решить вопрос с выводом разности показаний на дисплей. В программе есть определённый участок кода, который отвечает за вывод показаний измеряемой частоты на дисплей в числовом формате, например от 50000 до 55000. Показания меняются каждую секунду, как в большую сторону, так и в меньшую по отношению к отображаемому числу на дисплее. char str; lcd_gotoxy(0,1);...
C++ Опишите рекурсивную функцию number без параметров для определения количества элементов файла f Помогите с задачкой :( type reals = file of real; var f: reals; Опишите рекурсивную функцию number без параметров для определения количества элементов файла f https://www.cyberforum.ru/ cpp-beginners/ thread1002410.html C++ куб числа в С++ https://www.cyberforum.ru/ cpp-beginners/ thread1002407.html
Здравствуйте! У меня такая задумка, пользователь вводит число, а программа выводит куб от этого числа. Программа компилируется и ошибок не находит, вот только не выводит куб. #include <iostream> #include <stdio.h> #include <cmath> using namespace std; int cube (int x){ return x*x*x; } int main()
C++ Преобразовать указатель одного типа в указатель другого.
Всем привет. Мне нужно выполнить задание "Преобразовать указатель одного типа в указатель другого. " Что-то совсем не понимаю. Помогите пожалуйста...)
C++ Немогу составить программу для решения формул (формулы на фото) https://www.cyberforum.ru/ cpp-beginners/ thread1002393.html
Нужно сделать программу для решения формул через подстановку. Я хоть правильно выбрал программу? (Пытаюсь сделать с помощью C++)
C++ Вычисление выражений. Пожалуйста, объясните Пожалуйста, помогите! Не понимаю, как сделать задачу! f(x)=6*(2n)!*(1/(2n+1))*(1+1/3^2+1/5^2+...+1/(2n-1)^2))*(x/2)^(2n+1) Вот такая задачка. Нужно, чтобы, как я понял, вычисляло f(x1), f(x2) и выводило до х10. Не знаю как делать. Даже как начать... Это нужно по отдельности что ли расписать. Типа ((2n)!) = m и тд и все по отдельности перемножить? Но тогда как сделать степень? https://www.cyberforum.ru/ cpp-beginners/ thread1002384.html C++ В текстовом файле посчитать количество заданных букв
Задание: "В текстовом файле посчитать количество заданных букв" Срочно надо, вообще ничего не понимаю.
C++ Ошибка <iostream.h> https://www.cyberforum.ru/ cpp-beginners/ thread1002371.html
Только начал изучать C++, решил в писать в VS2012. Нашел книгу, в начале, как обычно консольное присложение. Вот только делать по примеру из книги не получается, т.к. студия: 1) Ругается на #include <iostream.h> 2) Ругается на cout << " " 3) Зачем-то содержит #include "stdafx.h", чего в книге просто нет. В чем проблема? Добавлено через 22 минуты Извиняюсь за невнимательность, ответ есть...
C++ В файле целых чисел заменить все нулевые значения максимальным значением https://www.cyberforum.ru/ cpp-beginners/ thread1002367.html
помогите решить задачу, пожалуйста! вот мой код, не могу понять в чём ошибка. " В файле целых чисел заменить все нулевые значения максимальным значением" код: #include <fstream> #include <iostream> using namespace std; int main() {FILE*f; int x,i,max; cout<<"File"<<endl;
C++ Компиляция в среде visual studio 2010
Профи выручайте! Не могу найти кнопку компиляции в визуаль студио 2010, создал файл с расширением .cpp написал код и вполне готов его откомпилировать, но кнопки или чего то подобного найти не могу.( Или может стоит более новую версию среды скачать? как быть?(
C++ Найти свободный участок от деревье и построить там домик Реализация программы работы с матрицами; Квадратный участок земли размеров NxN метров (N=25 - 200) разбит на клетки со стороной 1 м. Клетка занята, если на ней растут деревья, которые рубить нельзя. Найти для строительства дом квадрат максимальной площади, свободной от деревьев. Вчера помогал делать это задание клиенту, очень понравилась задачка. Решил выложить, может кому пригодится. И может... https://www.cyberforum.ru/ cpp-beginners/ thread1002362.html
1 / 1 / 0
Регистрация: 26.09.2012
Сообщений: 26
0

Не могу найти ошибку - C++ - Ответ 5308454

09.11.2013, 13:09. Показов 455. Ответов 5
Метки (Все метки)

Author24 — интернет-сервис помощи студентам
Доброго времени суток. На днях написал программу, в логике программы вроде все правильно и подсчеты идут тоже корректные. Но до завершения программа не доходит и вылетает. Возможно я что-то неправильно сделал при работе с памятью.
Суть задачи через каждые 10+-5 с в накопитель поступают заявки(детали), далее они идут в 1 канал, где обрабатываются 10+-7 с, после завершения обработки они поступают во второй накопитель, далее во 2 канал, где обрабатываются 10+-6 с. После окончания обработки во 2 канале мы должны рассмотреть деталь, если она была в системе больше 25 секунд - она завершена, если от 20 до 25 - отправляем её во 2 накопитель или канал, если меньше 20 - в первый накопитель или канал. Программа должна завершится после завершения 400 заявок.

main.cpp:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
#include <iostream>
using std::cout;
using std::endl;
using std::cerr;
using std::ios;
 
#include <cstddef>
using std::nullptr_t;
 
#include <deque>
using std::deque;
 
#include <cstdlib>
using std::rand;
using std::exit;
 
#include <fstream>
using std::ofstream;
 
#include <iomanip>
using std::setw;
 
#include "Detail.h"
 
#include "Channel.h"
 
int main()
{
    // накопитель 1 и 2
    deque< Detail* > accumulator1 ( 0, nullptr );
    deque< Detail* > accumulator2 ( 0, nullptr );
 
    // канал 1 и 2
    Channel ch1( 10, 7, 0); // 10+-7
    Channel ch2( 10, 6, 0); // 10+-6
 
    // РЕШАТЕЛЬ - этот указатель нужен для решения
    // что нужно делать с деталями, которые
    // выходят из 2 канала после его завершения
    Detail* solver = nullptr;
 
    int numberOfDetil = 1; // нумирация деталей
 
    // время до поступления новой заявки
    int timeToIncomeNewDetail = 0;
 
    // общее кол-во выполненых деталей
    int totalReadyDetails = 0;
 
    // счет времени
    int totalTime = 1;
 
    // создание файла для вывода результата
    ofstream outResultFile( "result.txt", ios::out );
 
    // проверка возможно ли открыть файл
    if( !outResultFile )
    {
        cerr << "File could not be open" << endl;
        exit( 1 );
    }
 
    // название столбцов в файле
 
    // Time - время работы программы ( итерация )
    // NewDetail - отсчет времени до появления новой детали
    // Accumulator1 - кол-во деталей в 1 накопителе
    // Channel1 - статус 1 канала ( 1 - свободен, 2 - работает, 3 - завершил работу )
    // Ch1WorkTime - время работы  1 канала
    // Accumulator2 - кол-во деталей в 2 накопителе
    // Channel2 - статус 2 канала ( 1 - свободен, 2 - работает, 3 - завершил работу )
    // Ch2WorkTime - время работы  2 канала
    // ReadyDetails - кол-во завершенных деталей
 
    outResultFile << setw( 4 ) << "Time" << " | " << setw( 9 ) << "NewDetail" << " | "
        << setw( 12 ) << "Accumulator1" << " | " << setw( 8 ) << "Channel1" << " | "
        << setw( 11 ) << "Ch1WorkTime" << " | " << setw( 12 ) << "Accumulator2" << " | "
        << setw( 8 ) << "Channel2" << " | " << setw( 11 ) << "Ch2WorkTime" << " | "
        << setw( 12 ) << "ReadyDetails" << " | " << endl;
 
    // на первой секунде создаем первую деталь
    accumulator1.push_back ( new Detail( numberOfDetil ) );
 
    // увеличиваем счетчик деталей на 1
    numberOfDetil++;
 
    // генерируем время поступления новой детали
    timeToIncomeNewDetail = 5 + rand() % 11; // 10+-5
 
    // выполняем до тех пор пока не будет выполнено 400 деталей
    while( totalReadyDetails != 400 )
    {
 
//-------------------------------------------------------------------------------------------//
        // работа 2 канала
 
        // если канал 2 завершил свою работу
        if( 3 == ch2.getCurrentStatus() )
        {
            // указатель на деталь передаем РЕШАТЕЛЮ
            solver = ch2.removeDetail();
 
            // если время детали больше 25 секунд удаляем деталь
            if( solver->getTotalWorkTime() > 25 && false == solver->getRepeatStatus() )
            {
                delete solver;
                totalReadyDetails++;
            }
 
            if( true == solver->getRepeatStatus() )
            {
                delete solver;
                totalReadyDetails++;
            }
 
            // если меньше 25 пяти секунд
            if( false == solver->getRepeatStatus() && solver->getTotalWorkTime() <= 25 )
            {
                // ставим статус детали - повторная обработка
                solver->setRepeatStatus( true );
 
                // если её время больше или равна 20 секундам
                // отправляем её во 2 канал( если он свободен )
                // или во 2 накопитель
                if( solver->getTotalWorkTime() >= 20 )
                {
                    if( 1 == ch2.getCurrentStatus() )
                    {
                        ch2.addDetail( solver );
                    }
                    else
                    {
                        accumulator2.push_back( solver );
                        //cout << "acc2_ch2: " << solver->getNumberOfDetaill() << "  ";
                    }
                }
 
                // если её время меньше 20 секунд
                // отправляем её в 1 канал( если он свободен )
                // или в 1 накопитель
                if( solver->getTotalWorkTime() < 20  )
                {
                    if( 1 == ch1.getCurrentStatus() )
                    {
                        ch1.addDetail( solver );
                    }
                    else
                    {
                        accumulator1.push_back( solver );
                        //cout << "acc1_ch2: " << solver->getNumberOfDetaill() << "  ";
                    }
                }
            }
 
            // РЕШАТЕЛЬ "теряет" всю информацию о детали деталь
            solver = nullptr;
        }
 
        // если канал 2 свободен
        if( 1 == ch2.getCurrentStatus() )
        {
            if( !accumulator2.empty() )
            {
                ch2.addDetail( accumulator2.front() );
                accumulator2.pop_front();
            }
        }
//-------------------------------------------------------------------------------------------//
        // Работа 1 канала
 
        // если канал 1 завершил свою работу
        if( 3 == ch1.getCurrentStatus() )
        {
            // если канал 2 свободен - закидываем деталь во 2 канал
            if( 1 == ch2.getCurrentStatus() )
            {
                ch2.addDetail( ch1.removeDetail() );
            }
            // иначе закидываем её во 2 накопитель
            else
            {
                accumulator2.push_back( ch1.removeDetail() );
                //cout << "acc2_ch1: " << accumulator2[ accumulator2.size() - 1 ]->getNumberOfDetaill() << "  ";
            }
        }
        // если канал 1 свободен
        if( 1 == ch1.getCurrentStatus() )
        {
            if( !accumulator1.empty() )
            {
                ch1.addDetail( accumulator1.front() );
                accumulator1.pop_front();
            }
        }
//-------------------------------------------------------------------------------------------//
        // поступления новой детали
 
        // настало время поступления новой детали
        if( 0 == timeToIncomeNewDetail && numberOfDetil != 400)
        {
            // если канал свободен - закидываем деталь в канал
            if( 1 == ch1.getCurrentStatus() )
            {
                ch1.addDetail( new Detail( numberOfDetil ) );
            }
            // иначе закидываем деталь в накопитель
            else
            {
                accumulator1.push_back( new Detail( numberOfDetil ) );
                //cout << "acc1_ch1: " << accumulator1[ accumulator1.size() - 1 ]->getNumberOfDetaill() << "  ";
            }
 
            // генерирем время поступления новой детали
            numberOfDetil++;
            timeToIncomeNewDetail = 5 + rand() % 11; // 10+-5
        }
 
//-------------------------------------------------------------------------------------------//
        // Вывод
 
        outResultFile << setw( 4 ) << totalTime << " | " << setw( 9 ) << timeToIncomeNewDetail << " | "
        << setw( 12 ) << accumulator1.size() << " | " << setw( 8 ) << ch1.getCurrentStatus() << " | "
        << setw( 11 ) << ch1.getWorkTime() << " | " << setw( 12 ) << accumulator2.size() << " | "
        << setw( 8 ) << ch2.getCurrentStatus() << " | " << setw( 11 ) << ch2.getWorkTime() << " | "
        << setw( 12 ) << totalReadyDetails << " | " << endl;
 
//-------------------------------------------------------------------------------------------//
        // Отсчет времени
 
        if( timeToIncomeNewDetail > 0 )
        {
            timeToIncomeNewDetail--;
        }
 
        ch1.timeChanged();
        ch2.timeChanged();
 
        cout << endl;
 
        if( !accumulator1.empty() )
        {
            for( int i = 0; i < accumulator1.size(); i++ )
            {
                accumulator1[ i ]->incrementTotalWorkTime();
                //cout << accumulator2[ i ]->getNumberOfDetaill() << "  ";
            }
        }
 
        cout << endl;
 
        if( !accumulator2.empty() )
        {
            for( int i = 0; i < accumulator2.size(); i++ )
            {
                accumulator2[ i ]->incrementTotalWorkTime();
            }
        }
 
        totalTime++;
    }
 
    cout << "See result in file result.txt." << endl;
 
    return 0;
}
detail.h
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#ifndef DETAIL_H
#define DETAIL_H
 
 
class Detail
{
    public:
        explicit Detail( int = 0 );
 
        void setNumberOfDetail( int );
        void setRepeatStatus( bool );
 
        int getNumberOfDetaill();
        int getTotalWorkTime();
        bool getRepeatStatus();
 
        void incrementTotalWorkTime();
 
    private:
        int totalWorkTime;
        int numberOfDetail;
        bool repeatStatus;
};
 
#endif // DETAIL_H
detail.cpp
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
#include "Detail.h"
 
#include <iostream>
using std::cout;
using std::endl;
 
Detail::Detail( int value )
{
    totalWorkTime = 0;
 
    setRepeatStatus( false );
    setNumberOfDetail( value );
}
 
void Detail::setNumberOfDetail( int setValue )
{
    numberOfDetail = ( setValue > 0 ) ? setValue : 0;
}
 
void Detail::setRepeatStatus( bool flag )
{
    repeatStatus = flag;
}
 
int Detail::getNumberOfDetaill()
{
    return numberOfDetail;
}
 
int Detail::getTotalWorkTime()
{
    return totalWorkTime;
}
 
bool Detail::getRepeatStatus()
{
    return repeatStatus;
}
 
void Detail::incrementTotalWorkTime()
{
    totalWorkTime++;
}
channel.h
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
#ifndef CHANNEL_H
#define CHANNEL_H
 
class Detail;
 
class Channel
{
    public:
        Channel( int = 1 , int = 0, int = 0 );
        void timeChanged();
 
 
 
        void addDetail( Detail *);
        void setWorkTime( int );
 
        int getWorkTime();
        int getCurrentStatus();
        Detail* removeDetail();
 
    private:
 
        void setCurrentStatus( int );
 
        Detail *currenDetailPtr;
 
        // 1 - свободен
        // 2 - работает
        // 3 - завершен
        int currentStatus;
 
        int workTime;
        int initialValue;
        int rangeValue;
        int timerParametr;
};
 
#endif // CHANNEL_H
channel.cpp
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
#include "Channel.h"
#include "Detail.h"
 
#include <cstddef>
using std::nullptr_t;
 
#include <cstdlib>
using std::rand;
 
#include <iostream>
using std::cout;
using std::endl;
 
Channel::Channel( int value, int range, int parametr )
{
    initialValue = ( value > 0 ) ? value : 1;
 
    rangeValue = ( range >= 0 ) ? range : 0;
 
    timerParametr = ( parametr >= 0 ) ? parametr : 0;
 
    currenDetailPtr = nullptr;
    setCurrentStatus( 1 );
    setWorkTime( 0 );
}
 
void Channel::timeChanged()
{
    int temp = 0;
 
    temp = getWorkTime();
 
    // отсчет времени работы канала
    if( 2 == getCurrentStatus() && getWorkTime() > 0 )
    {
        // оставшееся время -1
        setWorkTime( --temp );
 
        // суммарное время сущестования детали увеличено на 1
        currenDetailPtr->incrementTotalWorkTime();
    }
 
    // работа канала завершена
    if( 0 == getWorkTime() && 2 == getCurrentStatus() )
    {
        setCurrentStatus( 3 ); // завершен
    }
 
}
 
Detail* Channel::removeDetail()
{
    setWorkTime( 0 );
 
    setCurrentStatus( 1 );
 
    return currenDetailPtr;
}
 
void Channel::addDetail( Detail *newDetail )
{
    currenDetailPtr = newDetail;
 
    if( rangeValue >= 0 )
    {
        if( 0 == timerParametr )
        {
           setWorkTime( ( initialValue - rangeValue ) + rand() % ( 2 * rangeValue + 1 ) );
        }
        if ( 1 == timerParametr )
        {
            setWorkTime(initialValue + rangeValue);
        }
        if ( 2 == timerParametr )
        {
            setWorkTime(initialValue - rangeValue);
        }
    }
 
    setCurrentStatus( 2 );
}
 
void Channel::setWorkTime( int number )
{
    workTime = ( number >= 0 ) ? number : 0;
}
 
void Channel::setCurrentStatus( int number )
{
    currentStatus = ( number >= 1 && number <=3 ) ? number : 0;
}
 
int Channel::getWorkTime()
{
    return workTime;
}
 
int Channel::getCurrentStatus()
{
    return currentStatus;
}
Буду премного благодарен, если кто-то разыщет мою ошибку и тем, кто просто подскажет что можно улучшить в этой программе, для уменьшения вероятности возникновения ошибки.

Вернуться к обсуждению:
Не могу найти ошибку C++
0
Заказать работу у эксперта
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
09.11.2013, 13:09
Готовые ответы и решения:

Найти слова, повторяющиеся более одного раза, не могу найти ошибку
#include &lt;iostream&gt; using namespace std; void obr1(char **s, char **mas, int n, int m) { int...

Массивы. Посчитать количество положительных, найти минимальное, удалить строку с минимальным (Не могу найти ошибку)
// Заданы матрицы X(8;4),Y(5;5),Z(6;9). // Для каждой из матриц определить строку, в которой...

Не могу найти ошибку
В общем написал программу , только не понимаю ошибок

С++ не могу найти ошибку
#include &quot;stdafx.h&quot; #include &lt;iostream&gt; #include &lt;math.h&gt; typedef double TMatrix; typedef...

5
09.11.2013, 13:09
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
09.11.2013, 13:09
Помогаю со студенческими работами здесь

Не могу найти ошибку!
Только-только начал работать с функциями и не могу понять, почему в моей игре(кидаешь с компьютером...

не могу найти ошибку!
почему в typePlane вместо значения, которое вводит пользователь, выводит какое-то большое значение...

Не могу найти ошибку
#include &quot;stdafx.h&quot; #include &lt;conio.h&gt; class Sum { public: int sum1 (int x1, int x2) {...

Не могу найти ошибку
Здравствуйте, есть задача: Написать программу которая по введенному числу и месяцу рассчитывает...

0
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru