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

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

Восстановить пароль Регистрация
 
Delacroic
0 / 0 / 0
Регистрация: 04.12.2013
Сообщений: 61
08.12.2013, 16:33     Как сделать очередь и убрать паузу программы при вводе данных? #1
Написал прогу, при вводе новый параметров детали программа останавливается, как можно переделать, что бы этого не было? И как сделать очередь из вводимых данных? я пытался сделать через массив, но не получилось=\
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     Как сделать очередь и убрать паузу программы при вводе данных?
Посмотрите здесь:

Как сделать паузу 3 секунды у компонента Timer? C++
C++ как сделать так, чтоб при работе программы можно было вводить в качестве данных русские слова?
C++ Зацикливание программы при вводе некорректных данных
Как сделать, чтобы при вводе в консоли <Enter> не переводил курсор на начало следующей строки? C++
Как сделать, чтобы выдавал ошибку при вводе букв и элемента меньшего, чем 0? C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
monolit
179 / 179 / 21
Регистрация: 24.03.2011
Сообщений: 641
Завершенные тесты: 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
179 / 179 / 21
Регистрация: 24.03.2011
Сообщений: 641
Завершенные тесты: 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
179 / 179 / 21
Регистрация: 24.03.2011
Сообщений: 641
Завершенные тесты: 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'ом, чтоль...
Yandex
Объявления
09.12.2013, 14:36     Как сделать очередь и убрать паузу программы при вводе данных?
Ответ Создать тему
Опции темы

Текущее время: 23:34. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru