Процедура осуществляет досрочный выход из циклов For, While или Repeat.
Процедура должна находиться внутри этих циклов, иначе транслятор сообщит об ошибке.
Procedure Continue;
Процедура досрочно начинает следующую итерацию циклов For, While или Repeat.
Процедура должна находиться внутри этих циклов, иначе транслятор сообщит об ошибке.
Procedure Exit;
Осуществляет немедленный выход из текущей подпрограммы. Если текущей подпрограммой является главная программа, она завершает работу.
Procedure Halt[(Exitcode: Integer)];
Процедура выполняет аварийное завершение программы. Чтобы нормально завершить приложение, вызовите Application.Terminate. Exitcode — необязательное выражение, которое определяет код завершения вашей про-граммы.
if 1 = 1 then begin if 2 = 2 then begin if 3 = 3 then begin Halt(1); < Программа остановится здесь! >end; end; end; Canvas.TextOut(10, 10, ‘Это не будет выполнено’); end;
Источник: codenet.ru
Паскаль для новичков 4-ввод информации и компиляция программы
Как завершить программу pascal
Дано задание сделать так чтобы при завершении программы, программа давала запрос (выйти(завершить программу)) «Y»;»N».
т.е. выводилось окно с запросом на подтверждение завершения программы.
Напишите пожалуйста текст.
Заранее благодарю.
Форумчанин
Регистрация: 02.01.2009
Сообщений: 825
program zapros;
uses crt;
label m,l;
var i:integer;
s:char;
begin
i:=1;
m:i:=i+1;
writeln(i);
l: writeln(‘vyhod y/n’);
readln(s);
if s=’n’ then goto m
else if s=’y’ then exit
else begin
writeln(‘nado vvesti y ili n’);
goto l;
end;
end.
вступлю в команду разработчиков ПО на Delphi
Форумчанин
Регистрация: 05.01.2009
Сообщений: 242
maladoy спасибо тебе помог.
завтра пойду сдаваться преподу )))
Форумчанин
Регистрация: 02.01.2009
Сообщений: 825
Отзыв не забудь
вступлю в команду разработчиков ПО на Delphi
Участник клуба
Регистрация: 10.11.2008
Сообщений: 1,502
program zapros;
uses crt;
label m,l;
var i:integer;
s:char;
begin
i:=1;
m:i:=i+1;
writeln(i);
l: writeln(‘vyhod y/n’);
readln(s);
if s=’n’ then goto m
else if s=’y’ then exit
else begin
writeln(‘nado vvesti y ili n’);
goto l;
end;
end.
Лучше бы не использовать goto, а repeat until — преподу не понравится.
P.S. Для читабельности кода используйте теги форматирования #
Нормальное состояние техники — нерабочее, все остальное частный случай.
Форумчанин
Регистрация: 02.01.2009
Сообщений: 825
Просили сделать. А как не говорили прога работает? Работает! А понравиться не понравиться это уже дело личное. Итак бесплатно сделали . А под repeat переделать я думаю много ума не надо. Я бы с удовольствием писал даже с комментариями но с телефона это ой как не удобно. [/QUOTE]
Обучение программированию на Pascal ABC. Часть 1. Как написать простую программу
вступлю в команду разработчиков ПО на Delphi
Источник: www.programmersforum.ru
Как завершить программу pascal
О геометрических преобразованиях можно почитать в замечательном учебнике Немнюгина С. А. «Turbo Pascal»
А формулы поворота произвольной точки на угол alpha вокруг начала координат такие:
x=x*cos(alpha)-y*sin(alpha) y=x*sin(alpha)+y*cos(alpha)
Vladimir_S
Специалист
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,809
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
Ну вот, сочинил я для Вас некую вспомогательную игру. Вначале Ваш инопланетянин располагается в центре экрана (640х480). Нажатие клавиши «R» (в любом регистре, но с латинской раскладкой («En»)) заставляет его вертеться, клавиши «M» — двигаться туда, куда смотрит «голова». Нажатие любой другой символьной клавиши прерывает программу. Клавиши «M» и «R» можно удерживать.
Одновременное их нажатие НЕ ПРЕДУСМОТРЕНО.
Кроме того, мне кажется, у меня массив точек и построение фигуры сделаны более компактно и рационально.
А уж всякие там траектории, стрелки и пр. — это Вы, пожалуйста, самостоятельно.
И еще одно — ВАЖНО! У меня DOS-экран, на котором рисование идет белым по черному. Если у Вас экран белый, а линии черные, то цвета в командах SetColor в процедуре нужно поменять местами.
Uses CRT, Graph; TYPE PCoord=Array[1..19,1..2] of Integer; CONST a0_PCoord=((-25,20),(-25,-20),(25,-20),(25,0),(25,-10), (28,-10),(28,-20),(30,-20),(30,-10),(35,-5), (35,5),(30,10),(30,20),(28,20),(28,10), (25,10),(25,0),(25,20),(-25,20)); VAR a1,a2:PCoord; X1,Y1,X2,Y2,Angle:WORD; Ch:Char; Shft:Byte; grDriver:integer; grMode:integer; ErrCode: integer; Procedure Draw_Fig(X_bef,Y_bef,Fi:Word; a_bef:PCoord; Sh:Byte; var X_aft:WORD; var Y_aft:WORD; var a_aft:PCoord); var i:Byte; Fi_rad:Real; begin Fi_rad:=Pi*Fi/180; SetColor(Black); for i:=1 to 18 do Line(X_bef+a_bef[i,1],Y_bef+a_bef[i,2], X_bef+a_bef[i+1,1],Y_bef+a_bef[i+1,2]); If Sh<>0 then begin X_aft:=ROUND(X_bef+Sh*Cos(Fi_Rad)); Y_aft:=ROUND(Y_bef-Sh*Sin(Fi_Rad)); end else begin X_aft:=X_bef; Y_aft:=Y_bef; end; for i:=1 to 19 do begin a_aft[i,1]:=ROUND(a0[i,1]*Cos(Fi_Rad)+a0[i,2]*Sin(Fi_Rad)); a_aft[i,2]:=ROUND(-a0[i,1]*Sin(Fi_Rad)+a0[i,2]*Cos(Fi_Rad)); end; SetColor(White); for i:=1 to 18 do Line(X_aft+a_aft[i,1],Y_aft+a_aft[i,2], X_aft+a_aft[i+1,1],Y_aft+a_aft[i+1,2]); end; BEGIN grDriver:=Detect; InitGraph(grDriver, grMode, ‘d:bpbgi’ ); ErrCode:=Graphresult; a1:=a0; X1:=320; Y1:=240; Angle:=0; Draw_Fig(X1,Y1,0,a1,0,X2,Y2,a2); X1:=X2; Y1:=Y2; a1:=a2; Repeat Ch:=ReadKey; If (Ch=’m’) or (Ch=’M’) then Draw_Fig(X1,Y1,Angle,a1,4,X2,Y2,a2); If (Ch=’r’) or (Ch=’R’) then begin Angle:=Angle+9; Draw_Fig(X1,Y1,Angle,a1,0,X2,Y2,a2) end; X1:=X2; Y1:=Y2; a1:=a2; Until (Ch<>’m’) and (Ch<>’M’) and (Ch<>’r’) and (Ch<>’R’); CloseGraph; END.
Обработку Graphresult я обычно не использую. Хотите — добавьте, тут нет проблем.
Vladimir_S
Специалист
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,809
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
Ладно, сочинил я полное решение Вашей задачки. Как и в пердыдущей программе, если у Вас графика типа «черное по белому», то цвета black и white надо поменять местами.
Программа прерывается в любой момент нажатием клавиши «Esc».
Uses CRT, Graph; TYPE PCoord=Array[1..19,1..2] of Integer; CONST a0_PCoord=((-25,20),(-25,-20),(25,-20),(25,0),(25,-10), (28,-10),(28,-20),(30,-20),(30,-10),(35,-5), (35,5),(30,10),(30,20),(28,20),(28,10), (25,10),(25,0),(25,20),(-25,20)); VAR a1,a2:PCoord; X1,Y1,X2,Y2:WORD; Angle:Real; grDriver:integer; grMode:integer; ErrCode: integer; Procedure Escape; VAR Chr : char; BEGIN IF KeyPressed THEN BEGIN Chr :=ReadKey; if Chr = #27 then Halt(0); END; END; Procedure Draw_Arrow; begin SetLineStyle(SolidLn,0,ThickWidth); MoveTo(450,290); LineTo(550,290); LineTo(540,286); Line(550,290,540,294); SetLineStyle(SolidLn,0,NormWidth); end; Procedure Draw_Line; begin SetLineStyle(DottedLn,0,ThickWidth); MoveTo(41,240); LineTo(599,240); LineTo(599,54); LineTo(41,426); LineTo(320,426); LineTo(320,54); LineTo(41,240); SetLineStyle(SolidLn,0,NormWidth); end; Procedure Draw_Fig(X_bef,Y_bef:Word; Fi:Real; a_bef:PCoord; ShX,ShY:ShortInt; var X_aft:WORD; var Y_aft:WORD; var a_aft:PCoord); var i:Byte; Fi_rad:Real; begin Fi_rad:=Pi*Fi/180; SetColor(Black); for i:=1 to 18 do Line(X_bef+a_bef[i,1],Y_bef+a_bef[i,2], X_bef+a_bef[i+1,1],Y_bef+a_bef[i+1,2]); If (ShX<>0) or (ShY<>0) then begin X_aft:=X_bef+ShX; Y_aft:=Y_bef+ShY; end else begin X_aft:=X_bef; Y_aft:=Y_bef; end; for i:=1 to 19 do begin a_aft[i,1]:=ROUND(a0[i,1]*Cos(Fi_Rad)+a0[i,2]*Sin(Fi_Rad)); a_aft[i,2]:=ROUND(-a0[i,1]*Sin(Fi_Rad)+a0[i,2]*Cos(Fi_Rad)); end; SetColor(White); for i:=1 to 18 do Line(X_aft+a_aft[i,1],Y_aft+a_aft[i,2], X_aft+a_aft[i+1,1],Y_aft+a_aft[i+1,2]); end; BEGIN grDriver:=Detect; InitGraph(grDriver, grMode, ‘d:bpbgi’ ); ErrCode:=Graphresult; Draw_Arrow; Draw_Line; a1:=a0; X1:=320; Y1:=240; Angle:=0; Draw_Fig(X1,Y1,0,a1,0,0,X2,Y2,a2); X1:=X2; Y1:=Y2; a1:=a2; Repeat Draw_Fig(X1,Y1,Angle,a1,3,0,X2,Y2,a2); X1:=X2; Y1:=Y2; a1:=a2; Draw_Line; Delay(200); Escape; Until X2=599; Repeat Angle:=Angle+2; Draw_Fig(X1,Y1,Angle,a1,0,0,X2,Y2,a2); X1:=X2; Y1:=Y2; a1:=a2; Draw_Line; Delay(200); Escape; Until Angle=90; Repeat Draw_Fig(X1,Y1,Angle,a1,0,-2,X2,Y2,a2); X1:=X2; Y1:=Y2; a1:=a2; Draw_Line; Delay(200); Escape; Until Y2=54; Repeat Angle:=Angle+2; Draw_Fig(X1,Y1,Angle,a1,0,0,X2,Y2,a2); X1:=X2; Y1:=Y2; a1:=a2; Draw_Line; Delay(200); Escape; Until Angle>(Pi+Arctan(2/3))*180/Pi; Angle:=(Pi+Arctan(2/3))*180/Pi; Repeat Draw_Fig(X1,Y1,Angle,a1,-3,2,X2,Y2,a2); X1:=X2; Y1:=Y2; a1:=a2; Draw_Line; Delay(200); Escape; Until X2=41; Repeat Angle:=Angle+2; Draw_Fig(X1,Y1,Angle,a1,0,0,X2,Y2,a2); X1:=X2; Y1:=Y2; a1:=a2; Draw_Line; Delay(200); Escape; Until Angle>360; Angle:=0; Repeat Draw_Fig(X1,Y1,Angle,a1,3,0,X2,Y2,a2); X1:=X2; Y1:=Y2; a1:=a2; Draw_Line; Delay(200); Escape; Until X2=320; Repeat Angle:=Angle+2; Draw_Fig(X1,Y1,Angle,a1,0,0,X2,Y2,a2); X1:=X2; Y1:=Y2; a1:=a2; Draw_Line; Delay(200); Escape; Until Angle=90; Repeat Draw_Fig(X1,Y1,Angle,a1,0,-2,X2,Y2,a2); X1:=X2; Y1:=Y2; a1:=a2; Draw_Line; Delay(200); Escape; Until Y2=54; Repeat Angle:=Angle+2; Draw_Fig(X1,Y1,Angle,a1,0,0,X2,Y2,a2); X1:=X2; Y1:=Y2; a1:=a2; Draw_Line; Delay(200); Escape; Until Angle>(Pi+Arctan(2/3))*180/Pi; Angle:=(Pi+Arctan(2/3))*180/Pi; Repeat Draw_Fig(X1,Y1,Angle,a1,-3,2,X2,Y2,a2); X1:=X2; Y1:=Y2; a1:=a2; Draw_Line; Delay(200); Escape; Until X2=41; Repeat Angle:=Angle+2; Draw_Fig(X1,Y1,Angle,a1,0,0,X2,Y2,a2); X1:=X2; Y1:=Y2; a1:=a2; Draw_Line; Delay(200); Escape; Until Angle>360; Angle:=0; Repeat Draw_Fig(X1,Y1,Angle,a1,3,0,X2,Y2,a2); X1:=X2; Y1:=Y2; a1:=a2; Draw_Line; Delay(200); Escape; Until X2=320; ReadKey; CloseGraph; END.
Источник: www.tehnari.ru