Pascal/Условия

From Wikiversity
Информатика

Уроци
Урок 1 :Въведение
Урок 2 :Променливи и типове
Урок 3 :Условия
Урок 4 :Цикли
Урок 5 :Масиви
Урок 6 :Константи
Урок 7 :Процедури и функции
Упражнение
Упражнение :Упражнения І


Този урок се занимава с това, как може да се определя, кои команди да изпълни програмата в зависимост от стойността на дадени промеливи или изрази.

If и then[edit]

В езика Pascal със запазената дума if (ако) се обозначава, че следва условие. Ако съответното условие е вярно, то се изпълнява комадата, която следва думата then (тогава). Обощено този принцип може да се напише по следния начин:

If (УСЛОВИЕ) then КОМАНДА;

Тъй като паскал не различава между малки и главни букви в сорс кода си, If може да се пише и с малки букви, без да има разлика в изпълнението на командата. В следната програма се дава пример за условие, в който ако променливата a (предварително декларирана от тип integer) е по-голяма от числото 0, тогава програмата отпечатва думата "POLOZHITELNO", а ако е по-малка от нула отпечатва думата "OTRICATELNO". Забележете, че ако въведеното число е равно на нула програмата не отпечатва нито една от двете думи, тъй като то не отговаря на нито едно от условията.

Запазените с знаци, с които могат да се сравняват стойностите на две променлии са:

  • "=":Равно , тоест (a=b) се чете като: Равно ли е a на b?
  • ">":По-голямо
  • "<":По-малко
  • ">=":По-голямо или равно
  • "<=":По-малко или равно
  • "<>":Различно
var a:integer;
begin
 write('Molya, vavedete chislo');
 readln(a);
 if (a>0) then writeln('POLOZHITELNO');
 if (a<0) then writeln('OTRICATELNO');
 readln;
end.

Ако е нужно да се проверят повече от едно условие преди да се изпълни командата са възможни няколко варянта:

  • Да е нужно всички условия да са верни за да се изпълни командата. В този случай условията се свързват от думата and (и)
  • Да е нужно поне едно от условията да е изпълнено. Условията се свързват с думата or (или)
  • Да е нужно поне едно от условията да е изпълнено, но ако всички условия са изпълнени целия израз да се счита за грешен - условията се свързват с думата xor
  • Ако условието е вярно да се счита за грешно или обратното - not

В първия вариант на следната програма от клавиатурата се въвежда едно число и ако то е положително и четно (a mod 2=0) програмата отпечатва "Polozhitelno i chetno", а ако е положително и нечетно отпечва "Polozhitelno i nechetno".

var a:integer;
begin
 write('Molya, vavedete chislo');
 readln(a);
 if ((a>0) and ((a mod 2)=0)) then writeln('Polozhitelno i chetno');
 if ((a>0) and ((a mod 2)=1)) then writeln('Polozhitelno i nechetno');
 readln;
end.

Забелязваме, че условието числото да е положително е общо. Възможно е ако дадено условие е изпълнено да се извършат повече от една команди без да се налага да се пише отново if then клауза, съдържаща същото условие. За целта след then и преди командите се поставя begin, а след тях end; (обърнете внимание, че се поставя ";" след end, а не ".").

var a:integer;
begin
 write('Molya, vavedete chislo');
 readln(a);
 if ((a>0) then
  begin
   if ((a mod 2)=0) then writeln('Polozhitelno i chetno');
   if ((a mod 2)=1) then writeln('Polozhitelno i nechetno');
  end;
 readln;
end.

Else[edit]

Забелязваме, че двете множества изчерпват всички възможностти, тоест ако едно число не е четно, то е нечетно. Писането на две противоположни условия може да се избегне, като се напише думата else (иначе). Тоест ако условието в първия if не е изпълнено, то се изпълнява командата в else клаузата. Възможно е и използването и на Else if (УСЛОВИЕ) then клауза в случай, че условието не влиза в предхождащия If, но се нуждае от доуточняване. Преди думата else не се пише ;.

var a:integer;
begin
 write('Molya, vavedete chislo');
 readln(a);
 if ((a>0) then
  begin
   if ((a mod 2)=0) then writeln('Polozhitelno i chetno')
   else writeln('Polozhitelno i nechetno');
  end;
 readln;
end.

Задача[edit]

Напишете програма, която въвежда три числа от клавиатурата и определя дали съществува триъгълник със тези страни (условието е всяка страна да е по-малка от сбора на останалите две). Ако съществува да изиска въвеждането на "d" или "n" (за "да" или "не") като отговор на въпроса "Zhelaete li da byde presmetnat perimetyra na triygylnika?" и съответно извежда или не периметъра на триъгълника по формулата (а+b+c), при отговор "n" отпечатва "Syshtestvuva triygylnik sys stranite:" и отпечатва страните, а при отговор различен от "d" и "n" изписва "Triygylnikyt sy6testvuva" В случай, че не съществува такъв триъгълник програмата да отпечата "Ne syshtestvuva takyv triygylnik!"

case of[edit]

В случай, че има ясно дефиниран ограничен брой възможностти е по-удачно използването на if then за всяка възможност, а на case (ПРОМЕНЛИВА/УСЛОВИЕ) of (тоест "в случай на"). Тази команда се използва, като променливата или условието се поставят в скоби между думите case и of, а на следващите редове се изреждат възможните случаи, последвани от двуеточие и командата, която се изпълнява ако пеоменливата или условието отговарят на съответния случай. Това става ясно от следния пример:

var a:integer;
begin
 write('Vyvedete chislo mezhdu 0 i 10:');
 readln(a);
 case a of
  0:writeln('nula');
  1:writeln('edno');
  2:writeln('dve');
  3:writeln('tri');
  4:writeln('chetiri');
  5:writeln('pet');
  6:writeln('shest');
  7:writeln('sedem');
  8:writeln('osem');
  9:writeln('devet');
 end;
 readln;
end.

Тази програма въвежда едно едноцифрено число от клавиатурата и отпечатва неговата стойност с думи. Ако числото не е едноцифрено или е по-малко от нула програмата няма да отпечата отговор. Това може да се избегне като се добави else към case клаузата:

case a of
 0:writeln('nula');
 1:writeln('edno');
 2:writeln('dve');
 3:writeln('tri');
 4:writeln('chetiri');
 5:writeln('pet');
 6:writeln('shest');
 7:writeln('sedem');
 8:writeln('osem');
 9:writeln('devet');
 else writeln('Vyvedenoto chislo ne e mezhdu 0 i 10');
end;

Възможно е и редица от случаи да водят до изпълняването на една и съща команда:

var ch:char;
begin
 write('Vyvedete simvoul:');
 readln(ch);
 case ch of
  'A'..'Z', 'a'..'z': writeln('Bukva');
  '0'..'9':           writeln('Cifra');
  '+', '-', '*', '/': writeln('Znak');
 else
  writeln('Specialen znak');
 end;
 readln;
end.

Задача[edit]

Да се напише програма, която да въвежда число между 1 и 99 и да отпечатва с думи неговата стойност на екрана. Например Vyvedete chislo mezhdu 1 i 99: 52 petdeset i dve