Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Delacroic
0 / 0 / 0
Регистрация: 04.12.2013
Сообщений: 61
#1

Как сделать очередь и убрать паузу программы при вводе данных? - C++

08.12.2013, 16:33. Просмотров 403. Ответов 5
Метки нет (Все метки)

Написал прогу, при вводе новый параметров детали программа останавливается, как можно переделать, что бы этого не было? И как сделать очередь из вводимых данных? я пытался сделать через массив, но не получилось=\
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
#include "stdafx.h"
#include <iostream>
#include <Windows.h>
#include <time.h>
#include <ctime>
#include <tchar.h>
#include <conio.h>
#include <sstream>
#include <locale.h>
#include <string>
#include <dos.h>
 
using namespace std;
class machine
{
            private:
                    int TimeMachine;        //Время работы станка
                    int KoefOthMachine;     //Коэффициент отходов станка
                    int Obrabotano;         //Кол-во обработанных деталей
                    int LocalOthod;         //Сумма отходов с одного станка
                    int a;
                    int SaveTime;
            public:
                    machine()
                    {   Obrabotano=0;
                        LocalOthod=0;
                        TimeMachine=rand()%10+5;
                        SaveTime=TimeMachine;
                        KoefOthMachine=rand()%10+1;
                        cout<<TimeMachine<<endl<<KoefOthMachine<<endl;
                    }
            void work(int &Ochered, int KoefOthDet, int KoefTimeDet,int &RejimMachine,int &Othod)
                {
                    a=0;
                    if(RejimMachine==1)
                        TimeMachine--;
                    if((RejimMachine==0)&&(Ochered>0))
                        {
                            Ochered--;
                            RejimMachine=1;
                            Othod+=KoefOthMachine*KoefOthDet;
                            TimeMachine*=KoefTimeDet;
                            LocalOthod+=KoefOthMachine*KoefOthDet;
                            Obrabotano++;
                            a++;
                        }
                    
                    if(TimeMachine==0)
                        {
                            RejimMachine=0;
                            TimeMachine=SaveTime;
                        }
                    cout<<"Время до конца обработки "<<TimeMachine<<endl<<
                    "Кол-во отходов"<<LocalOthod<<endl;
                    
 
                }
            int retra()
            {
                return a;
            }
};
 
 
 
void main()
    {
        int **koef;
        koef=new int *[100];
        for(int i=0;i<100;i++)
        {
            koef[i]=new int [2];
            for(int j=0;j<2;j++)
                koef[i][j]=0;
        }
 
        int Ocheredd=0;                 //Количество деталей в очереди
        int* RejimMachinee;             //Массив с режимами работы всех станков
        int Othodd=0;                   //Общее кол-во отходов
        int qq;
        RejimMachinee=new int[8];                   
        machine *y=new machine [8];
        setlocale(0,"Rus");
        time_t tm1;
        tm1 = time (NULL);
        qq=tm1;
        for(int i=0;i<8;i++)
            RejimMachinee[i]=0;
        for(;;)
        {
            system("cls");
            for(int i=0;i<8;i++)
            {
                (y+i)->work(Ocheredd,koef[0][1],koef[0][0],RejimMachinee[i],Othodd);
                if((y[i].retra()>0)&&(Ocheredd>0))
                {
                    for(int i=0;i<99;i++)
                    {
                        for(int j=0;j<2;j++)
                        {
                            koef[i][j]=koef[i+1][j+1];
                        }
                    }
                    
                }
                    
                
            }
 
            
             do
                {
                    tm1 = time (NULL);
                    if(kbhit()) 
                    if(getch()==27)
                    {
                        return;
                    }   
                    if(kbhit()) 
                    if(getch()==13)
                    {
                        cout<<"Введите коэффициенты новой детали: "<<endl<<
                        "времени: ";cin>>koef[Ocheredd][0];
                        cout<<"отходов: ";cin>>koef[Ocheredd][1];
                        Ocheredd++;
                    }   
                }
                    while(qq==tm1);
                    qq=tm1;
        }
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.12.2013, 16:33
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Как сделать очередь и убрать паузу программы при вводе данных? (C++):

Зацикливание программы при вводе некорректных данных - C++
Привет всем! Я совсем новенький в программировании на С++ (в школе чуток увлекался Бейсиком, но забросил). Три дня назад решил освоить С++....

как сделать так, чтоб при работе программы можно было вводить в качестве данных русские слова? - C++
мммм?

Как добавить паузу перед завершением программы? - C++
#include &quot;stdafx.h&quot; #include &lt;stdio.h&gt; /* печать таблицы температур по Фаренгейту и Цельсию для fahr = 0, 20, ..., 300 */ int...

Как сделать, чтобы при вводе двумерного массива он сразу отображался в виде таблицы? - C++
Желательно использовать оператор setw().

Как сделать, чтобы выдавал ошибку при вводе букв и элемента меньшего, чем 0? - C++
Т.е. пользователь ввёл данные, если это текст, то выдаётся ошибка. Если пользователь ввёл число меньше нуля, то ошибка?

Как сделать, чтобы при вводе в консоли <Enter> не переводил курсор на начало следующей строки? - C++
Есть некий ввод символов, организованный через cin.get(char &amp;), или через cin.get(char &amp;, int), или через cin.getline(char &amp;, int)....

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
monolit
185 / 184 / 22
Регистрация: 24.03.2011
Сообщений: 667
Завершенные тесты: 1
08.12.2013, 16:42 #2
Попробуй так
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
for(;;) {
for(int i=0;i<8;i++)
            {
                (y+i)->work(Ocheredd,koef[0][1],koef[0][0],RejimMachinee[i],Othodd);
                if((y[i].retra()>0)&&(Ocheredd>0))
                {
                    for(int i=0;i<99;i++)
                    {
                        for(int j=0;j<2;j++)
                        {
                            koef[i][j]=koef[i+1][j+1];
                        }
                    }
                    
                }
                    
                
            }
 
            if (GetAsyncKeyState(VK_ESCAPE/*27*/)) return;
            else if (GetAsyncKeyState(VK_RETURN/*13*/)) {
                        cout<<"Введите коэффициенты новой детали: "<<endl<<
                        "времени: ";cin>>koef[Ocheredd][0];
                        cout<<"отходов: ";cin>>koef[Ocheredd][1];
                        Ocheredd++;
                    }
}
И вообще, использовать циклы для замера времени - нехорошо. Так что ты это прекращай.
Delacroic
0 / 0 / 0
Регистрация: 04.12.2013
Сообщений: 61
08.12.2013, 17:03  [ТС] #3
Если сделать без этого цикла, то вообще ерунда получается =\
после ввода данных отсчет времени происходит моментально, а если всунуть, что то типа Sleep, то изменения происходят после нового ввода данных=\
monolit
185 / 184 / 22
Регистрация: 24.03.2011
Сообщений: 667
Завершенные тесты: 1
08.12.2013, 22:53 #4
Што???

Добавлено через 1 минуту
В общем, ты походу сам не знаешь, что тебе нужно, или не можешь объяснить. Напиши, что тебе требуется, подробно, делать в этом for(;. А то и сразу данные получать не нужно, и ждать не нужно - противоречие.
Delacroic
0 / 0 / 0
Регистрация: 04.12.2013
Сообщений: 61
09.12.2013, 01:48  [ТС] #5
Суть работы программы (как по идее должно быть): есть 8 станков (это сделано), у каждого станка свое время и кол-во отходов (сделано), на станки должны подаваться детали со своими коэффициентами времени и отходов (это есть), но эти детали должны задаваться по ходу работы программы и помещаться в очередь, с которой и поступают на станки. А у меня так построено, что если нажать энтер (для ввода новой детали), то все станки останавливаются и продолжают работать только после того, как будут заданы коэффициенты детали. И если запустить все станки и задать новую деталь, то значения выходят крайне плохого характера (что-то типо -128791653 или 237865239).
А если вписать вашу часть кода, то станки обрабатывают деталь моментально, а не по истечению заданного времени.
monolit
185 / 184 / 22
Регистрация: 24.03.2011
Сообщений: 667
Завершенные тесты: 1
09.12.2013, 14:36 #6
Цитата Сообщение от Delacroic Посмотреть сообщение
по истечению заданного времени
Крайне расплывчатое объяснение. В твоем описание я нигде никакого заданного времени не встречал. Если тебе нужно, чтоб пока ты вводишь, станки не работали, делай так:
C++
1
2
3
4
5
if (GetAsyncKeyState(VK_CONTROL)) {
     cout<<"Введите коэффициенты новой детали: "<<endl<<
     "времени: ";cin>>fParam; //твои параметры
     cout<<"отходов: ";cin>>sParam;
}
VK_CONTROL потому что VK_RETURN используется еще и для завершения ввода, и тогда появляются новые проблемы, которые мне решать не хочется. Таким образом, если нажмешь CTRL, прога будет ждать ввода твоих параметров, а после них продолжит работу (естественно, эти параметры надо будет еще как-то обработать, но я хз как у тебя все устроено.)
И еще учти что за секунду проделается куча итерации, так что ты б как-нибудь ограничил, Sleep'ом, чтоль...
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.12.2013, 14:36
Привет! Вот еще темы с ответами:

Как сделать паузу 3 секунды у компонента Timer? - C++
подскажите пожалуйста как сделать паузу в работе у компонента Timer в 3 секунды.

Кирилица отображается нормально при выводе из программы, но иероглифы при вводе в консоль - C++
Что надо подключить что бы в консоли писать русскими буквами? cin &gt;&gt; kol; cin &gt;&gt; x; cout &lt;&lt; &quot;У вас есть &quot; &lt;&lt; kol &lt;&lt; &quot; &quot; &lt;&lt; x; ...

Как сделать так, что бы длинна строки сама менялась при вводе строки? - C++
Есть такой код #include &quot;stdafx.h&quot; #include &quot;enter.h&quot; #include &lt;stdio.h&gt; #include &lt;math.h&gt; #include &lt;iostream&gt; #include...

как сделать логотип при загрузке программы (типа как при запуске офиса) - C++
и так , люди...мне вдруг безумно захотелось узнать, как делать при загрузке программы такую фичу как например в мелкософтоффисе, или...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
09.12.2013, 14:36
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru