Pascal/Условия
Урок 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!"
var a,b,c:integer;
ch:char;
begin
write('Vyvedete tri chisla razdeleni ot intervali:');
readln(a, b, c);
if (((a+b)>c) and ((a+c)>b) and ((b+c)>a)) then
begin
write('Zhelaete li da byde presmetnat perimetyra na triygylnika?');
readln(ch);
if (ch='d') then writeln('a+b+c=', a, '+', b, '+', c, '=', a+b+c)
else if (ch='d') then writeln('Syshtestvuva triygylnik sys stranite:', a, ',', b, ','c)
else writeln('Triygylnikyt sy6testvuva');
end
else writeln('Ne syshtestvuva takyv triygylnik!');
readln;
end.
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
var a:integer;
begin
write('Vyvedete chislo mezhdu 1 i 99:');
readln(a);
if ((a>10) and (a<20)) then
begin
case a of
11:writeln('edinadeset');
12:writeln('dvanadeset');
13:writeln('trinadeset');
14:writeln('chetirinadeset');
15:writeln('petnadeset');
16:writeln('shestnadeset');
17:writeln('sedemnadeset');
18:writeln('osemnadeset');
19:writeln('devetnadeset');
end;
end
else
begin
case (a div 10) of
1:write('deset');
2:write('dvadeset');
3:write('trideset');
4:write('chetirideset');
5:write('petdeset');
6:write('shestdeset');
7:write('sedemdeset');
8:write('osemdeset');
9:write('devetdeset');
end;
if (((a div 10)>0) and ((a mod 10)<>0)) then write(' i ')
else if ((a div 10)>0) then writeln;
case (a mod 10) of
1:write('edno');
2:write('dve');
3:write('tri');
4:write('chetiri');
5:write('pet');
6:write('shest');
7:write('sedem');
8:write('osem');
9:write('devet');
end;
end;
readln;
end.