Помощь - Поиск - Пользователи - Календарь
Полная версия: Циклы в Graph
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
Player
Всем привет. Может кто поможет сделать, чтобы эти два цикла выполнялись одновременно.

Код
Program Anim;
Uses Crt,Graph;
Var I,J,Gd,Gm:Integer;
Begin
Clrscr;
Gd:=Detect;
Gm:=2;
InitGraph (Gd,Gm,'C:\BP\BGI');
SetBKColor (7);
ClearDevice;

SetColor (6);
For I:=200 To 300 Do Begin
Line (250,I,290,J);
Line (290,J,305,J);
Line (305,J,250,I);
ClearViewPort;
Delay(4000);
End;

For J:=110 To 210 Do Begin
Line (250,I,290,J);
Line (290,J,305,J);
Line (305,J,250,I);
ClearViewPort;
Delay(4000);
End;

CloseGraph;
End.
volvo
Player, смысл программы в чем, скажи... А то не совсем понятно, что это такое мигает ... unsure.gif
Alex7
Я уже давно мучаю, в прчмом смысле этот вопрос.
Ответ получил только что нужно переходить на 32 битный компилятор, так как в Паскале нету поддержки одновременных процессов, даже емуляцию я и то не понимаю как сделать! nea.gif norespect.gif
Romtek
Player
Код
For I:=200 To 300 Do Begin
Line (250,I,290,J);
Line (290,J,305,J);
Line (305,J,250,I);
ClearViewPort;
Delay(4000);
End;

For J:=110 To 210 Do Begin
Line (250,I,290,J);
Line (290,J,305,J);
Line (305,J,250,I);
ClearViewPort;
Delay(4000);
End;

Тут что-то странное... Переменная J не инициализирована до первого цикла, а переменная I во втором цикле осталась той же, на какой закончился 1-й цикл. Ну и бред... mega_chok.gif

Для начала надо знать что ты хочешь отрисовать.
Делать вывод одновременно можно только объединив отрисовку линий в одном цикле.

Alex7, не неси чушь. Нигде нет параллельного выполнения кода программ и даже 32-битный компилятор этого не делает.
То, что для нас считается одновременно - для компьютера оно последовательно, просто быстро выполняется и разницы ен видно.
volvo
Alex7, "не путай теплое с мягким..." (С)

Практически одновременная отрисовка фигур еще не значит "многозадачность"... Вот тебе элементарный пример... Распакуй и запусти. Исходники не дам, только TPU файлы...
Нажмите для просмотра прикрепленного файла

P.S. Настоящая многозадачность реализуема только на многопроцессорных системах...
Alex7
Romtek,volvo
Помойму все об это давно знают, поэтому я так и выражаюсь- для простоты. Имею ввиду, что визуально процессы идут паралельно.
Но всетаки можно же организовать такую работу? ведь так?
Хоть кто то знает как правильно это сделать? wacko.gif
volvo
Alex7, ты архив смотрел?

Я тебя иногда не понимаю... Тебе вроде надо, но когда тебе напишешь - ты не обращаешь внимания... dry.gif
Alex7
Эм,......
М-да, я себя втаких случаях тоже иногда не понимаю wacko.gif
Я в упор не заметил, что ты это мне прикрепил данные! mega_chok.gif
однака... nea.gif
Alex7
Ну, посмотрел прогу.
Круто, красиво, наглядно.
НО зачем мне такой сложный пример, если мне нужно всего лишь ответ: КАК сделть процессы одновремеено?
Хотел, чтобы мне на примере моей проги показали, как это нужно сделать.
Если таки кто-то сможет(90% моего обращения это, конечно к Volvo=) ) То привожу свою прогу, в которой я хотел сделать "одновременное" выполнение подсчета nsk и выполнение процедуры point
Program NaimensheSpilneKratne(lab5);
Uses CRT;
Var a,b,c: integer;
dob,max: integer;
nsk: longint;
procedure SetCursorSize(cStart, cEnd: byte); assembler;
asm
mov ah, 1
mov ch, cStart
mov cl, cEnd
int 10h
end;
procedure SetNormalCursor;
var start_end: word;
begin
if LastMode > Font8x8 then start_end := $0507
else
if LastMode = Mono then start_end := $0b0c
else start_end := $0607;
SetCursorSize(hi(start_end), lo(start_end));
end;
procedure SetNoCursor;
begin
SetCursorSize(32, 0);
end;
Procedure point(p:byte);
Var i,j: byte;
Begin
While p=1 do
begin
For i:=1 to 3 do
begin
write('.'); for j:=1 to 4 do delay(9999);
end;
gotoxy(wherex-3,wherey); clreol; for j:=1 to 4 do delay(9999);
end;
End;
Begin
clrscr; textbackground(0);
textcolor(1); gotoxy(26,2); writeln('.::Џа®Ја ¬ ®ЎзЁб«Ґ­­п Ќ‘Љ::.');
Textcolor(yellow); For b:=1 to 4 do delay(9999);
Writeln('‚ўҐ¤iвм 3 жi«Ёе зЁб« ');
gotoxy(65,1);textcolor(1); Write('Ctrl+Pause=>exit'); gotoxy(1,4);
textcolor(15); readln(a,b,c);
{ЏҐаҐўiаЄ ­ ўҐ«ҐзЁ­г\begin}
if (a<2) or (a>9999) or (b<2) or (b>9999) or (c<2) or (c>9999) then
begin
repeat
textcolor(yellow);
writeln('ЌҐўiа­Ґ зЁб«®! ’ॡ г ¤i Ї §®­i- 2..9999 !');
textcolor(12{28});
gotoxy(30,wherey); write('-=‚ўҐ¤iвм § ­®ў®=-'); textcolor(15);
repeat until keypressed;
if keypressed then
begin
repeat
delline; gotoxy(1,wherey-1);
until wherey=4;
delline; readln(a,b,c);
end;
until (a>1) and (a<9999) and (b>1) and (b<9999) and (c>1) and (c<9999);
end;
{ЏҐаҐўiаЄ ­ ўҐ«ҐзЁ­г\end}
{ЏаЁбў®Ґ­­п §­ 祭м\begin}
if (a>=b) and (a>=c) then max:=a else
if (b>=a) and (b>=c) then max:=b else
max:=c;
{ЏаЁбў®Ґ­­п §­ 祭м\end}
textcolor(14); gotoxy(26,wherey); Write('‰¤Ґ ®ЎзЁб«Ґ­­п. ‡ 祪 ©вҐ.');
SetNoCursor;
point(0);
nsk:=0;
Repeat nsk:=nsk+max until (nsk mod a=0) and (nsk mod b=0) and (nsk mod c=0);
delline; gotoxy(1,wherey);
SetNormalCursor;
dob:=a*b*c;
sound(7000); delay(9999);delay(9999); nosound;
textcolor(green); writeln('max: ',max,#13,#10,'Ќ‘Љ жЁе зЁбҐ«= ',nsk);
if nsk<>dob then
writeln('i ­Ґ ¤®аiў­оу хе ¤®ЎгвЄг')
else
writeln('i ¤®аiў­оу хе ¤®ЎгвЄг');
For b:=1 to 9 do delay(9999);
gotoxy(58,1); clreol;
gotoxy(30,25); textcolor(8{24}); Write('Press any key to exit');
{Єгаб®а- ­i¬ жiп\begin}
repeat
For b:=50 downto 30 do
begin
For a:=1 to 3 do delay(9999); gotoxy(b,25); if keypressed then exit;
end;
For b:=31 to 50 do
begin
For a:=1 to 3 do delay(9999); gotoxy(b,25); if keypressed then exit;
end;
until keypressed;
{Єгаб®а- ­i¬ жiп\end}
End.
{Џ ¬'пвЄ }
{Ќ i¬Ґ­миҐ бЇi«м­Ґ Єа в­Ґ - ­ i¬Ґ­миҐ ¤®¤ в­у, пЄҐ ¤i«Ёвмбп ­ Є®¦­Ґ § жЁе зЁбҐ«.}

Alex7
Плиз!
Объясните! ↑
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.