Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.63/8: Рейтинг темы: голосов - 8, средняя оценка - 4.63
0 / 0 / 0
Регистрация: 27.04.2013
Сообщений: 5
1

Как выполнить циклы одновременно?

27.04.2013, 19:12. Просмотров 1489. Ответов 11
Метки нет (Все метки)

Здраствуйте программисты я работаю над маленьким проектом разделения в трехфазном сепараторе.Все почти уже закончил.Только возникла проблема с одновременным выполнением циклов. вот алгоритмы
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
#include <graphics.h>
#include <conio.h> 
main() 
{ 
int x,y,yd,yz,yo,xo; 
float x2,x3; 
initwindow(500,500); 
setfillstyle(1,15); 
floodfill(1,1,15); 
setcolor(0); 
arc(150, 150, 120, 140, 70); 
arc(150,150,156,230,70); 
setcolor(0);
line(245,203,200,203); 
moveto(15,23);// liniya techeniya nefti 
lineto(95,105); 
moveto(15,48); 
lineto(85,120); 
line(105,203,220,203);//qrafika nachinayetsya 
line(115,89,220,89);
 
rectangle(220,80,240,170); 
setfillstyle(1,0); 
floodfill(225,90,0); 
setcolor(0); 
line(240,89,310,89);
line(323,89,340,89);
line(310,89,310,74);
line(323,89,323,74); 
line(240,203,350,203); 
arc(306, 150, 310,60 , 70); 
setcolor(1); 
rectangle(290,203,300,230); 
setcolor(0); 
rectangle(334,203,344,230); 
setcolor(0);//seraya stena 
line(85,175,220,175); 
line(80,150,220,150); 
line(219,175,219,150); 
setfillstyle(1,8); 
floodfill(100,155,0); 
line(241,175,325,175); 
line(241,150,320,150); 
line(241,175,241,150); 
line(325,150,325,175); 
 
line(320,150,325,150);
setcolor(8);
line(324,202,324,176);
line(325,202,325,176); 
setfillstyle(1,8); 
floodfill(255,155,0);
x2=106; x3=92; yd=203; yz=23; yo=48;xo=10;
for(x=15;x<89;x+=1){
yz+=1; yo+=1; 
setcolor(0);
line(x,yz,x,yo);delay(100);}
 
for(y=203;y>188;y-=1,x2-=0.97){setcolor(COLOR(0,0,255));
line(323,y,x2,y);delay(210);
line(300,yd,290,yd);yd+=1;}
for(y=188;y>175;y-=1,x3-=0.58){ setcolor(COLOR(0,0,255));
line(323,y,x3,y);delay(210);
line(300,yd,290,yd);yd+=1;}
for(y=176;y>169;y-=1){
line(240,y,219,y);delay(125);
}
 
getch (); 
closegraph();}

Мне надо чтобы на верхней части нефть разделялась одновременно с водой.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
27.04.2013, 19:12
Ответы с готовыми решениями:

Циклы for и while (выполнить в двух вариантах)
Циклы for и while (выполнить в двух вариантах) Вычислить и вывести на экран в виде таблицы...

Можно ли и как выполнить одновременно несколько команд?
Помню, что-то такое было про управление потоками в CMD... Нужно запустить два цикла одновременно!

Как выполнить два трансформирования меша одновременно
Здравствуйте! Я столкнулся с такой проблемой: мне нужно уменьшить объект и передвинуть, но у меня...

Поток.Или как выполнить две функции одновременно
Мне надо в одно время выполнить два действия. Функция которая получает координаты клика и и что...

11
266 / 188 / 33
Регистрация: 15.01.2011
Сообщений: 681
27.04.2013, 19:19 2
использовать потоки, и то истинную много поточность можно поучить только на много процессорных системах, возможно также распоралелить циклы в GPU.
1
0 / 0 / 0
Регистрация: 27.04.2013
Сообщений: 5
27.04.2013, 19:32  [ТС] 3
Цитата Сообщение от ssXXss Посмотреть сообщение
использовать потоки, и то истинную много поточность можно поучить только на много процессорных системах, возможно также распоралелить циклы в GPU.
А нельзя включить все в один большой цикл? Я просто начинающий тут многое не понятно..Тем не менее спасибо за ответ

Добавлено через 3 минуты
Еще надо как то изобразить как нефть будет спускаться в правую часть сепаратора и выходит из трубы.Не знаю что с етим вобще делать..Просто в самом сепараторы процессы протекают одновременно.По другому бы проблем не бфло
0
266 / 188 / 33
Регистрация: 15.01.2011
Сообщений: 681
27.04.2013, 19:34 4
не думаю что стоит все запихивать в один цикл, лучше задачу разбить на ряд мелких, проще баги отловить, но это сугубо мое не правильное мнение )).
0
1346 / 986 / 312
Регистрация: 28.07.2012
Сообщений: 2,743
27.04.2013, 19:38 5
Эта задача легко решается при помощи OpenMP.
1
0 / 0 / 0
Регистрация: 27.04.2013
Сообщений: 5
27.04.2013, 19:45  [ТС] 6
Цитата Сообщение от nonedark2008 Посмотреть сообщение
Эта задача легко решается при помощи OpenMP.
Можете немного подсказать поподробнее плиз?
0
1346 / 986 / 312
Регистрация: 28.07.2012
Сообщений: 2,743
27.04.2013, 19:49 7
Цитата Сообщение от Shadowmasster Посмотреть сообщение
Можете немного подсказать поподробнее плиз?
Сначало поддержку OpenMP нужно врубить, а затем копать в сторону omp section. Но я считаю, что распаралеливание тут не очень подходит. Лучше последовательно рисовать по кусочку то того, то другого.
1
266 / 188 / 33
Регистрация: 15.01.2011
Сообщений: 681
27.04.2013, 19:52 8
http://software.intel.com/ru-r... 1/openmp-c

Добавлено через 1 минуту
для винды в частности http://msdn.microsoft.com/ru-r... 35940.aspx
1
1346 / 986 / 312
Регистрация: 28.07.2012
Сообщений: 2,743
27.04.2013, 20:20 9
Если распаралелить, то не будет ясно кто выполнится быстрее - первый поток или второй. В случае OpenMP - мы даже не будем знать точно ли у нас будет два потока(хотя это можно задать вручную).
0
266 / 188 / 33
Регистрация: 15.01.2011
Сообщений: 681
27.04.2013, 20:31 10
не знаю как для никсов но в винде можно использовать события , например - все потоки по окончанию работы сигнализируют в основной что дело сделано , основной или дожидается окончания выполнения работы всеми потоками или использует результат сразу после получения события от конкретного.

Добавлено через 3 минуты
тык много поточность и методы синхронизации ну много еще всего с++ 11
0
1346 / 986 / 312
Регистрация: 28.07.2012
Сообщений: 2,743
27.04.2013, 22:29 11
Цитата Сообщение от ssXXss Посмотреть сообщение
сигнализируют в основной что дело сделано
В винде тоже самое есть. Но проблема в другом. Мы заранее не знаем как будут выполняться потоки. Может первый запуститься, а второй тока через секунду. Короче, проблема в синхронизации. Каждый раз будет различный результат выполнения...
0
0 / 0 / 0
Регистрация: 27.04.2013
Сообщений: 5
27.04.2013, 23:05  [ТС] 12
Цитата Сообщение от ssXXss Посмотреть сообщение
не знаю как для никсов но в винде можно использовать события , например - все потоки по окончанию работы сигнализируют в основной что дело сделано , основной или дожидается окончания выполнения работы всеми потоками или использует результат сразу после получения события от конкретного.

Добавлено через 3 минуты
тык много поточность и методы синхронизации ну много еще всего с++ 11
ВСЕ СДЕЛАЛ...ТОЛЬКО ПО ДРУГОМУ ПО КуСОЧКАМ.ПРАВДА МНОГО ВРЕМЕНИ ЗАНЯЛО..Осталось только пузырьки газа сделать ...Вот алгоритм посмотрите и оцените если интересно...
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
#include <graphics.h>
#include <conio.h>      
main()      
{            
             int x,y,yd,yz,yo,xo,yu,xs,yh,xl,yb,fg;  
             float x2,x3,oh;    
             initwindow(500,500);      
             setfillstyle(1,15);      
             floodfill(1,1,15);      
             setcolor(0);      
             arc(150, 150, 120, 140, 70);      
             arc(150,150,156,230,70);      
             setcolor(0);
             line(245,203,200,203);       
             moveto(15,23);// liniya techeniya nefti       
             lineto(95,105);       
             moveto(15,48);       
             lineto(85,120);             
             line(105,203,220,203);//qrafika nachinayetsya      
             line(115,89,220,89);
                    
             rectangle(220,80,240,170);        
             setfillstyle(1,0);      
             floodfill(225,90,0);          
             setcolor(0);      
             line(240,89,310,89);
             line(323,89,340,89);
             line(310,89,310,74);
             line(323,89,323,74);      
             line(240,203,350,203);      
             arc(306, 150, 310,60 , 70);            
             setcolor(1);      
             rectangle(290,203,300,230);            
             setcolor(0);      
             rectangle(334,203,344,230);            
             setcolor(0);//seraya stena      
             line(85,175,220,175);      
             line(80,150,220,150);      
             line(219,175,219,150);            
             setfillstyle(1,8);      
             floodfill(100,155,0);      
             line(241,175,325,175);      
             line(241,150,320,150);      
             line(241,175,241,150);      
             line(325,150,325,175);      
                   
             line(320,150,325,150);
             setcolor(8);
             line(324,202,324,176);
             line(325,202,325,176);     
             setfillstyle(1,8);      
             floodfill(255,155,0);
             x2=106; x3=92; yd=203; yz=23; yo=48; xo=10; yu=149; xs=81; yh=202; xl=350; yb=204;
              for(x=15;x<89;x+=1){
             yz+=1; yo+=1;     
              setcolor(0);
              line(x,yz,x,yo);delay(100);}
                                  
             for(y=203;y>188;y-=1,x2-=0.97){setcolor(COLOR(0,0,255));
             line(323,y,x2,y);delay(210);
             line(300,yd,290,yd);yd+=1;
             setcolor(4);
             line(219,yu,xs,yu);yu-=1;xs+=0.9;
             line(241,yu+1,325,yu+1);
             line(326,yh,xl,yh);yh-=1;xl+=1;
             line(334,yb,344,yb);yb+=1;
             }
             line(334,219,344,219);
             line(326,187,365,187);setcolor(COLOR(0,0,255));
             line(323,188,91.42,188);
             line(300,218,290,218);
             delay(210);setcolor(4);
             line(334,220,344,220);
             line(326,186,365.5,186);setcolor(COLOR(0,0,255));
             line(323,187,90.84,187);
             line(300,219,290,219);
             delay(210);setcolor(4);
             line(334,221,344,221);
             line(326,185,366,185);setcolor(COLOR(0,0,255));
             line(323,186,90.26,186);
             line(300,220,290,220);
             delay(210);setcolor(4);
             line(334,222,344,222);
             line(326,184,366.5,184);setcolor(COLOR(0,0,255));
             line(323,185,89.68,185);
             line(300,221,290,221);
             delay(210);setcolor(4);
             line(334,223,344,223);
             line(326,183,367,183);setcolor(COLOR(0,0,255));
             line(323,184,89.10,184);
             line(300,222,290,222);
             delay(210);setcolor(4);
             line(334,224,344,224);
             line(326,182,367.5,182);setcolor(COLOR(0,0,255));
             line(323,183,88.52,183);
             line(300,223,290,223);
             delay(210);setcolor(4);
             line(334,225,344,225);
             line(326,181,368,181);setcolor(COLOR(0,0,255));
             line(323,182,88.04,182);
             line(300,224,290,224);
             delay(210);setcolor(4);
             line(334,225,344,225);
             line(326,180,368.5,180);setcolor(COLOR(0,0,255));
             line(323,181,87.46,181);
             line(300,225,290,225);
             delay(210);setcolor(4);
             line(334,226,344,226);
             line(326,179,369,179);setcolor(COLOR(0,0,255));
             line(323,180,86.88,180);
             line(300,226,290,226);
             delay(210);setcolor(4);
             line(334,227,344,227);
             line(326,178,369.5,178);setcolor(COLOR(0,0,255));
             line(323,179,86.30,179);
             line(300,227,290,227);
             delay(210);setcolor(4);
             line(334,228,344,228);
             line(326,177,370,177);setcolor(COLOR(0,0,255));
             line(323,178,85.72,178);
             line(300,228,290,228);
             delay(210);setcolor(4);
             line(334,229,344,229);
             line(326,176,370.5,176);setcolor(COLOR(0,0,255));
             line(323,177,85.16,177);
             line(300,229,290,229);
             delay(210);setcolor(4);
             line(326,175,370.6,175);setcolor(COLOR(0,0,255));
             line(323,176,84.60,176);
             
             oh=370.6; fg=174;
             for(y=176;y>169;y-=1){ setcolor(COLOR(0,0,255));
             line(240,y,219,y);setcolor(4);
             line(326,fg,oh,fg);oh+=0.4;fg-=1;
             delay(210);
             }
             for(fg=167;fg>134;fg--){
             line(326,fg,oh,fg);oh+=0.04;delay(120);}
             
             
                        
             getch ();          
             closegraph();}
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
27.04.2013, 23:05

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Как выполнить поиск одновременно по нескольким значениям документа
в общем задача такая: имеется база. в ней есть документы которые заносятся строго по определенному...

Как можно выполнить одновременно два метода не используя Thread
Мне нужно использовать два метода (приём сообщения и его вывод ,запись и отправка сообщения )...

Возможно ли одновременно выполнить два действия в программе?
Возможно ли одновременно запустить два таймера или в принципе выполнить более одного оператора?...

Выполнить два действия одновременно, не загружая интерфейс
Написал простой таймер Private Sub Form1_Load(ByVal sender As Object, ByVal e As...


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

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Опции темы

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