Вступ до програмування

Розв'язування задач з використанням комп'ютера. Поняття інформаційної моделі. Способи описування алгоритмів. Базові структури алгоритмів. Інтегровані середовища програмування. Створення лінійних програм. Алгоритми роботи з рядковими величинами.

Рубрика Программирование, компьютеры и кибернетика
Вид учебное пособие
Язык украинский
Дата добавления 03.03.2013
Размер файла 618,4 K

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

Примітка: на цьому етапі можна запропонувати дітям придумати свої приклади простих та складених умов, причому особливу увагу звертайте на правильне використання службових слів "та" і "або".

При написанні програм на мові Паскаль в записі умов можуть використовуватися всі можливі операції відношення (дорівнює, не дорівнює, менше, більше, не більше, не менше тощо). Результат виразу має булівський тип. Наприклад,

(x > 4) and (x < 10)

При x = 5 ця умова буде істиною, а при x = 25 - хибною.

Задача №81.

Обчислити значення логічних виразів.

1) x < y

При x = -2.5, y = 0.1 ця умова буде істиною (запропонуйте дітям вибрати такі значення x та y, при яких ця умова буде хибною).

2) a and not (b = c)

При a = false, b = false, c = true умова буде хибною (false), тому що при з'єднанні двох умов службовим словом and, якщо одна з умов хибна, то й вся умова хибна (зверніть увагу дітей на те, що це легко запам'ятовується, якщо перевести слово and українською. Дійсно, якщо хоч одна з умов, поєднаних словом "та", не являється істиною, то й весь логічний вираз буде хибним.

3) not (a and b) or b = a

При a = true, b = false ця умова буде істиною, тому що (a and b) - хибна (одна з умов хибна); not (a and b) - істина (заперечність хибності); not (a and b) or b = a - істина (бо, якщо з двох, поєднаних службовим словом or, умов хоч одна істина, то весь вираз істинний).

4) not (a and (x < y)) or (x < 0)

При a = true, x = -0.1, y = 0.7 умова буде істиною, тому що друга з умов (х < 0) буде істиною, а при з'єднанні двох умов службовим словом or достатньо одній з них бути істиною, щоб весь логічний вираз був істинним.

Задача №82.

Записати у вигляді логічних виразів висловлювання, наведені нижче:

1) значення х не належить інтервалу (0;1)

(x <= 0) or (x >= 1)

3) точка M(x, y) лежить в другій чверті координатної площини

(x < 0) and (y > 0)

4) точка M(x, y)лежить всередині або на межі одиничного круга з центром у початку координат

(sqr(x) + sqr(y) <= 1)

6) координати дійсного вектора x(x1, x2, x3) утворюються неспадну послідовність і всі вони невід'ємні

(x1 <= x2) and (x2 <= x3) and (x1 >= 0) and (x2 >= 0) and (x3 >= 0)

8) 3 > B і C > 0,1

(3 > B) and (B >= C) and (C > 0.1)

Задача №84.

Записати за допомогою умовного оператора виконання дій:

1) дійсне значення х замінити його абсолютною величиною

if x < 0

then x := -x;

2) менше з двох дійсних значень x та y (або будь-яке з них, якщо вони рівні) замінити нулем

if x < y

then x := 0

else y := 0;

4) присвоїти змінній x значення 0, якщо її початкове значення належало інтервалу (0,2)

if (0 <= x) and (x <= 2)

then x := 0;

Домашнє завдання:

· прочитати сторінки 47 - 52 запропонованого підручника;

· вивчити означення, що прочитані на лекції;

· завдання №80, №82(2, 5, 7, 9), №84 (3, 5, 6). Для учнів, що вчаться на високий рівень, бажано запропонувати завдання №83.

Тема уроку: "Запис алгоритмів з використанням вказівки розгалуження мовою програмування"

Мета уроку: Навчити складати алгоритми з використанням команди розгалуження та записувати їх мовою програмування.

Тип уроку: Розбір задач, що потребують для свого розв'язання вказівку розгалуження.

На початку уроку бажано зробити експрес опитування за матеріалом попереднього уроку (поняття умови, умови прості та складені, поняття команди розгалуження, її форми, запис мовою програмування та мовою блок-схем).

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

Задача №96 (1).

Умова: Дано значення цілих величин x та y . Знайти:

Program Example_96_1;

Uses crt;

Var x,y,Max,Min,Rezultat:integer;

Begin

Clrscr; {Очищення екрану}

Write(`Введіть значення x та y: ');

Readln(x,y);

If x{Знаходження максимуму та мінімуму}

Then

Begin

Max:=y;

Min:=x;

end

Else

Begin

Max:=x;

Min:=y;

End;

Rezultat:=sqr(Max)-sqr(Min);

Writeln(`Резудьтат обчислень: ',Rezultat:8:2);

Readkey; {Затримка зображення на екрані до

натискання будь якої клавіші}

End.

Задача №97(2).

Умова: Дано значення дійсних величин a, b, c. Знайти:

Program Example_97_2;

Uses crt;

Var a,b,c : real;

Rez1,Rez2,Min : real; {Rez1, Rez2 - проміжні

обчислення; Min - результат виконання програми}

Begin

Clrscr; {Очищення екрану}

Write(`Введіть числа a,b,c: ');

Readln(a,b,c);

Rez1:=(a + b + c) / 2;

Rez2:=sqrt(1/(sqr(a)+1)+1/(sqr(b)+1)+1/(sqr(c)+1));

If Rez1Then Min:=Rez1

Else Min:=Rez2;

Writeln(`Min=',Min:8:2);

Readkey; {Затримка зображення на екрані до

натискання будь якої клавіші}

End.

Задача №100(2).

Умова: Дано значення дійсної величини Х. Визначити:

Для розв'язання цієї задачі необхідно пам'ятати, що ділити на нуль не можна.

Program Example_100_2;

Uses crt;

Var X,Rezultat:real;

Begin

Clrscr; {Очищення екрану}

Write(`Введіть значення X: ');

Readln(Х);

If X*X*X+X-2<>0

Then

begin

Rezultat:=(X-5)/(X*X*X+X-2);

Writeln(`Rezultat=',Rezultat:8:2);

end

Else

Writeln(`Обчислення неможливі - ділення на нуль!');

Readkey; {Затримка зображення на екрані до

натискання будь якої клавіші}

End.

Задача №101(4).

Умова: При даному значенні Х обчислити:

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

Program Example_101_4;

Uses crt;

Var X,Rezultat:real;

Begin

Clrscr; {Очищення екрану}

Write(`Введіть значення X: ');

Readln(Х);

If (X>=1) and (X*X*X-sqrt(X-1)>=0)

Then

begin

Rezultat:=sqrt(X*X*X-sqrt(X-1));

Writeln(`Rezultat=',Rezultat:8:2);

end

Else

Writeln(`Обчислення неможливі - від'ємний

підкореневий вираз!');

Readkey; {Затримка зображення на екрані до

натискання будь якої клавіші}

End.

Задача №102(3).

Умова: Дано дійсні значення x та y. Обчислити:

Для розв'язання цієї задачі необхідно виконання умов обох попередній прикладів.

Program Example_102_3;

Uses crt;

Var X,Y,Rezultat:real;

Begin

Clrscr; {Очищення екрану}

Write(`Введіть значення X та Y: ');

Readln(Х);

If (sqr(X)-sqr(Y)<>0) and (X*X*X-Y+0.5>=0)

Then

begin

Rezultat:=sqrt(X*X*X-Y+0.5)/(sqr(X)-sqr(Y));

Writeln(`Rezultat=',Rezultat:8:2);

end

Else

Writeln(`Обчислення неможливі!');

Readkey; {Затримка зображення на екрані до

натискання будь якої клавіші}

End.

Задача №107.

За рейтинговою системою оцінка визначається таким чином, якщо сумарний бал учня становить не менше 92% від максимального, то виставляється оцінка 12, якщо не нижче 70%, то виставляється 8, якщо ж не нижче 50%, то оцінка 5, в інших випадках - оцінка 2. Визначте оцінку учня, якщо він набрав N балів, а максимальне значення сумарного балу становить S.

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

Program Example_107;

Uses crt;

Var N,S,Grade:integer; {N - бали, що набрав учень; S

- максимальне значення

сумарного балу; Grade -

оцінка учня}

Begin

Clrscr; {Очищення екрану}

Write(`Введіть максимальне значення сумарного балу,

що може набрати учень: ');

Readln(S);

Write(`Введіть кількість балів, що отримав учень: `);

Readln(N);

If (S<=0) or (N<=0) or (N>S)

Then writeln(`Помилка вхідних даних.')

Else

Begin

N:=round(N/S*100); {Знаходження процентного

відношення балів учня до

максимально можливого}

If N>=92 then Grade:=12;

If (N<92) and (N>=70) then Grade:=8;

If (N<70) and (N>=50) then Grade:=5;

If (N<50) then Grade:=2;

Writeln(`Учень отримав оцінку - ', Grade);

End;

Readkey; {Затримка зображення на екрані до

натискання будь якої клавіші}

End.

Задача №103.

Умова: На площині дано дві точки (x1, y1) та (x2, y2). Визначити, яка з них знаходиться далі від початку координат.

Для розв'язання цієї задачі необхідно скористатися теоремою Піфагора для знаходження відстані від початку координат до заданої точки (дивись малюнок):

Очевидно, що відстань від початку координат до точки з координатами (x, y) буде обчислюватись наступним співвідношенням: .

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

Виходячи з усього вище сказаного, програма для розв'язання даної задачі має наступний вигляд:

Program Example_103;

Uses crt;

Var X1,Y1,X2,Y2:real; {X1,Y2,X2,Y2 - координати даних

точок}

S1,S2:real; {S1,S2 - відстані відповідно до

першої та другої точки}

Begin

Clrscr; {Очищення екрану}

Write(`Введіть координати першої точки: ');

Readln(Х1,Y1);

Write(`Введіть координати другої точки: ');

Readln(Х2,Y2);

S1:=sqrt(sqr(X1)+sqr(Y1));

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

If S1Then Writeln(`Друга точка далі від початку координат')

Else Writeln(`Перша точка далі від початку координат');

Readkey; {Затримка зображення на екрані до

натискання будь якої клавіші}

End.

Задача №112.

Умова: Дано значення дійсних величин a, b, c. Подвоїти ці значення, якщо a >= b >= c, і замінити їх абсолютними значеннями, якщо це не так.
В цій задачі зверніть увагу на дуже поширену помилку: в програмі не можна писати подвійну нерівність, як це робиться в математиці. Тобто, вираз a >= b >= c в програмі записується як складена умова (a >= b) and (b >= c).

Program Example_112;

Uses crt;

Var a,b,c:real;

Begin

Clrscr; {Очищення екрану}

Write(`Введіть три числа: ');

Readln(a,b,c);

If (a>=b) and (b>=c)

Then

Begin

A:=A*2;

B:=B*2;

C:=C*2;

End

Else

Begin

A:=abs(A);

B:=abs(B);

C:=abs(C);

End;

Writeln(`Вихідні значення:');

Writeln(`a=',a:8:2);

Writeln(`b=',b:8:2);

Writeln(`c=',c:8:2);

Readkey; {Затримка зображення на екрані до

натискання будь якої клавіші}

End.

Домашнє завдання:

· прочитати сторінки 59 - 65 запропонованого підручника;

· задачі №96(2), 97(3), 99, 100(4), 101(5), 102(1), 104, 105.

Тема уроку: "Запис алгоритмів з використанням вказівки розгалуження мовою програмування."

Мета уроку: Навчити створювати математичні моделі задач, складати алгоритми з використанням команди розгалуження та записувати їх мовою програмування.

Тип уроку: Розбір задач, що потребують для свого розв'язання вказівку розгалуження.

На початку уроку повторити основні поняття за темою "Команда розгалуження" (поняття умови, умови прості та складені, поняття команди розгалуження, її форми, запис мовою програмування та мовою блок-схем).

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

Задача №86.

Умова: Чебурашка вирішив купити килими, щоб застелити кімнату, в якій він мешкав разом з Геною. Їхня прямокутна кімната виявилася розмірами a x b, де a та b - цілі числа. Коли Чебурашка запитав у магазині, які килими є у продажу, то продавець повідомив, що є квадратні килими зі стороною с, де с - ціле число. Яку кількість килимів необхідно придбати Чебурашці, щоб накрити максимальну площу кімнати. Килими не можна накладати та підгинати. Визначити, яка площа кімнати буде ненакритою килимами. Передбачити ситуацію, коли розміри килиму перевищують розміри кімнати.

Очевидно, що якщо довжина сторони килима більша за будь-яку зі сторін кімнати, то застелити її цими килимами неможливо. Крім того, для знаходження кількості килимів, що вміщуються по одній зі сторін кімнати без їх підгинання, необхідно поділити націло довжину кімнати на довжину килима. Загальна кількість килимів знаходиться за наступною формулою:

K = K1 * K2,

де К1 та К2 - кількості килимів, що вміщуються вздовж двох суміжних сторін кімнати.

Площа, що незакрита килимами, визначається як різниця між площею кімнати та площею всіх куплених килимів.

Програма, що реалізує алгоритм розв'язку даної задачі, має наступний вигляд:

Program Example_86;

Uses crt;

Var a,b,c,S:word; {a,b - розміри кімнати, с -

K,K1,K2 : word; розміри килима, K1 - кількість

килимів вздовж однієї стіни, К2 -

кількість килимів вздовж другої

стіни, К - загальна кількість

килимів, S - площа кімнати, що

не накрита килимами}

Begin

Clrscr; {Очищення екрану}

Write(`Введіть розміри кімнати: ');

Readln(a,b);

Write(`Введіть розміри килима: ');

Readln(с);

If (c > a) or (c > b)

Then writeln(`Кімнату неможливо накрити такими

килимами')

Else

Begin

K1:=a div c;

K2:=b div c;

K := K1*K2;

S := a*b - K*c*c;

Writeln(`Кількість куплених килимів ', K);

Writeln(`Площа кімнати, що ненакрита килимами ', S);

End;

Readkey; {Затримка зображення на екрані до

натискання будь якої клавіші}

End.

Задача №89.

Умова: Від річкового вокзалу відійшли одночасно у протилежних напрямках теплохід та турист. Теплохід рухався зі швидкістю V1 км/год, а турист по стежці вздовж річки зі швидкістю V2 км/год. Якщо через N годин турист передумає і вирішить попливти річкою назад за теплоходом зі швидкістю V3 км/год, то чи встигне він підсісти на теплохід, який має за графіком зупинку через Y годин після початку руху і стоїть на цій зупинці Z годин? Зважати на те, що всі події відбувалися протягом однієї доби.

Якщо турист на протязі N годин рухався в протилежному напрямку від теплоходу, то відстань між ними в той момент, коди турист вирішив наздогнати теплохід, була наступна:

S = (V1 + V2) * N

де V1 та V2 - швидкості теплоходу та туриста відповідно.

Швидкість, з якою турист почне наздоганяти теплохід - (V3 - V1) км за годину, де V3 - швидкість, з якою турист попливе навздогін теплоходу. Час, який буде у туриста для наздоганяння, (Y - N + Z) годин, тому що зупинка у теплохода буде за розкладом через Y годин після початку руху, але N годин він вже плив, а Z годин теплохід буде стояти на цій зупинці. Тоді за цей час турист пройде відстань:

St = (V3 - V1) * (Y - N + Z)

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

Програма, що реалізує запропонований алгоритм, має наступний вигляд:

Program Example_89;

Uses crt;

Var V1,V2,V3:real;

N,Y,Z : real;

Begin

Clrscr; {Очищення екрану}

Write(`Введіть швидкості теплоходу та туриста: ');

Readln(V1,V2);

Write(`Введіть час, через який турист вирішив

підсісти на теплохід: ');

Readln(N);

Write(`Введіть швидкість, з якою турист буде плисти

за теплоходом, час, через який у теплохода

зупинка, та тривалість зупинки: ');

Readln(V3,Y,Z);

If (V1<=0)or(V2<=0)or(V3<=0)or(N<=0)or(Y<=0)or(Z<=0)

Then writeln(`Помилкові вхідні дані')

Else

Begin

S:=(V1+V2)*N;

St:=(V3-V1)*(Y-N+Z);

If St>=S

Then writeln(`Турист встигне на теплохід.')

Else writeln(`Турист не встигне на теплохід.');

End;

Readkey; {Затримка зображення на екрані до

натискання будь якої клавіші}

End.

Задача №90.

Умова: Жили собі дід і баба і був у них город прямокутної форми. Довжина городу була А м, а ширина складала В м. Якось дід посварився з бабою і вирішив поділити город порівну. Тепер у діда квадратний город зі стороною С м, відрізаний скраю, а решта дісталася бабі. Визначити, чи не залишилась баба ошуканою та якої форми дістався їй город - прямокутної чи квадратної?

Взагалі задача має дуже простий розв'язок: адже бабуся не буде ошуканою в тому випадку, якщо площа городу, що залишилася для неї, не буде меншою, ніж площа дідусевого городу, тобто

С^2 <= A*B - C^2

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

Програма, що реалізує запропонований алгоритм, має наступний вигляд:

Program Example_90;

Uses crt;

Var A,B,C:real; {A,B - розміри городу, С -

розміри дідусевого городу}

Begin

Clrscr; {Очищення екрану}

Write(`Введіть розміри городу: ');

Readln(A,B);

Write(`Введіть довжину сторони дідусевого городу: ');

Readln(С);

If (A<=0)or(B<=0)or(C<=0)

Then writeln(`Помилкові вхідні дані')

Else

Begin

If (C>A) or (C>B)

Then writeln(`Дідусь не зможе відрізати город

такого розміру.')

else

begin

If A*B-sqr(C)<=sqr(C)

Then writeln(`Бабуся ошукана.')

Else writeln(`Бабуся не ошукана.');

If (A<>C) and (B<>C)

Then writeln(`Город залишився ніякової форми')

Else

If ((A=C)and(B/2=C))or((B=C)and(A/2=C))

Then writeln(`У бабусі квадратний город.')

Else writeln(`У бабусі прямокутний город.');

End;

Readkey; {Затримка зображення на екрані до

натискання будь якої клавіші}

End.

Задача №91.

Умова: Трьом Товстунам подали на десерт кремові тістечка. Маса одного тістечка складала Х кг, а маса Товстунів відповідно Х1 кг, Х2 кг та Х3 кг. Перший Товстун з'їв N тістечок. Кожний наступний Товстун з'їдав у два рази більше від попереднього, але при цьому він не міг з'їсти більше половини своєї власної ваги. Скільки тістечок було з'їдено Товстунами за обідом?

Зверніть увагу на те, що другий та третій Товстуни за умовою можуть з'їсти тістечок у два рази більше ніж попередній Товстун, але не можуть з'їсти більше половини своєї ваги. Тому фактично в задачі необхідно перевірити, чи не перевищує кількість тістечок, що може з'їсти кожний Товстун, дозволену масу і у відповідності до цього підрахувати кількість тістечок, що були з'їдені.

Наприклад, якщо другий Товстун може з'їсти 2N тістечок, то вага цієї їжі буде 2NX кг. Але за умовою він не може з'їсти більше половини своєї ваги, тобто більше ніж X1/2 кг. Тому якщо вага тих тістечок, що Товстун може з'їсти не перевищує поріг Х1/2 кг, то ми до загальної кількості тістечок додаємо всі можливі, тобто 2N, якщо ж перевищує, то ми додаємо тільки ту кількість тістечок, що не дозволяє перевищити припустимий поріг, тобто X1/2/X (дозволена вага їжі поділити на вагу одного тістечка). Якщо в цьому випадку число вийде нецілим, то це означає, що Товстун з'їв тістечко не повністю. Щоб такого не трапилось, ми робимо відкидання дробової частини після ділення за допомогою функції trunc.

Програма, що реалізує запропонований алгоритм, має наступний вигляд:

Program Example_91;

Uses crt;

Var X,X1,X2,X3:real; {Х - вага тістечка,

Х1,Х2,Х3 - вага Товстунів}

N,Counter : integer; {N - кількість тістечок, що

з'їв перший Товстун;

Counter - загальна кількість

з'їдених тістечок}

Begin

Clrscr; {Очищення екрану}

Write(`Введіть вагу тістечка: ');

Readln(Х);

Write(`Введіть вагу Товстунів (відповідно першого,

другого та третього): ');

Readln(X1, X2, X3);

Write(`Введіть кількість тістечок, що з'їв перший

Товстун ');

Readln(N);

If (X<=0)or(X1<=0)or(X2<=0)or(X3<=0)or(N<=0)

Then writeln(`Помилкові вхідні дані')

Else

Begin

Counter:=N; {З'їв перший Товстун}

If N*2*X<=X2/2

Then Counter:=Counter+2*N

Else Counter:= Counter+ trunc(X2/2/X);

If N*4*X<=X3/2

Then Counter:=Counter+4*N

Else Counter:= Counter+ trunc(X3/2/X);

Writeln(`Кількість з'їдених тістечок становить: ',

Counter);

End;

Readkey; {Затримка зображення на екрані до

натискання будь якої клавіші}

End.

Задача №95.

Умова: В велосипедист Микола, стартувавши з точки (X0, Y0) та рухаючись по прямій A(x - X0) + B(y - Y0) + C = 0, мріє про те, як він покатає на своєму велосипеді сусідку Катрусю. Чи здійсняться мрії Миколи, якщо неподалік, у точці (P, Q), росте дерево?

В даній задачі зовсім немає проблем з вхідними даними, тому що, якщо вважати місцевість, по якій рухається Микола, координатною площиною, то його початкові координати та координати дерева можуть мати будь-яке значення. А мрія Миколчина здійснить тільки в тому випадку, коли координати дерева не співпадуть з точкою на прямій, що задає траєкторію руху Миколи, тобто при підстановці координат дерева у рівняння прямої ми не отримаємо правильну рівність.

Програма, що реалізує запропонований алгоритм, має наступний вигляд:

Program Example_95;

Uses crt;

Var X0,Y0,P,Q:real; {X0,Y0 - координати точки, з

якої стартував Микола; P,Q -

координати дерева}

A,B,C: real; {A,B,C - коефіцієнти, що задають

рівняння прямої, по якій

рухається Микола}

Begin

Clrscr; {Очищення екрану}

Write(`Введіть коефіцієнти рівняння прямої, по якій

рухається Микола: ');

Readln(A,B,C);

Write(`Введіть початкові координати хлопця: ');

Readln(X0, Y0);

Write(`Введіть координати дерева, що знаходиться на

шляху Миколки: ');

Readln(P,Q);

If A*(P-X0)+B*(Q-Y0)+C=0

Then writeln(`Мріям Миколки не здійснитися...')

Else writeln(`Миколки покатає Катрусю на своєму

Велосипеді.')

Readkey; {Затримка зображення на екрані до

натискання будь якої клавіші}

End.

Домашнє завдання:

· прочитати сторінки 59 - 65 запропонованого підручника;

· задачі №87, 88, 93, 94.

Тема уроку: "Запис алгоритмів з використанням вказівки розгалуження мовою програмування."

Мета уроку: Навчити складати алгоритми з використанням команди розгалуження та записувати їх мовою програмування.

Тип уроку: Розбір більш складних задач, що потребують для свого розв'язання вказівку розгалуження.

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

Далі пропонується деякі з задач підвищеного рівня складності.

Задача №118.

Умова: Дано трикутник зі сторонами a, b, c. Визначити, який це трикутник: гострокутний, тупокутний чи прямокутний.

Для розв'язання цієї задачі необхідно нагадати дітям наступне:

1) з відрізків заданої довжини можна утворити трикутник тільки в тому випадку, якщо сума довжин будь-яких двох відрізків більше довжини третього відрізка;

2) якщо з трьох відрізків можна побудувати трикутник, то він буде прямокутним тоді й тільки тоді, коли виконується теорема Піфагора, тобто, коли сума квадратів двох сторін дорівнює квадрату третьої (це співвідношення може виконуватися для однієї пари сторін);

3) для гострокутного та тупокутного трикутників теорема Піфагора перетворюється на нерівність, причому для гострокутного повинні виконуватись всі три нерівності, а для тупокутного хоча б одна (дійсно в гострокутному трикутникові всі кути менші за 90 градусів, а в прямокутному та тупокутному хоча б один дорівнює або більше 90 градусів відповідно).

Крім того, очевидно, що довжини всіх сторін не можуть бути від'ємними або нульовими.

Отже, програма для розв'язання цієї задачі має наступний вигляд:

Program Example_118;

Uses crt;

Var a,b,c:real;

Begin

Clrscr; {Очищення екрану}

Write(`Введіть довжини сторін: ');

Readln(a,b,c);

If (a<=0) or (b<=0) or (c<=0)

Then writeln(`Помилка вхідних даних.')

Else

Begin

If (a+b < c) or (a+c < b) or (c+b < a)

Then writeln(`З відрізків такої довжини утворити

трикутник неможливо.')

Else

Begin

If (sqr(a)+sqr(b)=sqr(c)) or

(sqr(a)+sqr(c)=sqr(b)) or

(sqr(c)+sqr(b)=sqr(a))

then writeln(`Трикутник прямокутний');

If (sqr(a)+sqr(b) > sqr(c)) and

(sqr(a)+sqr(c) > sqr(b)) and

(sqr(c)+sqr(b) > sqr(a))

then writeln(`Трикутник гострокутний');

If (sqr(a)+sqr(b) < sqr(c)) or

(sqr(a)+sqr(c) < sqr(b)) or

(sqr(c)+sqr(b) < sqr(a))

then writeln(`Трикутник тупокутний');

end

End;

Readkey; {Затримка зображення на екрані до

натискання будь якої клавіші}

End.

Задача №120(2).

Умова: Дано натуральне число N (N <= 1000). Визначити суму першої і останньої цифр даного числа.

Для розв'язання цієї задачі ми скористаємося стандартними операціями цілочисельного ділення та остачі від ділення цілих чисел (операції div та mod).

Нагадаємо, що результатом ділення числа націло на 10 буде ефект "відкидання" молодшої цифри числа (відповідно при діленні на числа 100, 1000, 10000 тощо будемо "відкидати" дві, три або чотири цифри числа). Результатом ж операції знаходження залишку від ділення на 10 буде остання цифра числа (відповідно при знаходженні залишку від ділення на 100, 1000, 10000 будемо отримувати дві останні, три останні, чотири останні цифри числа). Наприклад:

234 div 10 = 23

9213 div 100 = 92

52 mod 10 = 2

2845 mod 1000 = 845.

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

Program Example_120_2;

Uses crt;

Var N, First, Last : word; {N - дане число; First

- перша числа числа; Last -

остання цифра числа}

Begin

Clrscr; {Очищення екрану}

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

Readln(N);

Last := N mod 10;

If (N>=0) and (N<10) then First:=0;

If (N>=10) and (N<100) then First:=N div 10;

If (N>=100) and (N<1000) then First:=N div 100;

If (N=1000) then First:=1;

Writeln(`Сума першої та останньої цифр дорівнює ',

First+Last);

Readkey; {Затримка зображення на екрані до

натискання будь якої клавіші}

End.

Задача №124.

Умова: Дано натуральне числа N (N <= 99). Визначити, чи правильно, що N^2 дорівнює кубу суми цифр цього числа.

Program Example_100_2;

Uses crt;

Var N, C1, C2 : word; {N - дане число; C1,C2 - перша

та друга цифри числа}

Begin

Clrscr; {Очищення екрану}

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

Readln(N);

If N>99

Then writeln(`Помилка вхідних даних')

Else

Begin

C1:=N div 10;

C2:=N mod 10;

If sqr(N)=sqr(C1+C2)*(C1+C2)

Then writeln(`Правильно.')

Else Writeln(`Не правильно.');

End;

Readkey; {Затримка зображення на екрані до

натискання будь якої клавіші}

End.

Задача №126(3).

Умова: Дано натуральне число N (N <= 9999). Враховуючи всі чотири цифри числа, визначити, чи правильно, що воно містить дві пари цифр, що повторюються.

Для розв'язання цієї задачі теж користуємось операціями ділення націло та знаходження залишку від ділення націло для виділення цифр числа, а потім розглядаємо всі можливі варіанти співпадання пар цифр числа:

1) перша - друга та третя - четверта цифри;

2) перша - третя та друга - четверта цифри;

3) перша - четверта та друга - третя цифри.

Program Example_126_3;

Uses crt;

Var N,C1,C2,C3,C4:word; {N - дане число; C1,C2,C3,C4

- відповідні цифри числа}

Begin

Clrscr; {Очищення екрану}

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

Readln(N);

If N>9999

Then writeln(`Помилка вхідних даних')

Else

Begin

C1:=N div 1000;

C2:=N div 100 mod 10;

C3:=N div 10 mod 10;

C4:=N mod 10;

If ((С1=С2) and (C3=C4)) or

((С1=С3) and (C2=C4)) or

((С1=С4) and (C2=C3))

Then writeln(`Правильно.')

Else Writeln(`Не правильно.');

End;

Readkey; {Затримка зображення на екрані до

натискання будь якої клавіші}

End.

Задача №128(1).

Умова: Квадратний многочлен заданий коефіцієнтами a, b, c, де а<>0. Визначити, чи корені відповідного рівняння є парними числами.

Для розв'язання цієї задачі необхідно нагадати дітям алгоритм знаходження коренів квадратного рівняння:

1) обчислити дискримінант за формулою D = b^2 - 4ac;

2) якщо ми отримали від'ємне число, то коренів для розв'язку квадратного рівняння з даними коефіцієнтами a, b, c не існує;

3) якщо дискримінант не від'ємний, то корені рівняння знаходяться за наступними співвідношеннями:

Парність коренів можна визначити, використовуючи операцію знаходження залишку від цілочисельного ділення на 2 (парне число при цьому у залишку має 0, а непарне - 1). Зверніть увагу тільки на те, що парність або непарність можна визначити тільки для цілих чисел.

Program Example_128_1;

Uses crt;

Var a,b,c,D,X1,X2:real; {a,b,c - коефіцієнти

квадратного рівняння; D -

дискримінант; X1, X2 - корені

квадратного рівняння}

Begin

Clrscr; {Очищення екрану}

Write(`Введіть коефіцієнти квадратного рівняння a,b,c: ');

Readln(a,b,c);

If a=0

Then writeln(`Помилка вхідних даних')

Else

Begin

D:=sqr(b)-4*a*c;

If D<0

Then writeln(`Рівняння не має розв”язків')

Else

Begin

X1:=(-b-sqrt(D))/(2*a);

X2:=(-b+sqrt(D))/(2*a);

Writeln(`Корені рівняння:');

Writeln(`X1=',X1:8:2);

Writeln(`X2=',X2:8:2);

If (round(X1)<>X1)or(round(X2)<>X2)

Then writeln(`Корені рівняння не являються

цілими числами.')

else

if (round(X1) mod 2 =0) and

(round(X2) mod 2 =0)

then writeln(`Корені рівняння парні')

else writeln(`Корені рівняння непарні');

End;

End;

Readkey; {Затримка зображення на екрані до

натискання будь якої клавіші}

End.

Задача №130.

Умова: Дано дійсні додатні числа a, b, c, x, y. Визначити, чи пройде цеглина з ребрами a, b, c у прямокутний отвір зі сторонами x та y. Проштовхувати цеглину дозволяється лише так, щоб кожне з її ребер було паралельним чи перпендикулярним кожній зі сторін отвору.

Для розв'язання цієї задачі пропонується впорядкувати розміри отвору та розміри цеглини впорядкувати за зростанням, тобто добитися того, щоб було a <= b <= c та x <= y. Тоді перевірка зведеться до порівняння розмірів отвору з найменшими розмірами цеглини (адже ми можемо цеглину розвернути будь-яким боком, щоб проштовхнути її у отвір).

Program Example_130;

Uses crt;

Var a,b,c,x,y,S:real; {a,b,c - розміри цеглини; x,y -

розміри отвору, S - допоміжна

змінна для обміну місцями

значень двох змінних}

Begin

Clrscr; {Очищення екрану}

Write(`Введіть розміри цеглини: ');

Readln(a,b,c);

Write(`Введіть розміри отвору: `);

Readln(x,y);

If (a<=0) or (b<-=0) or (c<=0) or (x<=0) or (y<=0)

Then writeln(`Помилка вхідних даних.')

Else

Begin

If a>b

Then

Begin

S:=a; a:=b; b:=S;

End;

If a>c

Then

Begin

S:=a; a:=c; c:=S;

End;

If b>c

Then

Begin

S:=b; b:=c; c:=S;

End;

If x>y

Then

Begin

S:=x; x:=y; y:=S;

End;

If (a<=x) and (b<=y)

Then writeln(`Цеглина пройде у отвір.')

else writeln(`Цеглина не пройде у отвір.')

End;

Readkey; {Затримка зображення на екрані до

натискання будь якої клавіші}

End.

Домашнє завдання:

· прочитати сторінки 59 - 65 запропонованого підручника;

· задачі №120, 122, 123, 125, 126(4,5), 128(2), 129(1).

Тема уроку: "Вказівка повторення та її опис мовою блок-схем та мовою програмування"

Мета уроку: Дати поняття про вказівку повторення та її використання при розв'язуванні задач, про типи циклів та їх оформлення мовою програмування Паскаль та мовою блок-схем.

Тип уроку: Лекційний.

Теоретичний матеріал:

Цикл - це послідовність операторів, що може виконуватися більше одного разу. Він використовується при розв'язуванні таких задач, де необхідно повторити деяку послідовність команд більше одного разу.

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

- цикл з відомою заздалегідь кількістю повторів;

- цикл з невідомою кількістю повторів.

Щоб це пояснити, розглянемо приклад. Вчителька в першому класі дає дітям завдання: "Діти, напишіть, будь ласка, десять букв "А" та рядочок букв "Б"". Чим відрізняються ці два завдання? В першому випадку зразу ж відомо, скільки разів необхідно повторювати виконання команди "напишіть букву А", а в другому - кількість літер "Б" буде залежати від великої кількості різних факторів: почерку дитини, розміру букв, відстані, що залишається між буквами тощо. Ясно, що в першому випадку ми можемо чітко обумовити кількість повторів, а в другому - необхідно знайти таку умову, перевіряючи яку, дитина зможе закінчити свою роботу.

Примітка: Дайте дітям можливість знайти цю умову та придумати свої подібні варіанти циклів.

В мові програмування Паскаль існує три типи циклів: for, repeat та while. Якщо кількість повторів відома заздалегідь, використовується оператор for, якщо кількість повторів невідома, застосовуються оператори repeat або while.

Оператор повтору for.

Цей оператор повторення інакше називається циклом з параметром (або лічильником). Він складається із заголовка та тіла циклу та може бути поданий у двох форматах.

1. for <параметр циклу> := <S1> to <S2> do

Begin

<серія>;

end;

2. for <параметр циклу> := <S1> downto <S2> do

begin

<серія>;

end;

де S1 і S2 - вирази, що визначають відповідно початкове і кінцеве значення параметру циклу;

for.. do - заголовок циклу;

<серія> - тіло циклу. Тіло циклу може бути простим або складеним.

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

Параметр циклу, його початкове і кінцеве значення повинні належати до одного типу даних. При цьому можливо використання будь-якого скалярного типу, крім дійсного, тобто цілого (integer, byte, word, longint), булівського (boolean) та символьного (char). Значення параметра циклу послідовно збільшується при for... to або зменшується при for... downto на одиницю при кожному повторі.

Кількість повторів тіла циклу в операторі for можна визначити за наступною таблицею:

Оператор

S1 < S2

S1 = S2

S1 > S2

for...to

S2-S1+1 разів

1 раз

Не виконується

for...downto

Не виконується

1 раз

S1-S2+1 разів

В операторі for після do може знаходитися складений оператор, в тілі якого заборонені оператори, що змінюють значення параметра циклу. Після нормального завершення циклу значення параметра циклу дорівнює кінцевому значенню.

Цикл може не виконатися зовсім (дивись таблицю), але ніколи не може зациклитись на відміну від наступних двох операторів повторення.

Приклад програми з оператором For:

Умова задачі. Знайти суму всіх натуральних чисел від 1 до 100.

Розв'язок:

Program Example_1;

Uses crt;

Var Sum, i : integer;

Begin

Clrscr;

Sum := 0;

For i := 1 to 10 do

Sum := Sum + i;

Writeln(`Sum = `, Sum);

Readkey;

End.

Оператор повтору repeat

Наступний оператор циклу складається з заголовка (repeat), тіла та умови закінчення (until).

Формат опису:

Repeat

<серія>

until <умова>;

Умова - вираз булівського типу. Про умови ми з вами вже говорили в темі "Команда розгалуження" і всі особливості їх застосування та оформлення в цій команді нічим не відрізняються від попереднього випадку.

В цьому циклі спочатку виконується серія (тіло циклу), а потім перевіряється умова виходу з циклу. Саме тому ця команда повторення інакше називається циклом із післяумовою. Якщо умова виходу з циклу хибна (false), цикл активізується ще раз, якщо результат істинний (true), відбувається вихід із циклу.

Мовою блок-схем цей цикл описується наступним чином:

Цей оператор повтору має наступні характерні риси:

- використовується у випадках, коди користувачу не відома заздалегідь кількість повторень;

- тіло циклу виконується хоча б один раз;

- тіло циклу виконується, поки умова хибна false;

- у тілі може знаходитися будь-яка кількість операторів без операторних дужок begin... end;

- принаймні один оператор у тілі циклу повинен змінювати значення умови, інакше цикл буде виконуватися нескінченно.

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

Приклад програми з оператором Repeat:

Умова задачі. Перевірка коректності введення. Дани три числа, що задають величини кутів трикутника. Визначити, чи можна побудувати трикутник, що має задані кути. Якщо ні, примусити користувача ввести інші дані.

Розв'язок:

Program Example_2;

Uses crt;

Var a,b,c : real;

Begin

Clrscr;

Repeat

Write(`Введіть довжини сторін трикутника: ');

Readln(a,b,c);

Until (a>0)and(b>0)and(c>0)and(a+b+c)=180;

End.

Оператор повтору while

Оператор while аналогічний оператору repeat, але перевірка умови виконання тіла циклу робиться на самому початку оператора, тому цикл інакше називається циклом із предумовою.

Формат опису:

while <умова> do

begin

<серія>;

end;

Умова - булівський вираз, а серія - простий або складений оператор. Перед кожним виконанням тіла циклу обчислюється значення виразу умови. Якщо результат являється істинним (true), тіло циклу виконується, у протилежному випадку відбувається вихід із циклу і перехід до першого після while оператору. Якщо перед першим виконанням циклу значення виразу було хибним (false), то тіло циклу взагалі не виконується і відбувається перехід на наступний оператор.

Мовою блок-схем цей цикл описується наступним чином:

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

Приклад програми з оператором While:

Умова задачі. Дано натуральне число N. Визначити кількість цифр в числі.

Розв'язок:

Program Example_3;

Uses crt;

Var N : longint; Counter : integer;

Begin

Clrscr;

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

Readln(N);

Counter := 0;

While N > 0 do

Begin

Counter:=Counter+1; {Підрахунок кількості цифр}

N:=N div 10; {Відкидання останньої цифри}

End;

Writeln(`Кількість цифр у заданому числі дорівнює', N);

Readkey;

End.

Домашнє завдання:

· прочитати сторінки 83 - 89 з запропонованого підручника;

· вивчити означення, що прочитані на лекції.

Тема уроку: "Використання циклу з параметром для розв'язування задач"

Мета уроку: Навчити використовувати цикл з параметром для розв'язування типових задач.

Тип уроку: Практичний.

На початку уроку рекомендується провести письмове опитування (можна у вигляді диктанту) по матеріалах попереднього уроку. Далі можна розглянути деякі типові задачі з використанням циклу з параметром.

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

Задача №177.

Умова: Ненажера Стецько пробрався перед обідом у шкільну їдальню, де вже були накриті столи, і почав швиденько з'їдати ще тепленьки булочки, що стояли на столах. З першого столу він з'їв x1 булочок, з другого - х2, і, відповідно, з останнього - xn булочок. Але за ним стежив черговий по їдальні Андрійко та ретельно все фіксував на своєму калькуляторі: до булочок, з'їдених з першого столу, додав кількість булочок, що зникли з другого столу, і т.д. Допоможіть крок за кроком відтворити інформацію, яку дістав Андрійко на своєму калькуляторі.

Очевидно, що при розв'язанні даної задачі нам на початку роботи програми відома кількість повторів, тому що ми зразу ж знаємо, скільки столів в їдальні. Крім того, зауважимо, що для зберігання кількості булочок, що знаходяться на кожному столі, не треба мати N змінних. Достатньо мати одну, назвемо її, наприклад, X, в якій тимчасово будемо зберігати відповідну кількість булочок з чергового столу. І, врешті решт, нам необхідна ще одна змінна, в якій ми будемо одержувати проміжні обчислення чергового Андрійка (наприклад, Sum). Таким чином, програма, що розв'язує дану задачу, буде мати наступний вигляд:

Program Example_177;

Uses crt;

Var I,N:word; {I - параметр циклу, N -

кількість столів в їдальні,

тобто кількість повторень}

Sum,X:word; {X - кількість булочок на

черговому столі їдальні, Sum -

загальна кількість булочок, що

з'їв Стецько}

Begin

Clrscr;

Sum:=0; {На початку роботи програми Стецько

ще нічого не з'їв}

Write(`Введіть кількість столів в їдальні: ');

Readln(N);

For I:=1 to N do

Begin

Write(`Введіть кількість булочок на

черговому столі: ');

Readln(X);

Sum:=Sum+X;

Writeln(`На даний момент Стецько з”їв

',Sum,' булочок.');

End;

Readkey; {Затримка зображення на екрані}

End.

Задача №183.

Умова: Компанія бабусь поїхала на мотоциклах на курси комп'ютерної грамотності. Попереду на мотоциклі без глушника їхала одна бабуся, за нею - дві, потім - три і т.д. Скільки бабусь їхало на заняття, якщо приголомшені пішоходи всього нарахували N рядів? Чи змогли бабусі зайняти всі місця у класі, якщо там стояло k рядів по l комп'ютерів в кожному? Скільки вільних місць залишилося?

Зверніть увагу на те, що фактично ця задача зводиться до знаходження суми всіх натуральних чисел від 1 до N. В кінці задачі для повторення команди розгалуження учням пропонується визначити кількість зайнятих бабусями та вільних місць.

Program Example_183;

Uses crt;

Var I,N,Sum:word; {I - параметр циклу, N -

кількість рядів мотоциклів,

тобто кількість повторень, Sum -

загальна кількість бабусь, що

приїхали на курси}

Place,k,l:word; {k - кількість рядів в

комп'ютерному класі, l -

кількість комп'ютерів в

кожному ряду, Place - кількість

місць, що вистачила для бабусь}

Begin

Clrscr;

Sum:=0;

Write(`Введіть кількість рядів мотоциклів, що

нарахували пішоходи: ');

Readln(N);

For I:=1 to N do Sum:=Sum+I;

Writeln(`Кількість бабусь, що приїхала на курси ',Sum);

Writeln(`Кількість комп”ютерів на курсах ',k*l);

If Sum < k*l Then writeln(`Бабусі не змогли зайняти всі місця.')

Else writeln(`Бабусі зайняли всі місця.');

Place:=Sum - k*l;

If Place>0

Then writeln(`Бабусям не вистачило ',Place,'місць.');

Readkey; {Затримка зображення на екрані}

End

Задача №189(2).

Умова: Знайти значення

(1 + 0.1)(2 + 0.2)...(9 + 0.9)

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

Program Example_189_2;

Uses crt;

Var I:word; {I - параметр циклу}

Rez:real; {Rez - результат обчислень}

Begin

Clrscr;

Rez:=1; {Початкове значення дорівнює 1, тому що

результат являється накопиченням

добутку}

For I:=1 to 9 do Rez:=Rez*(I+0.1*I);

Writeln(`Rez= ',Rez:8:2);

Readkey; {Затримка зображення на екрані}

End.

Задача №190(1).

Умова: Дано ціле n. Визначити n!

Відомо, що n! (вимовляється, як н-факторіал) - це добуток всіх натуральних чисел від 1 до n. Тому вихідна програма має вигляд:

Program Example_190_1;

Uses crt;

Var I,n:word; {I - параметр циклу}

Factorial:longint; {Factorial - результат

обчислень}

Begin

Clrscr;

Factorial:=1; {Початкове значення дорівнює 1, тому

що результат являється накопиченням

добутку}

Write(`Введіть значення n: ');

Readln(n);

For I:=1 to n do Factorial:=Factorial*I;

Writeln(`Factorial= ',Factorial:8:2);

Readkey; {Затримка зображення на екрані}

End.

Задача №190(3).

Умова: Дано ціле n. Визначити

1*3*5*7*…*(2n+1).

Очевидно, що дана програма відрізняється від попередньої тільки тим, що необхідно знайти добуток тільки непарних натуральних чисел від 1 до n.

Program Example_190_3;

Uses crt;

Var I,n:word; {I - параметр циклу}

Rez:longint; {Rez - результат обчислень}

Begin

Clrscr;

Rez:=1; {Початкове значення дорівнює 1, тому

що результат являється накопиченням

добутку}

Write(`Введіть значення n: ');

Readln(n);

For I:=0 to n do Rez:=rez*(2*I+1);

Writeln(`Rez= ',Rez:8:2);

Readkey; {Затримка зображення на екрані}

End.

Задача №190(6).

Умова: Дано ціле n. Визначити

Sin(1)*sin(1+2)*…*sin(1+2+…+n).

Відміна даної програми від всіх попередніх полягає в тому, що в даному випадку ми маємо два накопичення: по-перше, відбувається накопичення суми, що знаходиться під знаком sin, а, по-друге, сам результат являється накопиченням добутку сінусів. Тому для зберігання цих двох накопичень необхідно мати дві змінні. Результуюча програма має наступний вигляд:

Program Example_190_6;

Uses crt;

Var I,n:word; {I - параметр циклу}

Rez,Sum:longint; {Rez - результат обчислень,

Sum - проміжне накопичення}

Begin

Clrscr;

Rez:=1; {Початкове значення дорівнює 1, тому

що результат являється накопиченням

добутку}

Sum:=0; {Початкове значення дорівнює 0, тому

що результат являється накопиченням

суми}

Write(`Введіть значення n: ');

Readln(n);

For I:=1 to n do

Begin

Sum:=Sum+I; {Накопичення суми}

Rez:=Rez*sin(Sum); {Накопичення добутку}

End;

Writeln(`Rez= ',Rez:8:2);

Readkey; {Затримка зображення на екрані}

End.

Задача №191(6).

Умова: За даним натуральним значенням змінної n обчислити: Для розв'язку цієї задачі необхідно виконати обчислення, починаючи з самого вкладеного кореня. Кожен наступний крок обчислюється наступним чином: до попереднього результату додається двійка і з отриманої суми береться квадратний корінь.

Програма, що виконує описані обчислення, наведена нижче:

Program Example_191_6;

Uses crt;

Var I,n:word; {I - параметр циклу}

Rez:real; {Rez - результат обчислень}

Begin

Clrscr;

Rez:=0; {Початкове значення дорівнює 0, тому

що результат являється накопиченням

суми}

Write(`Введіть значення n: ');

Readln(n);

For I:=1 to n do

Begin

Rez:=sqrt(Rez+2);

End;

Writeln(`Rez= ',Rez:8:2);

Readkey; {Затримка зображення на екрані}

End.

Задача №210.

Умова: Дано ціле число n, яке набуває значень шкільних оцінок. Визначити відповідною кількістю звукових сигналів, яка саме оцінка була задана ("1" - один звуковий сигнал, "2" - два звукових сигнали і т.д.). Якщо ж задане число не відповідає значенню шкільної оцінки - подати довгий звуковий сигнал.

Звуковий сигнал в цій програмі можна подавати за допомогою процедур керування вбудованим динаміком Sound та nosound. Нагадуємо, що перша з них викликає звучання ноти заданої частоти (частота вказується в дужках після процедури), а друга виключає динамік. Тривалість звучання та паузи між звуками можна задавати процедурою delay, в якості параметра до якої задається змінна time (значення цієї змінної можна задати командою присвоєння або введенням з клавіатури).

Program Example_210;

Uses crt;

Var I,n:word; {I - параметр циклу, n - оцінка учня}

Time:word;

Begin

Clrscr;

Write(`Введіть Вашу оцінку: ');

Readln(n);

Time:=10000; {Значення цієї змінної залежить

від характеристик комп'ютера, за

яким працює учень, і може бути

підібрана практичним шляхом}

If (n<1) or (n>12)

Then

begin

writeln(`Ви помилились, такої оцінки не

існує');

sound(200);

end

Else

For I:=1 to n do

Begin

Sound(200);

Delay(time);

Nousound;

Delay(time);

End;

Readkey; {Затримка зображення на екрані}

End.

Домашнє завдання:

· Повторити теоретичний матеріал, пов'язаний з роботою циклу з параметром;

· Задачі №189 (4), №190(3), №191(1), №191(7), №211, №178, №188.

Тема уроку: "Використання циклу з передумовою для розв'язування задач"

Мета уроку: Навчити використовувати цикл з передумовою для розв'язування типових задач.

Тип уроку: Практичний.

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

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

Задача №180.

Умова: Коли Василині Премудрій виповнилося 18 років, Чахлик Невмирущий вирішив взяти її заміж. Василина запитала Чохлика, скільки у нього скринь із золотом. Чахлик сказав, що в нього зараз n скринь і щороку додається ще по m скринь. Василина пообіцяла, що вийде заміж тоді, коли у Чохлика буде k повних скринь із золотом. Скільки років буде тоді нареченій?

Program Example_180;

Uses crt;

Var m,n,k:word; {n - початкова кількість скринь з

золотом, m - щорічний “прибуток”

Чахлика Невмирущого, k - “потреби”

Василини Премудрої}

Sum,Years:word; {Sum - щорічне накопичення Чахлика

Невмирущого, Years - вік Василини

Премудрої}

Begin

Clrscr;

Write(`Введіть початкову кількість скринь з золотом: ');

Readln(n);

Write(`Введіть щорічний прибуток Чахлика: ');

Readln(m);

Write(`Введіть “потреби” Василини Премудрої: ');

Readln(k);

Sum:=n; {Початковий “капітал” Чахлика}

Years:=18; {Початковий вік Василини}

While Sum<=k do

Begin

Sum:=Sum+m;

Years:=Years+1;

End;

Writeln(`Василині вже виповнилося ',Years,' років.`);

Readkey; {Затримка зображення на екрані}

End.

Задача №181.

Умова: Капосний папуга навчився висмикувати у дідуся Василя волосся, яке ще залишилось у того на голові. Почавши з однієї волосини, він щодня збільшував порцію вдвічі. Через скільки днів дідусеві не знадобиться гребінець, якщо спочатку в нього на голові було аж N волосин.

Program Example_181;

Uses crt;

Var N,Sum:word; {N - початкова кількість волосся у

дідуся Василя на голові, Sum -

щоденна кількість волосся на голові}

Day,K:word; {Day - кількість днів, протягом яких

папуга знущався над дідусем }

Begin

Clrscr;

Write(`Введіть початкову кількість волосся на

голові у дідуся Василя: ');

Readln(N);

Sum:=N;

Day:=0; {Початок знущання}

K:=1; {Початкова кількість вирваного

волосся}

While Sum>0 do

Begin

Sum:=Sum-K;

K:=2*K; {Кожен день кількість вирванного

волосся подвоювалась}

Day:=Day+1;

end;

writeln(`У дідуся волосся закінчилося на ',Day,'-й день.');

Readkey; {Затримка зображення на екрані}

End.

Задача №197(2).

Умова: Дано натуральне число n. Визначити суму цифр в числі.

Для розв'язку цієї задачі використаємо такий штучний прийом: Щоб знайти суму цифр, ми повинні "брати" цифри по одній і додавати їх одна до одної, а потім використану цифру "відкидати". На мові Паскаль це нам дозволять зробити операції ділення націло та знаходження залишку від цілочисельного ділення. Так, при діленні числа націло на 10 остання цифра числа буде "відкидатися", а при знаходженні залишку від ділення націло ми виділяємо останню цифру числа. Тобто:

123 div 10 = 12

3928 mod 10 = 8.

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

Program Example_197_2;

Uses crt;

Var n:longint; {N - дане число}

Sum:byte; {Sum - сума цифр числа}

Begin

Clrscr;

Sum:=0; {Сума цифр числа спочатку дорівнює 0}

Write(`Введіть ціле число: ');

Readln(N);

N:=abs(N);

While N>0 do

Begin

Sum:=Sum+N mod 10; {Знаходження суми цифр}

N:=N div 10; {“Відкидання” останньої

цифри числа }

End;

Writeln(`Sum= ',Sum);

Readkey; {Затримка зображення на екрані}

End.

Задача №200(2).

Умова: Дано дійсне число а. Знайти таке найменше n, що

.

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

Зверніть увагу, що при деяких значеннях а дана сума ніколи не досягне заданого значення. Наприклад, при від'ємному або дуже великому значенні змінної а.

Program Example_200_2;

Uses crt;

Var n:word; {n - шукане число}

Rez,a:real; {Rez - результат обчислень, а -

граничне значення}

Begin

Clrscr;

n:=1; {Початкове значення n - 1}

Write(`Введіть значення a: ');

Readln(a);

Rez:=0; {Початкове значення суми}

While Rez<=a do

Begin

Rez:=Rez+1/n;

n:=n+1;

end;

Writeln(`n= ',n);

Readkey; {Затримка зображення на екрані}

End.

Задача №203(2). Умова: Знайти найбільше додатне число n, для якого виконується умова: .

Очевидно, що починаючи зі значення n=1 і збільшуючи його на одиницю після кожного кроку, ми знайдемо таке ціле число, при якому вказана нерівність буде вірною.

Program Example_203_2;

Uses crt;

Var n:word; {n - шукане число}

Begin

Clrscr;

n:=1;

While -4*n+841*sqrt(n)+3>=0 do n:=n+1;

Writeln(`n= ',n);

Readkey; {Затримка зображення на екрані}

End.

Задача №204.

Умова: Дано ціле число m>1. Знайти найбільше число k, при якому виконується умова 4k < m.

Program Example_204;

Uses crt;

Var m,k,Rez:longint; {Rez - обчислення степеню 4}

Begin

Clrscr;

Write(`Введіть значення m (m>1): ');

Readln(m);

Rez:=1;

k:=0;

While Rezdo

Begin

k:=k+1;

Rez:=Rez*4;

End;

Writeln(`k= ',k);

Readkey; {Затримка зображення на екрані}

End.

Задача №208(1).

Умова: Під час обчислення результатів деяких експериментів виникає необхідність отримання результату із заданою похибкою. Нехай результатом є нескінченна сума, що задається певною формулою, і відома похибка e (e > 0) для знаходження наближеного значення результату. Будемо вважати, що необхідна точність досягнута, коли додавання наступного доданку змінює суму на величину, меншу за e. Обчислити:

Program Example_208_1;

Uses crt;

Var i:word;

Rez,Epsilon:real; {Rez - результат обчислень,

Epsilon - похибка}

Begin

Clrscr;

Rez:=0; {Початкове значення дорівнює 0, тому

що результат являється накопиченням

суми}

Write(`Введіть значення похибки (Е>0): ');

Readln(Epsilon);

i:=1;

While 1/sqr(i)>Epsilon do

Begin

Rez:=Rez+1/sqr(i)

i:=i+1;

End;

Writeln(`Rez= ',Rez:8:2);

Readkey; {Затримка зображення на екрані}

End.

Задача №212.

Умова: Обчислити значення числа p, використовуючи формулу

Визначити, яка кількість доданків дає значення числа p з точністю до 3 знаків.

Для організації циклу з передумовою в цій задачі необхідно мати еталон числа p для порівняння з нескінченною сумою. Візьмемо в якості цього еталону значення вбудованої функції Pi. Крім того, за умовою задачі нам необхідно отримати результат з точністю до третьої цифри після коми. Пропоную для цього стандартне число Pi і отриману нескінченну суму помножити на число 1000 та округлити результат за допомогою функції round (отриману суму, крім того, необхідно ще помножити на 4, так як сама сума являється чвертю числа p).

Зверніть увагу також на те, що в нескінченній сумі доданки, що стоять на парних місцях додаються зі знаком "+", а доданки на непарних місцях - віднімаються від суми. Тобто в залежності від номера доданку (парний чи ні) ми організовуємо знакочергування у нескінченній сумі. Результуюча програма для обчислення числа p за допомогою нескінченної суми наведена нижче:


Подобные документы

  • Методика та порядок програмування алгоритмів циклічної структури із заданим числом повторень за допомогою мови програмування VAB. Алгоритм роботи з одновимірними масивами. Програмування алгоритмів із структурою вкладених циклів, обробка матриць.

    курсовая работа [27,7 K], добавлен 03.04.2009

  • Розв'язання задач мовою програмування VBA з використанням алгоритмів лінійної, розгалуженої та ітераційної циклічної структури. Розробка блок-схеми алгоритму, таблиці ідентифікаторів та тексту програми. Створення власної панелі інструментів користувача.

    практическая работа [1012,6 K], добавлен 19.02.2010

  • Визначення поняття "алгоритми", їх властивості, метод складання. Способи подання алгоритмів: письмовий, усний, схематичний, графічний, кодований. Навчальна алгоритмічна мова. Особливості створення блок-схеми. Алгоритм поданий мовою програмування.

    презентация [2,9 M], добавлен 06.05.2019

  • Алгоритми розв’язання задач у вигляді блок–схем. Використання мови програмування MS VisualBasic for Application для написання програм у ході вирішення задач на одномірний, двовимірний масив, порядок розв’язання задачі на використання символьних величин.

    контрольная работа [742,9 K], добавлен 27.04.2010

  • Огляд переваг та недоліків мови Пролог, історія її створення. Числення предикатів як математична основа її функціонування. Порівняльна характеристика середовищ програмування Prolog. Алгоритми розв’язування математичних задач за допомогою цієї мови.

    курсовая работа [504,5 K], добавлен 23.12.2014

  • Фундаментальні поняття об'єктно-орієнтованого програмування. Система лінійних нерівностей та опуклі багатогранники. Системи лінійних рівнянь лінійної алгебри як частковий випадок систем лінійних обмежень. Використання середовища програмування Delphi7.

    курсовая работа [222,7 K], добавлен 20.05.2015

  • Мoвa прoгрaмувaння як систeма пoзначень, що служить для точного опису програм або алгоритмів для ЕOM. Вимоги до мов програмування, класифікація за їх особливостям. Загальна характеристика найбільш поширених мов програмування: Сі, Паскаль, Delphi, Бейсік.

    реферат [24,4 K], добавлен 10.11.2012

  • Лінійне програмування як один з найбільш популярних апаратів математичної теорії оптимального управління рішень. Опис існуючих методів розв’язку задач лінійного програмування. Завдання, основні принципи, алгоритми і головна мета лінійного програмування.

    курсовая работа [363,8 K], добавлен 03.12.2009

  • Аналіз розроблення та програмування обчислювального процесу лінійної структури, налагодження програм. Вивчення правил запису констант, числових і символьних змінних, типів даних. Побудова алгоритму розв’язування завдання та креслення його блок-схеми.

    реферат [2,1 M], добавлен 22.04.2012

  • Аналіз особливостей мови програмування Java та середовища Android Studio. Розробка програмного забезпечення для якісного та ефективного вивчення іноземних слів. Побудова базових алгоритмів і структури даних. Вибір мови програмування, реалізація програми.

    курсовая работа [335,3 K], добавлен 11.01.2015

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.