Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Методичка_ОТтаП_Ч1

.pdf
Скачиваний:
45
Добавлен:
12.05.2015
Размер:
1.51 Mб
Скачать

4.5. Індивідуальні завдання.

Скласти алгоритм i програму розв’язання задач

1.Написати програму, що дозволяє одержати словесне найменування традиційних оцінок (2-незадовільно, 3- задовільно, 4-добре, 5-відмінно).

2.Написати програму яка за номером місяця виводить на екран назву пори року.

3.Написати алгоритм, що за номером дня тижня - цілому числу від 1 до 7 повинен видавати як результат кількість пар у групі у відповідний день.

4.Для кожної цифри вивести її назву (0-нуль, 1-один, 2-два і т.д.).

5.В залежності від того чи введена відкрита дужка або закрита, надрукувати "відкрита кругла дужка" або "закрита фігурна дужка". (Ураховувати круглі, квадратні, фігурні дужки).

6.Залежно від уведеного символу L, S, V програма повинна обчислювати довжину кола; площу кола; об’єм шару.

7.Скласти програму, що залежно від порядкового номера дня тижня (1, 2, ..., 7) виводить на екран його назву (понеділок, вівторок, ..., неділя).

8.Скласти програму, що залежно від порядкового номера місяця (1, 2, ..., 12) виводить на екран кількість днів у цьому місяці. (Для лютого вивести рядок ’28 або 29’).

9.Скласти програму, що залежно від введеного номіналу видавала б назву банкноти української валюти (1 – одна гривня, 2 – дві гривні, 5 – п`ять гривень і т.д.).

10.Мастям гральних карт умовно привласнені наступні порядкові номери: «піки» - 1, «трефи» - 2, «бубни» - 3, «чирви» - 4. По заданому номеру масті m (1 < m < 4) визначити назву відповідної масті.

11.Скласти програму, що залежно від введеного номіналу видавала б назву монети української валюти (1 – одна копійка, 2 – дві копійки, 5 - п`ять копійок і т.д.).

12.Гральним картам умовно привласнені наступні порядкові номери залежно від їхнього достоїнства: «валетові» - 11, «дамі» - 12, «королеві» - 13, «тузу» - 14. Порядкові номери

50

інших карт відповідають їхнім назвам («шістка», «дев'ятка» і т.п.). За заданим номером карти k (6 < k < 14) визначити достоїнство відповідної карти.

13.Скласти програму, що залежно від порядкового номера місяця (1, 2, ..., 12) виводить на екран його назву (січень, лютий, ..., грудень).

14.Написати програму, яка б за введеним номером одиниці виміру (1 - кілограм, 2 - міліграм, 3 - грам, 4 - тонна, 5 - центнер) і масі М видавала б відповідне значення маси в кілограмах.

15.Написати програму, що дозволяє по останній цифрі числа визначити останню цифру його квадрату.

16.Для кожної введеної цифри (0-9) вивести відповідне їй назву англійською мовою (0 - zero, 1 - one, 2 - two, ...).

17.Залежно від уведеного символу L, S, V програма повинна обчислювати периметр квадрату; площу квадрату; об’єм куба.

18.Скласти програму, що за введеною літерою A, B, C, D, E, F виведе назву традиційної оцінки (A – відмінно, B і C – добре, D і E – задовільно, F - незадовільно).

19.Написати програму, що за номером місяця видає назву наступного за ним місяця (при m=1 одержуємо лютий, при m=4 - травень).

20.Написати програму, яка б за введеним номером пори року (1 - зима, 2 - весна, 3 - літо, 4 - осінь) видавала відповідній цій порі року назву місяців, кількість днів у кожному з місяців.

21.Для цілого числа й від 1 до 99 надрукувати фразу «Мені k років», за умови, що при деяких значеннях k слово «років» треба замінити на слово «рік» або «роки». Наприклад, 11 років, 51 рік, 22 роки.

22.Написати програму, яка б за введеним номером одиниці виміру (1 -дециметр, 2 - кілометр, 3 - метр, 4 - міліметр, 5 - сантиметр) і довжині відрізка L видавала б відповідне значення довжини відрізка в метрах.

23.Написати програму, що за введеним числом від 1 до 5 (номеру курсу) видає відповідне повідомлення «Привіт, k- курсник». Наприклад, якщо k=1, «Привіт, першокурсник»; при k=4: «Привіт, четвертокурсник».

51

24.Є пронумерований список деталей: 1) шуруп, 2) гайка, 3) гвинт, 4)цвях, 5) болт. Скласти програму, що за номером деталі виводить на екран її назву.

25.Написати програму, що за номером місяця видасть кількість святкових і вихідних днів у цьому році.

26.Скласти програму, що дозволяє по останній цифрі даного числа визначити останню цифру куба цього числа.

27.Визначити, чи є введена літера голосною.

28.Визначити, чи є введена літера приголосною.

4.6.Контрольні запитання.

1.Яке призначення типу даних Char?

2.Які стандартні функції працюють з символьним типом?

3.Як працює оператор вибору Case?

4.Як зображується оператор Case на блок-схемі?

52

5. Заняття №5.

Циклічні обчислення. Ітераційні цикли.

Мета роботи – оволодіння прийомами програмування циклічних та ітераційних обчислень за допомогою логічних операторів та операторів циклу.

5.1.Теоретичні відомості

Вмові програмування Pascal існує ряд операторів циклу:

оператор Repeat;

оператор While;

оператор For.

Якщо кількість повторень заздалегідь відома, то підхожою конструкцією є оператор For. В іншому разі слід використовувати оператори While чи Repeat.

5.2.Оператор циклу з пост-умовою (Repeat)

Оператор циклу з пост-умовою починається зі слова Repeat, потім іде послідовність операторів, які виконуються в циклі, завершується оператор ключовим словом until з умовою. Загальний вигляд оператора repeat…until:

Repeat

<оператор_1>

.........

<оператор_N>

Until <вираз> ;

Результатом виразу повинен бути результат булівського типу. Оператори, що містяться між ключовими словами repeat та until, виконуються послідовно доти, поки результат виразу не набуде значення Тrue. Послідовність операторів виконується хоча б один раз, оскільки обчислення виразу виконується після кожного виконання послідовності операторів.

53

Прикладом оператора циклу з пост-умовою може бути

програма обчислення косинуса введеного числа, використовуючи розкладення в ряд Тейлора :

cos x 1 21! x2 41! x4 61! x6 ...

Program CP_1;

Const

Eps=1e-7;

Var

X,S,U:Real;

N:Word; Begin

Write(‘ Введіть число :’);

Readln(X);

S:=1;

U:=1;

N:=0;

Repeat

N:=N+2; U:=-U*X*X/((N-1)*N);

S:=S+U;

Until Abs(U)<Eps;

Writeln(‘Cos(‘,x,’)=‘,S);

End.

Приклад використання складного логічного виразу в умові:

Repeat

Write(‘ Введіть значення (0..9):’);

ReadLn(I);

Until (I >= 0) and (I <= 9);

…….

Продовження програми у випадку правильного введення числа з запропонованого діапазону.

54

5.3.Оператори циклу з передумовою (While)

Оператор циклу з передумовою (починається зі слова While), містить в собі вираз, який керує повторним виконанням оператора (який може бути складеним оператором).

While <вираз> dо <оператор>

Вираз, за допомогою якого здійснюється керування повтором оператора, повинен мати булівський тип. Обчислення його виконується до того, як внутрішній оператор буде виконаний. Внутрішній оператор виконується повторно доти, поки вираз набуває значення Тruе. Якщо вираз спочатку набуває значення False, то оператор, який міститься всередині оператора циклу з передумовою, не виконується.

Прикладом оператора циклу з передумовою може бути

програма обчислення синуса введеного числа, використовуючи розкладення в ряд Тейлора :

sin x x 31! x3 51! x5 61! x7 ...

Program CP_2;

Const

Eps=1e-7;

Var

X,S,U:Real;

N:Word;

Begin

Write(‘ Введіть число :’);

Readln(X);

S:=X;

U:=X;

N:=1;

While Abs(U)>Eps Do

Begin

55

N:=N+2;

U:=-U*X*X/((N-1)*N);

S:=S+U;

End;

Writeln(‘Sin(‘,x,’)=‘,S);

End.

5.4.Оператори циклу з параметром (For)

Оператори циклу з параметром (які починаються зі слова For) викликають циклічне виконання оператора (який може бути складеним оператором) доки керуючій змінній присвоюється зростаюча послідовність значень від початкового до кінцевого.

For <керуюча змінна-параметр> := <початкове значення параметра> Tо <кінцеве значення параметра> Dо <оператор>;

Якщо початкове значення (вираз) менше кінцевого значення (виразу), цей цикл буде виконуватись так :

на початку змінній <керуюча змінна-параметр> присвоюється <початкове значення параметра>;

потім

перевіряється

умова

<керуюча змінна-параметр> <= <кінцеве значення параметра>, якщо це так, то виконується <оператор>; (послідовність операторів), якщо ж ні – цикл завершено, і програма перейде до наступного оператору;

якщо цикл, ще не завершено то значення змінної <керуюча змінна-параметр> - збільшується на 1.

Наприклад: вивести на екран числа від 1 до 10.

Program CA_1;

Var

i : integer; {ціла змінна}

Begin

56

For i:=1 To 10 Do Writeln(i);

End.

Ця програма буде виконуватись, так:

змінній i – присвоюється значення 1;

перевіряється умова i<=10, це дійсно так, отже на екран виводиться значення змінної i, в даному випадку - 1;

значення i – збільшується на 1, і стає рівне 2;

знов перевіряється істинність умови, і на екран виводиться 2;

подібні дії виконуються до тих пір поки програма не виведе на екран число 10;

після цього значення i – знову збільшиться на 1 і стане рівним 11;

умова i<=10 стане хибною, завершиться цикл, і програма завершить свою роботу.

Врезультаті виконання програми, на екрані буде:

1

2

3

4

5

6

7

8

9

10

Інша форма оператору , має наступний синтаксис:

For <керуюча змінна-параметр> :=

<початкове значення параметра>

Downto <кінцеве значення параметра>

Do <оператор>;

Якщо початкове значення (вираз) більше кінцевого значення

(виразу ).

Цей цикл буде виконуватись так :

57

на початку змінній <керуюча змінна-параметр> присвоюється <початкове_значення параметра>;

потім перевіряється умова <керуюча змінна-

параметр> >= <кінцеве_значення параметра>,

якщо це так, то виконується <оператор> (послідовність операторів), якщо ж ні – цикл завершено, і програма перейде до наступного оператору;

якщо цикл, ще не завершено то значення змінної <керуюча змінна-параметр> - зменшується на 1.

Щоб зрозуміти відмінність з попереднім варіантом, розглянемо приклад: вивести на екран числа від 1 до 5 у зворотному порядку.

Program CA_2; Var

i : integer; {ціла змінна}

Begin

For i:=5 Downto 1 Do Writeln(i);

End.

Ця програма буде виконуватись, так:

змінній i – присвоюється значення 5;

перевіряється умова i >=1, це дійсно так, отже на екран виводиться значення змінної i, в даному випадку - 5;

значення i – зменшується на 1, і стає рівне 4;

знов перевіряється істинність умови, і на екран виводиться

4;

подібні дії виконуються до тих пір поки програма не виведе на екран число 1;

після цього значення i – знову зменшиться на 1 і стане рівним 0;

умова i >=1 стане хибною, завершиться цикл, і програма

завершить свою роботу.

В результаті виконання програми, на екрані буде:

5

4

3

2

58

1

Як керуюча змінна повинен використовуватися ідентифікатор змінної, який позначає змінну, оголошену локальною в блоці, в якому міститься оператор For. Початкове і кінцеве значення повинні мати тип, що сумісний за присвоєнням з перелічуваним типом. Коли починає виконуватися оператор For, початкове і кінцеве значення визначаються один раз і зберігаються протягом всього виконання оператора For.

Оператор, який міститься в тілі оператора For, виконується один раз для кожного значення в діапазоні між початковим та кінцевим значеннями. Коли працює оператор For To, значення керуючої змінної зростає при кожному повторенні на одиницю. Якщо початкове значення перевищує кінцеве значення, то оператор не виконується. Коли в операторі циклу використовується ключове слово Downto, значення керуючої змінної зменшується при кожному повторенні на одиницю. Якщо початкове значення в такому операторі менше, ніж кінцеве, то оператор не виконується.

Якщо оператор, який міститься в тілі оператора For, змінює значення керуючої змінної, то це є помилкою. Після виконання оператора For значення керуючої змінної стає невизначеним, якщо тільки виконання оператора For не було перервано за допомогою оператора переходу.

І на завершення, нехай, наприклад, потрібно підрахувати, скільки ударів за добу зробить годинник з боєм.

Program CUCKOO_2; Var

I,KUKU : integer;

 

 

Begin

 

 

KUKU:= 0;

 

 

For I:=1 To 12 Do KUKU:=KUKU+I;

 

KUKU:=2*KUKU;{годинник працює вдень i

 

вночі}

 

 

Writeln(' годинник за добу

 

 

зробить:',KUKU:5,

 

 

' удаpiв ');

 

 

End.

 

 

На початку роботи опеpатоpа For керуючій

змінній

присвоюється задане значення (I:=1).

Потім в

циклі:

59