Сайт Koder.kz сайт для Delphi программистов.

koder.kz

Web or desctop App Developer

Написать

Добавил admin | Категория Pascal за 12 уроков, перевод | 25 Декабря 2013


Доброго времени суток уважаемый читатель! Для того что бы лучше понять и усвоить этот урок тебе необходимо хорошо знать предыдущий урок. 

До сих пор условия в программе мы описывали, используя оператор IF THEN ELSE но бывают случае когда двух веток ветвления нам не достаточно а делать вложенные IF THEN ELSE не очень красиво и с точки зрения оформления программного кода и логики программы. В таких случаях необходимо применять оператор CASE его работа кстати очень похожа на работу оператора IF THEN ELSE, теперь давайте взглянем на него

Case {переменная типа: integer, string, byte – целого типа, строковые, символьные} of

         {значение переменной} : {программный код который следует выполнить если переменная имеет это значение}

         {значение переменной} : {программный код который следует выполнить если переменная имеет это значение}

End;  {End Case}

Я надеюсь вам все тут понятно, кому не понятно, пожалуйста пример программы с использованием IF THEN ELSE ниже


Program Program1a_Lesson5;
Uses Crt;
Label Return;
Var SEL : Integer;
YN : Char;
Begin
	Return: Clrscr;
	Writeln('[1].PLAY GAME');
	WRITELN('[2].LOAD GAME');
	WRITELN('[3].MULTIPLAYER');
	WRITELN('[4].EXIT GAME');
	Writeln('note: Do note press anything except');
	Writeln('numbers; otherwise an error occurs!');
	Readln(SEL);
	If SEL = 1 then
	Begin
		Writeln('Are you able to create a game');
		Writeln('of yourself using pascal??');
		Delay(2000);
		Goto Return;
	End;
	If SEL = 2 then
	Begin
		Writeln('Ahhh... no saved games');
		Delay(2000);
		Goto Return;
	End;
	If SEL = 3 then
	Begin
		Writeln('networking or 2 players?');
		Delay(2000);
		Goto Return
	End
	If SEL = 4 then
	Begin
		Writeln('Exit?');
		YN := Readkey;
		If YN = 'y' then
		Begin
			Writeln('Nooooooooooooo...');
			Delay(1000);
			Halt; {EXIT PROGRAM}
		End;
	If YN = 'n' then
	Goto Return;
	End;
End.

Ну а теперь тоже самое только с CASE


Program Program1b_Lesson5;
Uses Crt;
Label Return;  {use of the goto statement
is not recommended..avoid it}
Var SEL : Integer;
	YN  : Char;
Begin
	Return:Clrscr;
	Writeln('[1].PLAY GAME');
	WRITELN('[2].LOAD GAME');
	WRITELN('[3].MULTIPLAYER');
	WRITELN('[4].EXIT GAME');
	Writeln('note: Do note press anything except');
	Writeln('numbers; otherwise an error occurs!');
	Readln(SEL);

Case SEL of 1 : Begin Writeln('Are you able to create'); Writeln('a game of yourself using pascal??'); Delay(2000); Goto Return; End; 2 : Begin Writeln('Ahhh... no saved games') Delay(2000); Goto Return; End; 3 : Begin Writeln('networking or 2 players?'); Delay(2000); Goto Return; End; 4 : Begin Writeln('Exit?'); YN := Readkey; Case YN of {a sort of a nested case statement} 'y' : Begin Writeln('Nooooooooooooo...'); Delay(1000); Halt; End; 'n' : Goto Return; End;{End Case2} End;{Close Conditional Expression 4} End; {End Case1} End.

Вы можете заметить что CASE в наших примерах похоже на сокращенную форму IF THEN, да, это так, но у CASE так же есть и полная форма, изучите пример ниже что бы понять как она работает


Program Program2_Lesson5;
Uses Crt;
Label Return; { avoid it }
Var YN : Char;
Begin
	Return:ClrScr;
	Writeln('Exiting?');
	YN := Readkey;
	Case YN of
		'y' : Halt;
		'n' : Begin
				Writeln('What are you going to do here, anyway?');
				Delay(2000);
				Halt;
			End;
		Else
		Begin
			Writeln('Either press ''y'' for yes');
			Writeln('or ''n'' for no.. please try again..');
			Delay(3500);
			ClrScr;
			Goto Return;
		End;
	End; {CASE}
End. {PROGRAM}