Зміст вступ 5
Вид материала | Документы |
Содержание§ 5.3 Інструкція Case § 5.4 Організація розгалужень в програмах |
- Зміст, 429.02kb.
- Зміст, 329.83kb.
- Зміст вступ, 361.97kb.
- Зміст, 242.29kb.
- Зміст, 384.58kb.
- Зміст, 410.71kb.
- Зміст вступ, 388.95kb.
- Зміст перелік скорочень, 569.12kb.
- Зміст вступ, 540.64kb.
- Зміст Вступ, 574.44kb.
§ 5.3 Інструкція Case
До цього часу ми розглядали нескладні випадки розгалужень. Перед тим як перейти до подальшого матеріалу, розглянемо ще одну задачу.
Задача 57 В залежності від отриманої учнем оцінки вивести на екран відповідне повідомлення.
Розв’язання: Використовуючи команду розгалуження не складає труднощів написати наступну програму:
program ocenka1;
var o : integer;
begin
write(‘Введiть отриману оцiнку: ’);
readln(o);
if o = 5 then writeln(‘Молодець! Вiзьмеш дома цукерку.’)
else if o = 4 then writeln(‘Непогано! Але без цукерок!’)
else if o = 3 then writeln(‘Мiг би й краще!’)
else if o = 2 then writeln(‘Мабуть ти забув про школу.’)
else writeln(‘Пробач, але такої оцiнки не ставлять.’);
readln
end.
Зверніть увагу на кількість розгалужень. Тут, хоч їх і не так вже багато, можна й заплутатись яке else до якого if відноситься. Саме для таких випадків і передбачено у мові Паскаль конструкцію вибору. Конструкція вибору описується так:
в залежності від значення змінної зробити вибір, а саме:
при значенні1 – вивести повідомлення1;
при значенні2 – вивести повідомлення2;
...
при значенніn – вивести повідомленняn.
У шкільній алгоритмічній мові також існує конструкція вибору, але ми її тут наводити не будемо, а лише опишемо конструкцію вибору на мові Паскаль, причому дамо смисловий переклад організації конструкції:
...
case o of
{ вибір від значення змінної о }
<01>: <дія1>; { при одному значенні – одна дія }
<02>: <дія2>; { при другому – друга дія }
<03>: <дія3>; { при третьому значенні – третя дія }
<04>: <дія4>; { при четвертому значенні – четверта дія }
end;
{ кінець вибору }
...
Якщо після якогось значення змінної потрібно виконувати не одну дію, а декілька, то всі оператори, що відносяться до даного випадку беруться в операторні дужки begin ... end. Крім того, конструкція case передбачає варіант виконання дій у тому випадку, коли змінна не набула жодного з вказаних у операторі вибору значень – цьому призначено, як і при організації умовного оператора команду else. Знову ж таки, перед гілкою else крапку з комою ставити забороняється.
Ви вже, напевне, самі звернули увагу, що для команди case обов’язково в кінці ставиться end, тобто в нас з’явилась ще одна “нерозлучна солодка парочка”.
Отже спробуємо розв’язати останню задачу при допомозі команди вибору.
program ocenka2;
var o : integer;
begin
write(‘Введiть отриману оцiнку: ’);
readln(o);
case o of
5: writeln(‘Молодець! Вiзьмеш дома цукерку.’);
4: writeln(‘Непогано! Але без цукерок!’);
3: writeln(‘Мiг би й краще!’);
2: writeln(‘Мабуть ти забув про школу.’)
else writeln(‘Пробач, але такої оцiнки не ставлять.’);
end; { case }
readln
end.
Зверніть увагу наскільки в порівнянні з попереднім варіантом більш зрозумілою стала наша програма.
Цікавою і цінною особливістю організації команди вибору є те, що можна організовувати однакові дії для цілого діапазону значень. Продемонструємо це на конкретному прикладі.
Задача 58 Скласти програму, що моделює торгівлю на базарі.
Розв’язання: Припусти, що ми захотіли купити на базарі взуття. Будемо видавати на екран відповідні повідомлення в залежності від діапазону цін продавців.
program bazar;
var sk : integer;
begin
writeln(‘Скiльки коштують цi дирявi валяночки? ’);
readln(sk);
case sk of
1..10 : writeln(‘Мабуть куплю, якщо не знайду дешевшi.’);
11..50 : writeln(‘Трохи дорогувато!’);
51..100 : writeln(‘Вони що у вас, золотi?’)
else writeln('Мабуть менi почулось!');
end; { case }
readln
end.
Цей нескладний приклад ми привели лише для того, щоб показати використання діапазонів значень при організації вибору. Слід наголосити, що змінні в діапазонах повинні обов’язково бути перераховуваних типів, крім того значення змінної не може перевищувати тип word. Саме тому допускається використання змінних лише відповідних цілочисельних типів та змінних типу char.
При перевірці значень оператор вибору знайшовши перше значення, що підходить, виконує відповідний блок команд і наступні значення змінної або діапазони не перевіряє. Про це слід обов’язково пам’ятати при застосуванні команди вибору.
З більш складнішими прикладами застосування команди вибору ми познайомимось трохи пізніше.
§ 5.4 Організація розгалужень в програмах
При програмній реалізації розгалужень проблем практично не буде, якщо ви детально розібрались з матеріалом попереднього параграфу та запропонованими завданнями. Виникає питання, а що краще використовувати: команду розгалуження, чи команду вибору? Дати відповідь на це запитання рівнозначно вирішенню проблеми – що корисніше: мед чи овочі? Адже і те і інше потрібно для людини, причому в одних випадках перше, а в інших – друге. Більше того, існують такі ситуації коли не буде корисним ні перше, ні друге. Тому все повинно бути в міру, так само як і використання вище згадуваних команд. Для прикладу розглянемо ще одну задачу, яку розв’яжемо як з використанням команди розгалуження, так і з використанням команди вибору. На наш погляд розв’язки рівноцінні, але не найкращі, а який з них вам сподобається більше, то вже справа ваших уподобань.
Задача 59 Задано ціле число (не більше 100). Використовуючи лише дію множення піднести дане число до заданого степеня (не більшого 4).
Розв’язання: Спочатку приведемо програмну реалізацію розв’язку даної задачі з використанням команди розгалуження:
program step1;
var n,m,res : longint;
begin
write(‘Введiть цiле числo (не бiльше 100): ’);
readln(n);
write(‘До якого цiлого степеня пiднести (1-4): ’);
readln(m);
if m = 1 then res := n
else if m = 2 then res := n*n
else if m =3 then res := n*n*n
else if m = 4 then res := n*n*n*n;
writeln(res);
readln;
end.
Приведемо повну реалізацію останньої поставленої задачі з використанням команди вибору.
program step2;
var n,m,res : longint;
begin
write(‘Введiть цiле число (не бiльше 100): ’);
readln(n);
write(‘До якого цiлого степеня пiднести (1-4): ’);
readln(m);
case m of
1 : res := n;
2 : res := n*n;
3 : res := n*n*n;
4 : res := n*n*n*n;
end {case};
writeln(res);
readln;
end.
04>03>02>01>