Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Навчально-методичний посібник=Частина 1=.doc
Скачиваний:
31
Добавлен:
28.10.2018
Размер:
1.14 Mб
Скачать

Зверніть увагу на використання оператора writeln. Він виводить необхідну інформацію на екран монітора!

Формат команди:

writeln (список виведення);

Як елемент списку виведення можна використовувати:

а) текст – довільний набір ASII-символів, взятий в апострофи;

б) константу або константний вираз:

writeln (‘5+3=’ , 5+3);

writeln (‘5+3=’, 8);

В обох випадках результатом роботи оператора writeln буде виведення на екран тексту: 5+3=8;

в) довільний вираз. У цьому випадку відбувається спочатку обчислення виразу з використанням поточних значень змінних, а потім виведення на екран.

Окремим випадком є використання просто імені змінної, як у вищенаведеному прикладі.

Запропоновану задачу можна дещо змінити: знайти подвоєне значення більшого з трьох чисел. Тоді виведення можна зробити таким:

writeln (‘ Результат задачі‘ , 2*r);

За замовчуванням мова Паскаль здійснює виведення дійсних чисел на екран у форматі з плаваючою крапкою, тобто числа 2 та 13.5 на екрані матимуть вигляд:

2. 00000000Е+00 1.35000000Е+01

Це важко сприймають учні, тому пропонуємо використовувати форматування виведення дійсних чисел:

змінна: число1: число2;

де число1 задає загальну кількість позиції виведення;

число2 кількість цифр після десяткової крапки.

Наприклад, для оператора

writeln (r : 8 : 2);

якщо r=13.914 на екрані буде вісім знаків (тобто 3 пробіли, 2 цифри до крапки та 2 цифри після десяткової крапки). Загальна довжина поля 8, тому попереду додано три пробіли.

_ _ _ 13.91

Приклад 2. Складіть алгоритм, що визначає, яка з точок А(х1, у1) або В(х2, у2) знаходиться ближче до початку координат.

Обчислення відбувається за формулою:

.

Алгоритм має вигляд:

АЛГ Приклад_2 (дійсн x1, y1, x2, y2, r1, r2)

АРГ х1, у1, х2, у2

РЕЗ r1, r2

ПОЧ

ДРУКУВАТИ (“ Яка з двох точок знаходиться ближче до початку координат?“)

якщо r1<r2

то ДРУКУВАТИ (“ 1-а точка знаходиться ближче до початку координат “)

ДРУКУВАТИ (“ Її відстань= “, r1, ,” а відстань 2-ої точки - “,r2)

інакше

якщо r2<r1

то ДРУКУВАТИ (“ 2-а точка знаходиться ближче до початку координат “)

ДРУКУВАТИ (“ Її відстань= “, r2, “, а відстань 1-ої точки – точки - “, r1)

інакше

ДРУКУВАТИ (“ Точки знаходяться на однаковій відстані від початку координат “);

ДРУКУВАТИ (“ Ця відстань= “ ,r1)

все

все

КІН

Мовою Паскаль алгоритм має вигляд:

Program Example_2;

Var X1, Y1, X2, Y2, R1, R2: real;

begin

write (‘ Введіть координати 1-ої точки ‘);

readln (X1,Y1);

write(‘ Введіть координати 2-ої точки ‘);

readln (X2, Y2);

R1:=sqrt(X1*X1+Y1*Y1);

R2:=sqrt(sqr(X2)+sqr(Y2));

if R1<R2

then begin

writeln (‘ 1-ша точка знаходиться ближче до початку координат ‘);

writeln (‘ Її відстань=’ , R1 ‘, а відстань 2-ї точки=’ , R2);

end

else if R2<R1

then begin

writeln (‘ 2-га точка знаходиться ближче до початку координат’);

writeln (‘Її відстань=’ , R2 ‘,а відстань 1-ї точки=’ , R1);

end

else begin

writeln (‘ Точки знаходяться на однаковій відстані від початку координат ‘);

writeln (‘Ця відстань=’ , R1);

end;

end.

У програмі використані стандартні функції:

а) корінь квадратний б) квадрат числа

- sqrt(x) ; x2 – sqr(x) ;

Останню функцію можна не використовувати, бо х2=х*х тобто sqr(x)=x*x.

Приклад 3. Складіть алгоритм, що для дійсного числа а виводить у порядку зростання значення sina, cosa, .

Алгоритм має вигляд:

АЛГ Приклад_3 (дійсн a, r1, r2, r3)

АРГ а

РЕЗ r1, r2, r3

ПОЧ

ДРУКУВАТИ (“Виведення у порядку зростання значень sin(a), cos(a), sqrt(a)”)

r1:=sin(a)

r2:=cos(a)

якщо a<0

то якщо r1<=r2

то ДРУКУВАТИ(“sin(a)=”, r1, “cos(a)=”, r2)

ДРУКУВАТИ (“a<0 – обчислити корінь не можна!!!)

інакше

ДРУКУВАТИ(“cos(a)=” , r2:8:3, “sin(a)=” , r1:6:3)

ДРУКУВАТИ(“a<0 – обчислити корінь не можна!!!”)

все

інакше

r3:=sqrt(a)

якщо (r1<=r2) and (r1<=r3)

то якщо r2<=r3

то ДРУКУВАТИ (“sin(a)=”, r1, “cos(a)=” , r2, “sqrt=” , r3)

інакше

ДРУКУВАТИ (“sin(a)=” , r1, “sqrt(a)=” , r3, “cos(a)=” , r2)

все

інакше

якщо (r2<=r1) and (r2<r3)

то якщо r1<=r3

то ДРУКУВАТИ (“cos(a)=” , r2, “sin(a)=” , r1, “sqrt(a)=” , r3)

інакше

ДРУКУВАТИ (“cos(a)=” , r2, “sqrt(a)=” , r3, “sin(a)=” , r1)

все

інакше

якщо (r3<=r1) and (r3<=r2)

то якщо r1<=r2

то ДРУКУВАТИ (“sqrt(a)=” , r3, “sin(a)=” , r1, “cos(a)=”, r2)

інакше

ДРУКУВАТИ(“sqrt(a)=”, r3, “cos(a)=”, r2, “sin(a)=”, r1)

все

все

все

все

все

КІН

Мовою Паскаль алгоритм має такий вигляд:

Program Example_3;

var a, r1, r2, r3: real;

begin

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

readln(a);

writeln(‘ Виведіть у порядку значень sin(a), cos(a), sqrt(a)’);

r1:=sin(a);

r2:=cos(a)

if a<0

then begin

writeln (‘a<0 – обчислити корінь не можна’);

if r1<=r2

then writeln (‘sin(a)=’ ,r1, ‘cos(a)=’, r2);

else writeln (‘cos(a)=’, r2, ‘sin(a)=’, r1);

end

else begin

r3:=sqrt(a);

if (r1<=r2) and (r1<=r3)

then if r2<=r3

then writeln (‘sin(a)=’ , r1, ‘cos(a)=’, r2, ‘sqrt(a)=’, r3);

else writeln (‘sin(a)=’ , r1, sqrt(a)=’ , r3, cos(a)=’ , r2);

else if (r2<=r3) and (r2<=r1)

(*) then begin

write (‘cos(a)=’, r2);

if r1<=r3

then writeln (‘sin(a)=’, r1, ‘sqrt(a)=’, r3);

else writeln (‘sqrt(a)=’, r3, ‘sin(a)=’, r1);

end

(*) else begin

write (‘sqrt(a)=’, r3);

if r1<=r2

then writeln (‘sin(a)=’ , r1, ‘cos(a)=’, r2);

else writeln(‘cos(a)=’, r2, ‘sin(a)=’, r1);

end

end

end.

Пояснення до алгоритму

Зверніть увагу, що в рядках, виділених зірочкою {*}, варіант мовою Паскаль дещо відрізняється від відповідного алгоритму мовою НАМ. У варіанті мовою Паскаль враховано, що в позначених точках уже відоме мінімальне з трьох значень, тому воно одразу виводиться на екран. Причому всі три значення необхідно вивести в рядок, використаний оператор write, який від оператора writeln відрізняється тим, що після виведення курсор на екрані залишається у поточному рядку (оператор writeln обов’язково переводить курсор на наступний рядок). Після виведення відбувається порівняння двох таких чисел з тих, що залишилися, які потім виводяться у відповідному порядку.

Для покращення зовнішнього вигляду дійсних чисел при виведенні можна скористатися форматуванням, що було описано у попередньому прикладі.

Приклад 4. Складіть алгоритм, який за номером місяця та року видає назву місяця й кількість днів у місяці.

Алгоритм має вигляд:

АЛГ Приклад_4 (ціл n, літ міс, цілий kd, god)

АРГ n, god

РЕЗ міс, kd

ПОЧ цілий L

вибір

при n=1 : міс:=” Січень“; kd:=31

при n=2 : якщо god=int(god/4)*4

то якщо god=int(god/100)*100

то якщо god=int(god/400)*400

то L:=1

інакше L:=0

все

інакше L:=1

все

інакше L:=0

все

міс:=” Лютий “; kd:=28+L

при n=3 : міс:=” Березень “; kd:=31

при n=4 : міс:=” Квітень “; kd:=30

при n=5 : міс:=” Травень “; kd:=31

при n=6 : міс:=” Червень “; kd:=30

при n=7 : міс:=” Липень “; kd:=31

при n=8 : міс:=” Серпень “; kd:=31

при n=9 : міс:=” Вересень “; kd:=30

при n=10 : міс:=” Жовтень “; kd:=31

при n=11 : міс:=” Листопад “; kd:=30

при n=12 : міс:=” Грудень “; kd:=31

інакше ДРУКУВАТИ (“ Номер місяця зазначений неправильно! “)

все

ДРУКУВАТИ (“ Місяць “ ,міс , “ днів “, kd )

КІН

Пояснення до алгоритму

Враховуючи, що Земля робить повний оберт навколо Сонця приблизно за 365 днів, 5 годин і 46 с, доходимо висновку, що рік за Юліанським календарем довший від сонячного. (За Юліанським календарем високосний рік той, номер якого можна без залишку поділити на 4.) У 1582 р. за вказівкою папи Римського Григорія ХІІІ було проведено реформу календаря. Відповідно до впроваджених змін високосними перестали вважати роки, що закінчуються двома нулями, за винятком тих, які діляться на 400 без остачі. За цією системою роки 1600, 2000, 2400 є високосними, а роки 1700, 1800, 1900, 2100 – ні.

Алгоритм мовою Паскаль має вигляд:

Program Example_4;

var Day, Month, L: byte; Year: word;

Name_Month: string;

begin

write(‘ Введіть номер місяця та року > ‘);

readln(Month, Year);

case Month of

1: begin Name_Month:= ‘Січень‘; Day:=31; end;

2: begin

Name Month:=’ Лютий ‘;

if (Year mod 4=0) and (not (Year mod 400=0))

then L:=1

else L:=0

Day:=28+L;

end;

3: begin Name_Month:=’ Березень ‘; Day:=31; end;

4: begin Name_Month:=’ Квітень ‘; Day:=30; end;

5: begin Name_Month:=’ Травень ‘; Day:=31; end;

6: begin Name_Month:=’ Червень ‘; Day:=30; end;

7: begin Name_Month:=’ Липень ‘; Day:=31; end;

8: begin Name_Month:=’ Серпень ‘; Day:=31; end;

9: begin Name_Month:=’ Вересень ‘; Day:=30; end;

10: begin Name_Month:=’ Жовтень ‘; Day:=31; end;

11: begin Name_Month:=’ Листопад ‘; Day:=30; end;

12: begin Name_Month:=’ Грудень ‘; Day:=31; end;

else begin Name_Month:=’ Номер місяця заданий неправильно ‘;

Day:=0

end;

end;

writeln(‘ Місяць:’ , Name_Month);

if Day >0

then writeln (‘ Кількість днів:’ , Day);

end.

Нагадуємо, що тип string, який використовується у наведеній програмі, дає змогу зберігати будь-який набір ASII-символів. Для внесення у змінну необхідного значення використовується оператор присвоєння, в якому потрібний текст береться в апострофи.

ОСТАННІЙ ОПЕРАТОР РОЗГАЛУЖЕННЯ (if Day>0…) ДАЄ ЗМОГУ НЕ ВИВОДИТИ НА ЕКРАН ЗНАЧЕННЯ ЗМІННОЇ Day (кількість днів у місяці), ЯКЩО НОМЕР МІСЯЦЯ ЗАДАНИЙ НЕПРАВИЛЬНО (більше 12 або менше 1)

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

1.Якої структури слід дотримуватися при описанні команд мови?

2.Що вам відомо про команду присвоювання?

3.Розкажіть про команди розгалуження.

Вправи

Вправа 1. Складіть алгоритм, що знаходить суму більшого й меншого з чотирьох чисел.

Вправа 2. Складіть алгоритм розв’язування лінійного рівняння.

Вправа 3. Складіть алгоритм розв’язування біквадратного рівняння.

Вправа 4. Розробіть алгоритм, що визначає, вартість послуг залежно від дня тижня.

Вправа 5. Складіть алгоритм, що визначає, в якому координатному квадранті знаходиться точка А(х,у).

Вправа 6. Складіть алгоритм, що обчислює значення z, при заданих a, b, x:

Команди повторення (організації циклів)

Оператори повторення призначені для багаторазового виконання оператора або групи операторів. Їх ще називають операторами організації циклу. Багаторазово повторювані частини обчислень називають тілом циклу, а змінні, що впливають на виконання циклу, - змінними циклу.

Алгоритм циклічної структури у загальному вигляді має містити:

1) підготовку циклу: завдання початкових значень змінним циклу перед його виконанням;

2)тіло циклу: дії, повторювані в циклі для різних значень змінних циклу;

3) модифікацію (змінну) значень змінних циклу перед кожним новим його повторенням;

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

Для цього передбачено кілька видів команд організації циклів.

Команда поки (цикл із попередньою перевіркою (передумовою))

Формат команди алгоритмічною мовою: Формат команди мовою Паскаль:

поки умова while умова do

пц begin

серія серія

кц end;

Команда працює в такий спосіб: спочатку перевіряється умова, і якщо вона істинна, виконується зазначена послідовність команд, після чого знову перевіряється умова і т.д.; якщо умова хибна, відбувається вихід з конструкції. Цикл може взагалі не виконуватися, якщо умова апріорі хибна. На схемі 5 графічно показана робота команди поки.

Наведемо приклад:

Алгоритмічною мовою: Мовою Паскаль:

i:=1; s:=0 i:=1; s:=0;

поки i<10 while i<10 do

пц s:=s+i begin

i:=i+1 s:=s+I;

кц i:=i+1;

end;

У результаті виконання цього прикладу в комірку s буде занесено результат обчислення: сума чисел від 1 до 9 включно. При і=10 відбудеться вихід з циклу. Якщо до моменту початку роботи циклу значення і буде більше або дорівнюватиме 10, то цикл взагалі виконуватися не буде.

Команда ПОВТОРЮВАТИ (цикл з постумовою (післяперевіркою)).

Формат команди алгоритмічною мовою: Формат команди мовою Паскаль:

Повторювати repeat

пц серія

серія until умова;

кц

до умова

Робота команди полягає в тому, що на початку виконується серія, і лише потім перевіряється умова. Якщо вона хибна, то знову виконується серія тощо. Робота циклу завершиться, якщо умова стане істинною. У будь-якому разі цикл спрацьовує хоча б один раз. На схемі 6 графічно подана робота команди повторювати.

Наприклад:

Формат команди алгоритмічною мовою: Формат команди мовою Паскаль:

і:=1; s:=1 i:=1; s:=1;

повторювати repeat

пц s:=s+I;

s:=s+I i:=i+1;

i:=i+1 until i>=10;

кц

до і=10

Цикл буде працювати доти, доки і не дорівнюватиме 10. Значення s при цьому дорівнюватиме 46

Команда повторення з параметром для.

Формат команди:

для і від j до k крок m

пц

серія

кц

де і – керуюча змінна циклу (параметр);

jнижня межа зміни значення і;

kверхня межа зміни значення і;

mзначення кроку. Якщо воно дорівнює 1, то його можна опускати;

j, k, mУ загальному випадку можуть бути виразами.

Команда працює в такий спосіб:

1.Керуюча змінна і (змінна циклу) на початку набуває значення j і здійснюється перевірка на кінцеве значення k; якщо умова «істинна», то виконуються команди циклу.

2.Потім, щоразу до керуючої змінної і додається значення кроку m і здійснюється перевірка на кінцеве значення k; якщо умова «істинна», то виконуються команди циклу.

3.Виконання серії циклу відбувається тільки після виконання однієї з умов:

  • якщо крок додатний (у цьому випадку j<k);

  • якщо крок від’ємний (у цьому випадку j>k).

4.За невиконання умови відбувається вихід з циклу.

На схемі 7 графічно показано роботу команди Для.

Цикл з лічильником мовою Паскаль:

for i:=j to k do

begin

cерія

end;