You are on page 1of 6

Структура Избор од повеќе можности

Избор од повеќе можности се користи кога постојат повеќе можности за


продолжување на дејствотот на алгоритмот, односно повеќе избори. Изборот на една од
можностите се врши во зависност од вредноста на некој податок или на некој израз.

Вредноста на израз може да биде една од вредностите a,b,...,k или да не биде ниту
една од тие вредности. Значи, можни се сите случаи. Доколку изразот добие вредност a,
дејството продолжува со чекор-А, доколку изразот добие вредност b, дејството
продолжува со чекор-Б итн. Во случај да не се добие ниту една од вредностите a,b,...,k
тогаш дејството продолжува со чекор-Х. По извршување на кој било чекор, дејството
продолжува со првиот чекор по структурата.

израз

Чекор-А Чекор-Б ... Чекор-К Чекор-Х

... ...

Со оваа контрола на избор се врши избор на еден од повеќе можни случаи. Затоа
таа се нарекува избор во случај или накратко случај. Структурата во текстуална форма се
се запишува:

случај израз
а:чекор-А;
b:чекор-Б;
...
k:чекор-К;
инаку чекор-Х
крај_случај(израз)
Вреднстите a,b,...,k,х мора да се од ист тип со вредноста на израз.
Кога е потребно ист чекор да се изврши за неколку вредности на израз, тогаш тие
вредности се ставаат во листа пред чекорот:
случај израз
a,s,y: чекор-А;
b,f: чекор-Б;
...
k,g,f: чекор-К;
инаку чекор-Х
крај_случај(израз)

Ако се случи иста вредност да се јави во неколку чекори, тогаш се извршува оној
чекој до кој прва ќе се најде.
Во зависност од природата на задачата, чекор-Х не мора да постои.
Алгоритмот за испишување на општиот успех кога е даден бројниот успех на
ученикот со користење на структурата случај е следниот:
алгоритам Успех;
почеток
читај n;
случај n;
5: печати: ‘Одличен’;
4: печати: ‘Мн.добар’;
3: печати: ‘Добар’;
2: печати: ‘Доволен’;
1: печати: ‘Недоволен’;
инаку
печати ‘Грешка’;
крај_случај {n};
крај {Успех}
Пример 1. Следниве два алгоритамски сегменти со структурата случај даваат исти
решенија:
случај a>b случај a>b
true:p←a; true:p←a;
false:p←b; инаку:p←b;
крај_случај{a>b} крај_случај{a>b}
печати р; печати р;
Пример 2. Нека еден месец е зададен по неговиот реден број m, во
годината(непрестапна). Со помош на структурата случај може да се одреди колку дена
има тој месец.
случај m
1,3,5,7,8,10,12:den←31;
4,6,9,11←30;
2←28;
крај_случај{m};
печати den;

CASE-OF

Конторлната структура избор од повеќе можности во Pascal е реализирана


со наредбата CASE-OF, чија синтакса е:
CASE израз OF
едни константи:една наредба;
други константи:друга наредба;
...
n-ти константи:n-та наредба;
ELSE
наредба;
END;
Во случај(CASE) кога вредноста на израз е една од (OF) константите наведени по OF,
изврши ја наредбата по двете точки во линијата во која се наоѓа таа константа. Ако
вредноста на изразот не се наоѓа во ниту една линија, тогаш изврши наредба по ELSE ако
тој дел постои. Во спротивно се прескокнува целата структура.
Вредноста на изразот мора да биде константа од линеарно подреден тип и не смее
да биде реална константа. По пресметување на изразот, се бара линијата во која се наоѓа
добиената константа и се извршува наредбата по двете точки. Потоа дејството
продолжува со наредбата по END.
Во наредбата CASE не мора да биде дадено разгранување со ELSE. Ако се изостави
ELSE, a вредноста на изразот не се најде во ниту една линија, се продолжува со наредбата
по END.
Доколку во една линија има повеќе од една константа, тогаш тие се разделуваат со
запирки, ако се неинтервални. Ако се интервални се наведува почетната и крајната
константа на интервалот меѓу кои има две точки една до друга. Интервалните од
неитервалните исто се одделуваат со запирка.
Пример 1. CASE A<B OF
true:WriteLn(A,’ < ’,B);
false:WriteLn(A,’ > ’,B);
END;
Пример 2. CASE Broj OF
1,3,5,7,9:WriteLn(‘Vnesen e neparen broj’);
2,4,6,8:WriteLn(‘Vnesen e paren broj’);
END;
Пример 3. Write(‘Vnesete broj pomal ili ednakov na 100: ’);
ReadLn(Broj);
CASE Broj OF
1,10..19,100:WriteLn(‘Brojot pocnuva so edinica’);
2,20..29:WriteLn(‘Brojot pocnuva so dvojka’);
3,30..39:WriteLn(‘Brojot pocnuva so trojka’);
4,40..49:WriteLn(‘Brojot pocnuva so chetvorka’);
5,50..59:WriteLn(‘Brojot pocnuva so petka’);
6,60..69:WriteLn(‘Brojot pocnuva so shestka’);
7,70..79:WriteLn(‘Brojot pocnuva so sedmica’);
8,80..89:WriteLn(‘Brojot pocnuva so osmica’);
9,90..99:WriteLn(‘Brojot pocnuva so devetka’);
ELSE WriteLn(‘Brojot e 0’);
END;
Пример 5.
Write(‘Objasnuvanje na naredbite’);
CASE Izbor OF
‘I’:WriteLn(‘IF’);
‘C’:WriteLn(‘CASE’);
‘W’:WriteLn(‘WHILE’);
‘R’:WriteLn(‘REPEAT’);
‘F’:WriteLn(‘FOR’);
‘G’:WriteLn(‘GOTO);
ELSE
WriteLn(‘Greska!Pritisnete kopce so bukva od ponudenoto meni’);
END;
Пример 6. Напиши програма за печатење на општиот успех кога е позната бројната
оцена.
PROGRAM Uspeh;
VAR a:integer;
BEGIN
WriteLn(‘So koja ocena ja zavrsi minatata godina?’);
ReadLn(a);
CASE a OF
5:WriteLn(‘Vie ste odlicen ucenik’);
4:WriteLn(‘Vie ste mnogu dobar ucenik’);
3:WriteLn(‘Vie ste dobar ucenik’);
2:WriteLn(‘Vie ste dovolen ucenik’);
1:WriteLn(‘Vie ste povtoruvac’);
ELSE
WriteLn(‘Greska’);
END;
END.

Пример 6. Напиши програма која ќе одредува дали преку тастатура е внесена мала или
голема буква.
PROGRAM Bukvi;
VAR Bukva:char;
BEGIN
Write(‘Napisete edna bukva:’);
Readln(bukva);
CASE bukva OF
‘A’..’Z’:Writeln(‘Ja napisavte golemata bukva ’, Bukva);
‘a’..’z’:Writeln(‘Ja napisavte malata bukva ’, Bukva);
ELSE
Writeln(‘Ne vnesovte bukva!’);
END;
END.

Aко за некоја или некои вредности на изразот е потребно да се извршат повеќе


наредби, тие се ставаат во блок меѓу зборовите BEGIN и END.

Пример 7. Напиши програма што ќе ги прикаже особините на броевите од 2 до 10 (со кои


/броеви е делив или дали е прост).

PROGRAM Broevi;
VAR a;
BEGIN
Write(‘Vnesete broj od 2 do 10’);
Readln(a);
CASE a OF
2,3,5,7 BEGIN
Writeln(‘Brojot ‘,a,‘ e prost broj’);
Writeln(‘Prost broj e onoj broj koj e deliv samo so 1 i so samiot
sebe’);
Writeln(‘Brojot 1 ne e prost broj po definicija’);
END;
4,8:Writeln(‘Prost delitel na ‘,a,’ e 2’);
9:Writeln(‘Prost delitel na ’,a,’ e brojot 3’);
6:Writeln(‘Prosti deliteli na brojot ’,a,’ se broevite 2 i 3’);

END;
END.

You might also like