Практична робота 11.
Алгоритми розгалуження.
Задача 1. Василько
та Юлія грають в таку гру. Спочатку кожен записує на папері свій прогноз –
число від 1 до 6. Потім вони кидають гральний кубик з числами від 1 до 6 на
гранях. Чий прогноз виявляється ближчим до того числа, що випало, той і
переміг. Треба написати програму для визначення переможця.
Технічні умови. Програма Forа читає з пристрою
стандартного введення три числа через пропуски (пробіли) – прогноз Василька,
Юлі та результат кидання кубика. Програма виводить “V”, якщо переміг Василько,
“J” якщо Юлія або ”D” – якщо прогноз обох однаково близький до результату
(тобто переможця виявити неможливо.
Програма мовою Pascal
program fora; {оголошення назви
алгоритму}
var a,b,c : integer; {оголошення змінних цілих величин a,b,c}
begin writeln; {оголошення початку
роботи алгоритму}
readln(a); readln(b); readln(c); {оголошення про введення
величин a, b, c}
if ( (abs(c-a)) > (abs(c-b)) ) then
write('j'); {якщо | c-a |>| c-b |, тоді написати j}
if ( (abs(c-a)) < (abs(c-b)) ) then write('v'); {якщо | c-a |>| c-b|, тоді написати v}
if ( (abs(c-a)) = (abs(c-b)) ) then write('d'); {якщо | c-a |>| c-b|, тоді написати d}
end.
Протестувати алгоритм на правильність на
прикладах:
1)Введення
3 4
5 Виведення J; 2) Введення:
1 6
2 Виведення V; 3) Введення:
4 4
3 Виведення D; 4)Введення
6 5
2 Виведення J; 5) Введення: 1 6
2 Виведення V.
Завдання 3. Відомо, що
книжкова полиця вміщає k однакових
товстих книг, але k+1-а
книга вже не влазить. Так само на неї можна поставити m однакових
тонких книг, а m+1
-а вже не влізе. Скласти алгоритм, який знаходить можливість, щоб на полиці
помістилися одночасно: n товстих
та p тонких книг.
Розв’язання. Якщо числовий вираз n/k + p/m <=1, то можна,
якщо числовий n/k + p/m > 1, то не можна помістити одночасно книги на полицю.
Алгоритм
мовою Pascal (використовує
повне розгалуження, «якщо-то, інакше»)
program BIBLIO; var
k,m,n,p,h:real; begin
writeln('введіть число
товстих книг 2<k<109 k='); readln(k);
writeln('введіть число тонких книг 2<m<109 m='); readln(m);
writeln('введіть даних товстих книг 2<n<109 n='); readln(n);
writeln('введіть даних тонких книг 2<p<109 p='); readln(p); h:=(n/k)+(p/m);
if (h<1) or (h=1) then write(' кнгиги можна
помістити') {розгалуження
для результату}
else write('не можна помістити книги'); {інакше то вивід
результату не можна} writeln('h=', h); end.
Протестувати алгоритм на правильність на
прикладах:
1)Введення
3 4
5 6 Виведення ? 2) Введення: 1 6 2 8
Виведення ?; 3) Введення: 4 4 3 9
Виведення ?; 4)Введення
6 5
2 10 Виведення
?; 5) Введення: 2 6
7 9 Виведення
?
Завдання 4. Самостійно
скласти і реалізувати алгоритм впорядкування виразів: (n/k)+(p/m)-(m/p)-(k/m); та (р/k)+(n/m)-(k/n)-(n/p) в порядку зростання для дробових чисел k,m,n,p.
Протестувати алгоритм на правильність на
прикладах:
1)Введення
3 4
5 6 Виведення ? 2) Введення: 1 6 2 8
Виведення ?; 3) Введення: 4 4 3 9
Виведення ?; 4)Введення
6 5
2 10 Виведення
?; 5) Введення: 2 6
7 9 Виведення
?
Завдання 5. Самостійно
скласти і реалізувати алгоритм впорядкування виразів: (1/k)+(1/m)-1/p)-(1/n); та (1/k)+(1/p)-(1/m)-(1/n) в порядку зростання для дробових чисел k,m,n,p.
Протестувати алгоритм на правильність на
прикладах:
1)Введення
3 4
5 6 Виведення ? 2) Введення: 1 6 2 8
Виведення ?; 3) Введення: 4 4 3 9
Виведення ?; 4)Введення
6 5
2 10 Виведення
?; 5) Введення: 2 6
7 9 Виведення
?
Практична робота 12.
Програмування циклів мовою Pascal.
Завдання
1. Скласти
і реалізувати алгоритм підрахунку різних букв у слові мовою Pascal.
program Wordlitera; { оголошення
назви алгоритму }
var s:string; r:real; i,j,n:integer; {оголошення змінних величин
алгоритму: рядкові, дійсні, цілі}
begin {оголошення
початку алгоритму }
r:=0; {оголошення присвоєння нуля
дійсній змінній}
readln(s); {оголошення
про зчитування з екрану рядкової змінної }
for i:=1 to length(s) do begin {оголошення
циклу з лічильником i в алгоритмі}
n:=0; { оголошення про присвоєвоння нуля }
for j:=1 to
length(s) do begin {оголошення
циклу з лічильником j в алгоритмі}
if s[i]=s[j] then inc(n); { оголошення про перевірку на однаковість букв}
end; { оголошення про кінець циклу }
r:=r+1/n; {оголошення лічильника
кількості різних букв}
end; writeln('кількість різних букв у
слові r = ', r:1:0); end. { оголошення про кінець циклу, алгоритму }
Протестувати правильність виконання
алгоритму: Ввести: карта; агов; математика; інформатика-а-а.
Завдання
2. Скласти
і реалізувати алгоритм знаходження цілих дільників натурального числа
мовою Pascal.
program Numer; { оголошення
назви алгоритму }
var a,n,c,d: integer; {оголошення цілих
величин a,n,c,d в алгоритмі}
begin {початок алгоритму }
readln(a); {оголошення
про зчитування з екрану змінної }
n:=1; { оголошення про
присвоєвоння лічильнику 1 }
while
( n <= sqrt(a) ) do begin {оголошення
циклу з передумовою(допоки … виконати…) в алгоритмі}
c:=a
mod n; {оголошення
про знаходження остачі від ділення a:n}
d:=a
div n; {оголошення про знаходження
цілої частини від ділення a:n}
if
c = 0 then begin writeln(n); {Перевірка
подільності націло, якщо остача =0, то написати дільник}
if
n <> d then writeln( d ); {Перевірка неоднаковості
дільників, якщо дільники різні, то написати дільник}
end; inc(n); end; end. { оголошення про кінець циклу та алгоритму }
Протестувати правильність виконання
алгоритму: Ввести чисел: 4; 6; 8; 94; 96; 80; 99;
100; 272; 558; 997
Завдання
3. Скласти
і реалізувати алгоритм знаходження простих натуральних чисел мовою Pascal.
Program Prime;
const LIMIT =
50; {оголошення
постійної величини в алгоритмі: цілі}
var
i,j,lim: integer; {оголошення
змінних величин i, j, lim в алгоритмі: цілі}
begin {початок
основної програми алгоритму}
writeln; {початок
з нового рядку}
for
i:=1 to LIMIT do begin {оголошення про початок циклу з
лічильником i}
j:=2;
lim:=round(sqrt(i)); { оголошення
про присвоєвоння лічильнику 2 }
while
(i mod j <> 0) and (j <= lim) do inc(j); {цикл з складеною
передумовою}
if
(j > lim) then write( i,' '
); end; end. { перевірка,
вивід і оголошення про кінець}
Протестувати правильність
виконання алгоритму: Замінити: LIMIT = 50 на LIMIT
= 100; LIMIT = 997.
Завдання
4. Скласти
і реалізувати алгоритм знаходження суми цифр натурального числа мовою Pascal.
Program Summa;
var a,x, i,s:
integer;
begin
writeln('введіть ціле число'); readln(a);
x:=a;
s:=0;
while ( x < > 0 ) do begin
s := s + (x mod 10);
x := x div 10; end;
writeln( 'Сума цифр числа ', a, ' s= ', s); end.
Протестувати правильність виконання
алгоритму: Ввести чисел: 4; 6; 8; 94; 96; 80; 99;
100; 272; 558; 997
Завдання
5. Самостійно скласти і
реалізувати алгоритм знаходження послідовності чисел, що утворюється сумою
усіх цифр натурального числа та додаванням цієї суми до
самого числа мовою Pascal.
Наприклад:
А(15 )=1+5+15=26,
А(20)=2+0+20=22,
А(95 )=9+5+95=109,
А(24)=2+4+24=30, А(111)=1+1+1+111=114.
Завдання
6. Самостійно скласти і
реалізувати алгоритм знаходження послідовності чисел, що утворюється
добутком усіх цифр натурального числа та множенням цього
добутку на саме число мовою Pascal.
Наприклад:
А(15 )=1*5*15=75, А(20)=2*0*20=0,А(95 )=9*5*95=4275, А(24)=2*4*24=192,
А(111)=1*1*111=111.
Практична робота 13.
Цикли і розгалуження
Завдання
1. Скласти
і реалізувати алгоритм мовою Паскаль, який перевіряє приналежність натурального
числа до чисел Фібоначчі, тобто приналежність до ряду чисел, в якому кожне
наступне число дорівнює сумі двох попередніх чисел(наприклад:1+1=2; 1+2=3;
2+3=5; 3+5=8 і т.д.). До ряду чисел Фібоначчі
належать: 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987,
1597, 2584, 4181, 6765, 10946, 17711, 28657, 46368, 75025, 121393, 196418,
317811, 514229, 832040,
Програма
мовою Pascal.
program
Fibonacсi; {Оголошення назви алгоритму}
var a,b,c,n:
integer; asc: boolean; {Оголошення змінних величин : цілих та :
логічних}
begin write('Введіть
натуральне число N='); readln(n); {Оголошення про числа
}
a:=0;b:=1;c:=0; {Оголошення
початкових значень для цілих змінних}
asc:=false; {Оголошення початкового значення для
логічної змінної}
while
c<n do
begin {Оголошення
початку циклу з передумовою}
c:=a+b;
a:=b; b:=c; {
Сума двох попередніх змінних і переприсвоєння результатів
}
if n=c then asc:=true;
b:=c; end; { Перевірка критерію числа
Фібоначчі і кінець циклу}
if
asc = true then writeln(n,' - це число Фібоначчі')
{Перевірка і вивід числа Фібоначчі}
else writeln(n,'
- це не є числом
Фібоначчі'); end. {Перевірка
і вивід результату}
Протестуйте правильність роботи цього
алгоритму. Введення: 7; 8; 9; 54; 55; 832040.
Завдання
2. Скласти
і реалізувати алгоритм мовою Паскаль, який перевіряє, чи декілька
натуральних чисел являються взаємно простими. Два числа взаємно
прості, якщо у них найбільший спільний дільник дорівнює 1. Наприклад: 2 та 3 –
це взаємно прості числа; 4 та 8 – це не взаємно прості числа. Програма мовою Pascal.
program zysla2; {Оголошення назви
алгоритму}
var a:
array[1..100] of integer; {Оголошення про ряд
чисел(числовий масив 1х100) в алгоритмі}
i,max,n,j: integer; {Оголошення про цілі змінні в
алгоритмі}
begin write('vvedite koli4estvo 4isel:'); readln(n); {Оголошення
про введення кількості чисел}
for
i:=1 to n do {Оголошення початку циклу з
лічильником}
begin write(i, ') 4islo:');
readln(a[i]); end; {Оголошення
введення даних чисел по порядку}
max:=a[1];
for
i:=2 to n do if max<a[i] then max:=a[i]; {Оголошення початку циклу з
лічильником і перевірка}
for
i:=2 to max
do {Оголошення початку циклу з
лічильником}
for
j:=1 to n
do {Оголошення початку циклу з
лічильником}
if
a[j] mod i=0 then
begin write('TAK'); {Оголошення перевірки
подільності чисел з лічильником}
readln;
end
else begin
write('NI'); readln;
end; {Оголошення кінця перевірки та циклу
з лічильником}
readln; end.
Протестуйте правильність роботи алгоритму. Введення:{2;
8; 9}=TAK, {2; 25; 10}=NI, {3; 7; 14; 35}=NI
Завдання 3. Скласти і реалізувати
алгоритм мовою Паскаль, який перевіряє ряд випадкових натуральних чисел, які
при діленні на сім дають остачу 2 та 1 і виводить такі числа на екран.
Програма мовою Pascal
Program Ostaci; {Оголошення назви
алгоритму}
Const n
=
5; {Оголошення про постійну
величину: n - це кількість чисел в ряді}
var x
: array [1..n] of integer; i :
integer; {оголошення
про ряд чисел(числовий масив) в алгоритмі}
begin
for
i := 1 to n do x[i] := random(100); {цикл формування ряду випадкових
чисел, менше 100} for i := 1 to n
do write(x[i]:3); writeln; {оголошення
про виведення на екран ряду випадк. чисел}
for
i := 1 to n do {цикл з лічильником для
перевірки ряду випадкових чисел на остачі}
if
(x[i] mod 7 = 2) or (x[i] mod 7 = 1) {оголошення про перевірку чисел
на остачі на 2 та 1 }
then
write(x[i]:3, ' (', i, ') '); {оголошення про виведення на
екран ряду перевірених чисел}
writeln;
readln; еnd.
Протестуйте правильність роботи алгоритму. 1)
Введення: Const n = 7; Const n = 19; Const n =
22; 2)Змінити у програмі перевірку остач: перевірити числа на
остачі: 4 та 6, перевірити на остачі: 0 та 6. 3)Змінити у
програмі перевірку подільності на 9: перевірити числа на остачі: 1
та 3, перевірити на остачі: 0 та 5.
Практична робота 14.
Програмування циклів мовою Pascal.
Завдання
1. Ліцей
проводить вибори до учнівського парламенту. Скількома способами можна обрати
цей парламент, якщо до парламенту подано: k заявок
від 8-класників, m заявок від 9-класників, n заявок
від 10- класників. Скласти і реалізувати алгоритм підрахунку усіх способів
утворення шкільного парламенту мовою Pascal, за умови, що серед вибраних є
не менше одиного представника із трьох паралелей, і до парламенту проходить
тільки небільше половини від ТИХ, ХТО подав заявки. А саме, у парламенті має
зайти не більше: 0,5k+1 осіб від 8-класників,
небільше 0,5m+1 осіб від 9-класників, не більше 0,5n+1 осіб від 10- класників.
Розв’язання. У парламент може зайти: або
один, або два, або три, …., або 0,5k+1 від 8-класників. Кількість
способів, обчислюємо як сума комбінацій: С1k/2+1 +С2k/2+1 +С3k/2+1+…+ +Сk/2k/2+1. Аналогічно знаходимо кількість способів для 9-класників: С1m/2+1 +С2m/2 +1+С3m/2+1+…+ +Сm/2m/2+1. Аналогічно знаходимо кількість способів для 10-класників:
С1n/2+1 +С2n/2+1 +С3n/2+1+…+ +Сn/2n/2+1. А
кількість вибору того, що у парламенті мають бути представники від трьох
паралелей:
р=(С1k/2+1 +С2k/2+1 +С3k/2+1+…+ Сk/2k/2+1)( С1k/2+1 +С2k/2+1 +С3k/2+1+…+ Сk/2k/2+1)(С1k/2+1 +С2k/2+1 +С3k/2+1+…+ Сk/2k/2+1).
program Parlament;
var i, k, m, n, v1, d1, b1, v2, d2, b2, v3, d3, b3:integer;
begin
writeln('Введіть число заявок від 8-класників: k= '); readln(k); k:=(k div 2)+1;
writeln('Введіть число заявок від 9-класників: m=
'); readln(m); m:=(m div 2)+1;
writeln('Введіть число заявок від 10-класників: n=
'); readln(n); n:=(n div 2)+1;
v1:=1; d1:=1; b1:=1; v2:=1; d2:=1; b2:=1; v3:=0; d3:=0; b3:=0; {початкові
значення змінних}
for i:=1 to k do
begin v1:=i*v1; v2:=(k-i+1)*v2; v3:=(v2
div v1)+v3; end; {цикл
8-их класів}
for i:=1 to m do begin
d1:=i*d1; d2:=(m-i+1)*d2; d3:=(d2 div d1)+d3; end; {цикл
9-их класів}
for i:=1 to n do begin b1:=i*b1; b2:=(n-i+1)*b2;
b3:=(b2 div b1)+b3; end; {цикл
10-их класів}
writeln('Кількість способів обрати членів
парламенту від окремих паралелей:');
writeln(' v3= ', v3, ' способів тільки від 8-класників; ');
writeln(' d3= ',d3, ' способів тільки від 9-класників;');
writeln(' b3= ',b3, ' способів тільки від 10-класників; ');
writeln('Кількість способів обрати
новий учнівський парламент ліцею;');
writeln(' p= ', v3*d3*b3, ' способів'); writeln(' ');
end.
Протестуйте правильність роботи
алгоритму: {k;m;n}={(1;1;1)=1; (2;2;2)=27; (3;3;3)=27; (4;4;4)=343; (3;4;2)=63}
Практична робота 15.
Алгоритми різних типів
Завдання 1. Створити,
реалізувати алгоритм мовою Pascal, який знаходить
значення функції. Це лінійний алгоритм, бо містить тільки вираз з
алгебраїчними діями.
program tabul1;
var x, y, z, b : real;
begin
write(‘введіть х :’); readln(x); write(‘введіть y :’); readln(y);
write(‘введіть
z :’); readln(z);
b:=sqr(sin(x))+(sqr(y)+sin(sqr(z))/cos(sqrt(z)))/(z+exp(-x))+abs(55-2*random(99));
writeln(‘значення
b=’, 5*b-3); end.
Протестуйте цей алгоритм якщо: 1) х= 10; у=7; z=9. 2) х= 100; у=25; z=49.
Завдання 2. Створити, реалізувати алгоритм
мовою Pascal, який містить повне розгалуження if .. else і обчислює значення декількох виразів при
виконанні умов на знак числа х. Це нелінійний алгоритм, бо має розгалуження
на дві умови «+х» та «-х».
program tabul2;
var k,a, r,l, n,q,x: integer;
begin
x:=48-random(80); writeln('початкове значення х :=',x);
n:=random(90); writeln('початкове значення n :=',n);
a :=random(70); writeln('початкове значення a :=',a);
q:=random(60);
writeln('початкове
значення q :=',q);
l:=random(60);
writeln('початкове
значення l :=',l);
k:=random(60);
writeln('початкове
значення k :=',k);
if x>0
then begin k:=2*k+ k*k+25; r:=2*a+a*a+24; l:=0; q:=0; end
else
begin
l:=2*l+1; q:=q*a+3; k:=0; r:=0; end;
writeln(‘число х :=’, x); writeln(‘число k:=’, k);
writeln(‘число r:=’, r);
writeln(‘число a :=’, a); writeln(‘число q:=’, q); writeln(‘число l :=’,l); end.
Завдання 3. Створити,
реалізувати алгоритм мовою Pascal, який містить
вибір case.. Це нелінійний алгоритм, бо містить вибір
на 6 випадків для цілих значень k від 0 до 5.
program tabul3;
var a, r, l, n, y, x: real; k: integer;
begin
x:=random(80); writeln('початкове значення х :=',x);
n:=random(90); writeln('початкове значення n :=',n);
a :=random(70);
writeln('початкове
значення a :=',a);
y:=random(60);
writeln('початкове
значення y :=',y);
l:=random(60);
writeln('початкове
значення l :=',l);
k:=random(6); writeln('початкове значення k :=',k);
case k of
1: a:=abs(20*sqrt(a) - 40.567/ln(a));
2: n:=25/sqr(l)+6.89*exp(-n);
3: x:=6/sin(-n)+7*cos(y);
4: r:=6*sin(n)+7.7*cos(-y);
else
y:=0;
n:=0; x:=0; r:=0; a:=0; end;
writeln(‘r:=’, r); writeln(‘y :=’, y); writeln(‘k:=’, k); writeln(‘n:=’, n);
writeln(‘число a :=’,
a); writeln(‘число l:=’,
l); writeln(‘***********’); end.
Завдання 4. Створити,
реалізувати алгоритм мовою Pascal, який містить повторення з лічильником k. Це нелінійний алгоритм, бо має два цикли з
лічильниками.
program tabul4;
var x :
array[1..5] of real; a,b,y :
real;
i : integer;
begin a:=round(sqrt(random(45)))-2*sqr(round(random(70)))+25; writeln(' a:=', a);
b :=10*round(40/sqr(a)) - 3*round(random(70)); writeln('початкове значення
b :=', b);
for i:=1
to 5 do begin
x[i]:=10- round(random(70));
write(‘ x[’,i,’]=’, 2+6*x[i]); end;
for i:=1 to 5 do begin
y:=-a*sqr(x[i])+b;
writeln(‘ x=’,8*x[i], ‘ y=’, 30+0.34*y); end; end.
Практична робота 16.
Економічні алгоритми на рентабельність
Завдання 1. Вартість
автомобіля дорівнює А грн, а його капітальний ремонт вимагає r грн.
Встановлено, що автомобіль може працювати без ремонту n років, а з ремонтом m років. За яких умов між A, r, n, m витрати ремонту
являються рентабельними? При цьому треба врахувати, що після ремонту потужність
автомобіля дорівнює потужності нового автомобіля.
Розв’язання. А/n – це середня
вартість місяної експлуатації нового автомобіля. A+
r – це сумарна вартість автомобіля і ремонту. (A+ r)/m – це середня
вартість річної експлуатації автомобіля після
ремонту. Капітальний ремонт
автомобіля буде рентабельним, тобто окупить себе, тільки в тому випадку, якщо
середня вартість експлуатації автомобіля після ремонту буде більше ніж середня
вартість експлуатації до ремонту. Тому отримаємо нестрогу нерівність, (A+ r)/m <= А/n, звідки
отримаємо
r <=
А(m-n)/n.
Створити та
реалізувати мовою Паскаль алгоритм , який обчислює рентабельність ремонту
автомобіля при заданих A, r, n, m. Цей алгоритм
використовує вкладені цикли і
розгалуження в повній формі.
program remont1;
var a, r, m, n, b, i: integer; {оголошуються
змінні типу: цілі}
begin writeln(' Вводяться
початкові випадкові числа A, r, n, m. ');
a:=(10000+random(100000)); write('якщо вартість автомобіля: a =', a); writeln;
r:=(1000+random(90000)); write('якщо вартість ремонту: r =', r); writeln;
n:= 1+random(12); write('якщо
кількість місяців без ремонту: n=', n); writeln;
m:= 10+random(18); write('якщо
кількість місяців з ремонтом: m =', m); writeln;
for i:=1 to n do begin {два
цикли з лічильником для обчислення рентабельності}
for i:=1 to m do begin b:= a*(m-n) div n;
if (r<b) or (r=b) then { повне розгалуження для перевірки рентабельності }
writeln(' Варто
ремонтувати автомобіль, бо дешевий кап.ремонт ', r, ' =<', b)
else writeln(' Не варто
ремонтувати автомобіль, бо дорогий кап.ремонт ', r, ' >', b);
writeln; end; end; end.
Протестуйте
цей алгоритм декілька разів і порівняйте результати обчислень на кожному кроці.
Спробуйте самостійно змінити в алгоритмі діапазон випадкових чисел.
Завдання 2.
Затрати при перевезенні вантажів двома видами транспорту обчислюється за
двома лінійними формулами: у1=a+bх, у2=m+kх,
де х – це відстань перевезення в сотнях кілометрів, у грн. – це
транспортні витрати при перевезенні вантажу також a>0, b>0, m>0, n>0. Знайти, на які відстані і яким видом транспорту
перевезення вантажів буде рентабельним?
Розв’язання. Дві формули у1=a+bх, у2=m+kх задають
прямі лінії в прямокутній системі координат.
Одна з цих прямих лежить вище ніж друга. Ті точки, що лежать на прямій,
що розміщена нижче, означають, що затрат буде менше. Є випадок, коли ці прямі
перетинаються(це однакові затрати).
Координати точки перетину знаходиться із системи двох рівнянь,
тобто х=(m-a)/(b-k) сотень км; у= a+b*(m-a)/(b-k) грн. Отже, якщо перевозити на відстань менше ніж (m-a)/(b-k) км, то варто користуватися першим видом
транспорту, а якщо перевозити на
відстань більшу ніж (m-a)/(b-k) км, то варто користуватися другим видом
транспорту.
Створити та
реалізувати мовою Паскаль алгоритм , який обчислює і порівнює рентабельність
кожного виду транспорту для деякої відстані перевезення вантажу.
program perevoz2;
var a, k, m, x, b, y, с, v1, v2: integer;
{оголошуються
змінні типу: цілі}
begin writeln(' Вводяться
початкові випадкові числа для: a>0, b>0, m>0, n>0 ');
a:=(300+random(900)); write('якщо
вартість 1-го перевізника: a =', a); writeln;
b:=(29+random(5)); write('якщо вартість палива на 100 км: b =', b); writeln;
m:=(400+random(900)); write('якщо
вартість 2-го перевізника:
m =', m); writeln;
k:=(26+random(4)); write('якщо вартість палива на 100 км: k =', k); writeln;
x:=(1+random(150)); write('якщо відстань перевезення вантажу: х =', х); writeln;
c:= (m-a) div (b-k); write('якщо відстань
перевезення вантажу: c =', c, ' то можна
на 2-ох видах транспорту' ); writeln;
v1:= a+b*x; write('вартість перевезення 1-им видом транспорту: v1 =', v1 ); writeln;
v2:= m+k*x; write('вартість перевезення 2-им видом транспорту: v2 =', v2); writeln;
if (v1<v2) then { повне
розгалуження для перевірки
рентабельності }
writeln('Варто везти 1-им видом транспорту, бо бо
менша вартість 1-ого
', v1, ' <', v2)
else writeln('Варто везти 2-им видом транспорту, бо менша вартість 2-ого ', v1, ' >', v2);
writeln; end.
Протестуйте цей
алгоритм
декілька разів і порівняйте результати обчислень на кожному кроці. Спробуйте
самостійно змінити в алгоритмі діапазон випадкових чисел.
Практична робота 17.
Нелінійні алгоритми з практичним змістом
Завдання 1. На вокзалі з
потягу зійшли два пасажира і направились одночасно в один і той же пункт А.
Перший пасажир половину часу йшов зі швидкістю v1 м/год, а другу
половину часу йшов зі швидкістю v2 м/год. Другий
пасажир йшов першу половину шляху зі швидкістю v2 м/год, а другу
половину шляху зі швидкістю v1 м/год.
Допоможіть слідчому, дізнатися, яку відстань долали пасажири від виходу із потяга
до пункту призначення і хто першим прибуває в пункт А. Скласти і реалізувати алгоритм для вияснення, хто першим прибуває у
пункт призначення і на скільки раніше, ніж інший, якщо відомо, що перший
пасажир витрачає на весь свій шлях t хвилин?
program TOURIST_1;
{назва алгоритму}
var v1,v2,t1,t2, s1 : real; {оголошення змінних величин: v1,v2,t1,t2, s1,s2 – це дійсні числа}
begin {
початок виконання алгоритму}
writeln(
'v1='); readln(v1); writeln( 'v2='); readln(v2); writeln( 't1='); readln(t1);
s1:=(v1+v2)*t1*0.5;
{обчислення
за фор-лою відстані від потяга до пункту}
writeln('Довжина
шляху пасажирів', s1, ' метрів '); {
виведення результату}
t2:=(v1+v2)* (v1+v2)*t1*0.25/( v1*v2); {обчислення за
фор-лою часу другого пасажира}
writeln('Час
руху другого пасажира: ',t2, ' хвилин '); {
виведення результату}
if t2 –t1=0 then writeln('У пункт
А пасажири
прибувають одночасно');
if t2 –t1>0 then writeln('У
пункт А раніше прибуває перший пасажир на: ', t2 –t1, ' хвилин. ');
end.
Протестуйте
алгоритм
для таких значень {v1; v2; t1}: а)(90;
80; 30)=0,1
хв; б) (85;
85; 40)=0
хв; в)(60; 80; 20)=0,42 хвилини.
Завдання 2. Якщо через рівні
проміжки часу на депозитну картку вноситься деяка постійна сума К
грн(періодичні внески) під складні відсотки Р% , то заощадження обчислюється за
формулою
S=K*(1+p/100)*(exp(ln(1+p/100)*n)-1)/( (1+p/100)-1).
Скласти
і реалізувати алгоритм для вияснення cум
грошей на депозитній картці через декілька років.
program BABLO_2; {назва алгоритму}
var k,p,r, s : real; n, i: integer; {оголошення змінних величин: k,p,r,n, s – це дійсні
числа}
begin {
початок виконання алгоритму}
k:=1000+random(100); writeln( ' Якщо сума, що вноситься на
депозит k=', k); writeln;
p:=7+random(10); writeln( ' Якщо відсоткова ставка для цього
депозиту р=', p); writeln;
n:=1+random(10); writeln( ' Якщо кількість років існування
депозиту n=', n); writeln;
s:=1+p/100; u:=1; {обчислення початкового відсотку для
виконання алгоритму}
for i:=1 to n do begin {виконання циклу
з лічильником по рокам для обчислення грошей}
u:=u*(1+p/100); s:=1+p/100; s:=
K*s*(u-1)/(s-1);
writeln(
'Кількість грошей на депозиті через', i, ' років S=', s); writeln; end;
writeln('********'); end.
Протестуйте
алгоритм декілька разів і порівняйте результати. Самостійно змініть діапазон
вибору випадкових чисел в алгоритмі.
Завдання 3. Якщо протягом n років на
депозитну картку з сумою К грн
нараховується m разів щорічно
деякий постійний складний відсоток Р% , то заощадження обчислюється за формулою
S=K* exp(ln (1+p/(100*m))*n*m)
Скласти
і реалізувати алгоритм для
вияснення cум грошей на депозитній картці через декілька років.
program BABLO_3;
{назва алгоритму}
var k,s : real; u,m,n, i: integer; {оголошення змінних величин дійсні числа та цілі числа}
begin {
початок виконання алгоритму і введення випадкових значень}
k:=1000+random(1000); writeln( ' Якщо початкова сума на депозиті k=', k); writeln;
p:=7+random(10); writeln( ' Якщо відсоткова ставка для цього
депозиту р=', p); writeln;
n:=1+random(5); writeln( ' Якщо кількість років існування
депозиту n=', n); writeln;
m:=1+random(12); writeln( ' Якщо кількість нарахувань на депозит за рік m=', m); writeln;
s:=k; u:=n*m; {обчислення
чисел для виконання циклу в алгоритмі}
for i:=1 to u do begin {виконання циклу
з лічильником по нарахуванням для
обчислення грошей}
s:= K*exp(ln(1+p/(100*i)))*i*i;
writeln(
'Кількість грошей на депозиті після', i, ' –го нарахування S=', s); writeln; end; writeln('*****'); end.
Протестуйте
алгоритм декілька разів і порівняйте результати. Самостійно змініть діапазон
вибору випадкових чисел в алгоритмі.
Практична робота 18.
Алгоритми повторення різних типів
Завдання 1. Створити та
реалізувати алгоритм мовою програмування Pascal,
що містить двовимірний масив array [1 ..
n, 1 .. 10] , вкладені
цикли for i:=1 to n do з лічильниками по двом індексам і цикл while … do з
передумовою для
обчислення похибок обчислень в масиві.
program proced1;
const n=5; m=10; type mas = array [1 .. n, 1 .. m] of real; var a:
mas; e, eps: real; j,i: integer;
begin
for i:=1 to
n do begin for j:=1 to m do a[i,j]:=random(10); end;
eps:=0.001;
for i:=1 to n do begin for j:=1 to m do begin e:= 0.987*a[i,j]-(1-0.123*eps)*a[i,j];
while e > 0.0001 do
e:=e/10; end; end;
writeln('Це похибка обчислень', e); end.
Завдання 2. Створити та реалізувати алгоритм мовою
програмування Pascal, що містить двовимірний масив array [1 .. n, 1 .. 10] , вкладені
цикли for i:=1 to n do з лічильниками по двом індексам і цикл repeat …..
until … з післядумовою для обчислення похибок
обчислень в масиві.
program proced2;
const n=3; m=4; type mas = array [1 .. n, 1 .. 10] of real; var b: mas; e, eps: real; j,i: integer;
begin
for i:=1 to
n do begin for j:=1 to m do b[i,j]:=random(10); end;
eps:=0.001;
for i:=1 to n do begin for j:=1 to n do begin
repeat e:= a[i,j]-(1-eps)*a[i,j]; e:=e/10; until e > 0.01; end; end;
writeln('Це похибка обчислень', e); end.
Завдання 3. Створити та реалізувати алгоритм мовою
програмування Pascal, що містить процедуру, яка знаходить найбільше значення двох цілих чисел.
program proced3;
var x,y,m,n:
integer;
procedure
maxnumber(a,b: integer; var max: integer);
begin if a>b then max:=a else
max:=b; end;
begin
x:=random(100); writeln(' x=', x); y:=random(100); writeln(' y= ', y);
maxnumber(x,y,m); maxnumber(2, x+y, n);
writeln(' max=', m, ' summa n=', n);
end.
Завдання 4. Створити та
реалізувати алгоритм, що містить функцію,
яка знаходить найбільше значення двох цілих чисел.
program proced4;
var x,y,m,n:
integer;
function MaxNumber(a,b: integer): integer;
var max:
integer;
begin
if a>b
then max:=a else max:=b;
MaxNumber
:= max; end;
begin
x:=40-random(100); writeln(' x=', x); y:=50-random(100); writeln(' y= ', y);
m := MaxNumber(x,y); n := MaxNumber(2,x+y);
writeln('max=', m, ' summa=', n); end.
Практична робота 19.
Алгоритми табуляції поліномів на мові Pascal
Завдання 1. Скласти і
реалізувати алгоритм для
знаходження табулювання значень
квадратичної функції, нулів функції, що задана
рекурсивною формулою у=(а1х+а2)х+а3= а1х2+а2х+а3.
program Quadratfunction; {назва алгоритму
табуляції}
var a1, a2, a3, x, y, d: real; i, k: integer; {оголошення змінних величин: дійсні числа та цілі числа}
begin {початок виконання алгоритму і введення випадкових
коефіцієнтів квадратичної функції}
a1:=-(1+random(3)) *(-2+random(1)) *(-random(2)) + 1+random(3) ;
writeln( ' Якщо cтарший коефіцієнт квадратичної функції a1=', a1); writeln;
a2:=2+random(7) *(-1+random(3));
writeln(' Якщо
лінійний коефіцієнт квадратичної функції a2=', a2); writeln;
a3:= (4+random(10))*(-1)*(-1+random(3));
writeln(' Якщо
вільний коефіцієнт квадратичної функції:
y(0)=a3=', a3); writeln;
writeln(' Якщо cума коефіцієнтів
квадратичної функції: y(1)=a1+a2+a3=', a1+a2+a3);
writeln;
x:=-(1+random(20)); writeln(' Якщо початковий
аргумент квадратичної функції x=', x); writeln;
d:=1+random(3); writeln( ' Якщо величина
кроку табуляції квадратичної функції d=', d); writeln;
k:=5+random(8); writeln( ' Якщо кількість кроків табуляції k=', k); writeln;
for i:=1 to k do begin {виконання циклу з лічильником по kрокам для обчислення
значень функції}
x:=x+(i-1)*d; y:=(a1*x+a2)*x+a3; { виведення результатів табулювання на екран монітора}
writeln( ' номер
кроку табуляції i=', i, ' аргумент функції х=', x, ' значення
функції y=', y); writeln; end; writeln('********'); writeln( ' квадратична функція має
вигляд у=', a1, '*x*x+( ' , a2, ' )x+( ', a3, ' )'
);
d:=a2*a2-4*a1*a3;
if (d>0) or (d=0) then {обчислення дискримінанта
перевірка його знаку для квадратичної функції}
begin x:=0.5*(-a2-sqrt(d))/a1; y:=abs((a1*x+a2)*x+a3); {обчислення першого нуля квадратичної функції}
writeln( ' перший наближений
нуль квадратичної функції х1=', х, 'з абсолютною
похибкою ',y); writeln;
x:=0.5*(-a2+sqrt(d))/a1; y:=abs((a1*x+a2)*x+a3); {обчислення другого нуля квадратичної функції}
writeln( ' другий наближений нуль квадратичної функції х2=', x, 'з абсолютною похибкою ',y); writeln; end
else writeln( ' немає нулів квадратична
функція');
x:=0.5*(-a2)/a1;
y:=(a1*x+a2)*x+a3; {обчислення
координат вершини
параболи }
if (a1>0) then {оголошення мінімуму
квадратичної функції як координат вершини параболи}
writeln( ' наближений мінімум квадратичної функції якщо Хmin=', x, ' та Уmin= ',y)
else {оголошення максимуму
квадратичної функції як координат вершини параболи}
writeln( '
наближений максимум квадратичної функції
якщо Хmах=', x, ' та Уmах= ',y); writeln;
writeln( ' немає перегинів випуклих ділянок
квадратична функція');
end. {закінчення алгоритму}
Протестуйте
алгоритм чотири рази та порівняйте результати
табуляції і виберіть той варіант, при якому можна знайти найточніше
наближення нулів квадратичної функції,
тобто випадок y:=(a1*x+a2)*x+a3=0.
Завдання 2. Скласти і
реалізувати алгоритм для
знаходження табулювання значень
кубічної функції, що задана рекурсивною формулою у=((а1х+а2)х+а3)х+a4== а1х3+
а2х2+а3х+а4.
program Cubfunction; {назва алгоритму
табуляції}
var a1, a2, a3, a4, x, y, d: real; i, k: integer; {оголошення змінних величин: дійсні числа та цілі числа}
begin { початок виконання алгоритму і введення випадкових
коефіцієнтів кубічної функції}
a1:=1+random(3); writeln( ' Якщо cтарший коефіцієнт кубічної функції a1=', a1); writeln;
a2:=2-random(7); writeln(' Якщо квадратичний коефіцієнт
кубічної функції a2=', a2); writeln;
a3:=-(4-random(10)); writeln(' Якщо лінійний коефіцієнт кубічної
функції a3=', a3); writeln;
a4:=-(3-random(10)); writeln(' Якщо вільний коефіцієнт кубічної
функції a4=', a4); writeln;
x:=-(1+random(20)); writeln(' Якщо початковий аргумент кубічної
функції x=', x); writeln;
d:=1+random(3); writeln( ' Якщо величина кроку
табуляції кубічної функції d=', d); writeln;
k:=15+random(5); writeln( ' Якщо кількість кроків табуляції k=', k); writeln;
for i:=1 to k do begin {виконання циклу з лічильником по kрокам для обчислення
значень функції}
x:=x+(i-1)*d; y:=((a1*x+a2)*x+a3)+a4; { виведення результатів табулювання на екран монітора}
writeln( ' номер
кроку табуляції i=', i, ' аргумент функції х=', x, ' значення
функції y=', y); writeln; end; writeln('********'); end. {закінчення алгоритму}
Протестуйте
алгоритм чотири рази та порівняйте результати
табуляції і виберіть той варіант, при якому можна знайти найточніше
наближення нулів кубічної функції,
тобто випадок ((a1*x+a2)*x+a3)*x+a4=0.
Практична робота 20.
Табулювання кускових функції
Завдання 1. Створити та
реалізувати мовою Паскаль алгоритм , який обчислює значення функції при
заданому аргументі за такими формулами:
Алгоритм
використовує послідні розгалуження в
повній формі.
program tabuljacia1;
var f,x,d: real; n, i: integer; {оголошуються
змінні типу: дійсні
та цілі}
begin writeln(' вводиться початкове
випадкове число, яке є аргументом функції ');
x:=-(10+random(10)); write(x);
writeln; n:= 10+random(20); d:= 1+random(5);
write(' якщо кроків n =', n); writeln;
write(' якщо довжина
кроку d =', d); writeln;
for i:=1 to n do begin {виконується
цикл з лічильником для обчислення функції }
if x<-10 then f:=x*x else {розгалуження
для перевірки аргументу функції }
if x<10 then f:=x else f:=-x*x; x:=x+d; {
розгалуження та обчислення}
writeln('результат
обчислення f(', x, ')=', f, 'якщо номер кроку i =', i); writeln; end; end.
Протестуйте
цей алгоритм декілька разів і порівняйте результати обчислень на кожному кроці.
Спробуйте самостійно змінити в алгоритмі діапазон випадкових чисел.
Завдання 2. Створити та реалізувати мовою
Паскаль алгоритм, який обчислює значення кускової функції.
program tabuljacia2;
var p, n, i: integer; {оголошуються
змінні типу: цілі}
begin writeln(' вводиться початкове
випадкове число, яке є аргументом функції ');
p:=-(10+random(10)); write(p);
writeln; n:= 10+random(20);
write(' якщо кроків n =', n); writeln;
for i:=1 to n do begin {виконується цикл
з лічильником для обчислення
функції }
if (p = 0) or (p = 1) then p:=0 else {розгалуження для перевірки аргументу функції }
if (p mod 2 = 0) then p:=p div 2 else p:=3*p+1;
{
розгалуження та обчислення}
writeln('результат
обчислення
p(', i, ')=', p, 'якщо номер
кроку i =', i); writeln; end; end.
Протестуйте цей
алгоритм
декілька разів і порівняйте результати обчислень на кожному кроці. Спробуйте
самостійно змінити в алгоритмі діапазон випадкових чисел.
Завдання 3. Створити та реалізувати мовою
Паскаль алгоритм, який обчислює значення функції.
program tabuljacia3;
var g, n, i: integer;
{оголошуються
змінні типу: цілі}
begin writeln(' вводиться початкове
випадкове число, яке є аргументом функції ');
g:=-(10+random(10)); write(g);
writeln; n:= 10+random(20);
write(' якщо кроків n =', n); writeln;
for i:=1 to n do begin {виконується цикл
з лічильником для обчислення
функції }
if (g mod 3 = 0) then g:=3*g+1 else {розгалуження перевірки аргументу функції }
if (g mod 3 = 1) then g:=g-2 div 2 else g:=3*g+2; {розгалуження та обчислення}
writeln('результат
обчислення g(', i, ')=', g, 'якщо номер кроку i =', i); writeln; end; end.
Протестуйте цей
алгоритм декілька разів і порівняйте результати обчислень на кожному кроці.
Спробуйте самостійно змінити в алгоритмі діапазон випадкових чисел.
Практична робота 21.
Алгоритми інтерполяції функції
Завдання 1. Створити
алгоритм який за трьома відомими точками в прямокутній системі координат генерує формулу
квадратичної функції використовуючи розв’язання системи
3-х рівнянь з трьома невідомими методом Крамера. Ця задача називається
«інтерполяція квадратичними поліномами» або знаходження «квадратичного тренду».
Розв’язання. Випадковим чином задаються три точки деякої
статистики: (х1; у1), (х2; у2), (х3;
у3). Вважається, що ці три точки належать деякій параболі, що записується формулою вигляду: у=ах2+bx+c.
Підставляємо кожну точку у формулу і отримуємо систему трьох рівнянь з
трьома невідомими а, b, c.
{|
aх1*х1 + bх1 + c * 1 = y1 | }
{|
aх2*х2 + bх2 + c * 1 = y2 }
{|
aх3*х3 + bх3 + c * 1 = y1 }
Розв’язуємо
систему відносно а, b, c за допомогою метода визначників (метод
Крамера).
Program Interpoljacia;
var a1, a2, a3,
b1, b2, b3, c1, c2, c3, d1, d2, d3, x, y, z, e, ex, ey, ez, x1, x2, x3, y1, y2, y3: real;
begin
x1:=-(1+random(3)) *(-2+random(1)) *(-random(2)) + 1+random(3) ;
y1:=-(1+random(3)) *(-2+random(1)) *(-random(2)) + 2+random(3) ;
writeln( ' Якщо
перша точка, що належить квадратичній функції х1=', x1, 'y1=', y1); writeln;
x2:=-(1+random(3)) *(-2+random(1)) *(-random(2)) + 1+random(3) ;
y2:=-(1+random(3)) *(-2+random(1)) *(-random(2)) + 3+random(3) ;
writeln( ' Якщо друга точка, що належить квадратичній функції х2=', x2, 'y2=', y2); writeln;
x3:=-(1+random(3)) *(-2+random(1)) *(-random(2)) + 1+random(3) ;
y3:=-(1+random(3)) *(-2+random(1)) *(-random(2)) + 4+random(3) ;
writeln( ' Якщо
третя точка, що належить квадратичній функції х3=', x3, 'y3=', y3); writeln;
a1:= x1*x1; a2:= x2*x2; a3:= x3*x3;
b1:= x1; b2:= x2; b3:= x3;
c1:=1; c2:=1; c3:=1;
d1:=y1; d2:=y2; d3:=y3;
e:= (a1 * b2 * c3 + b1 * c2 * a3 + c1 * a2 *
b3-a3 * b2 * c1-b3 * c2 * a1-c3 * a2 * b1);
ex:=(d1 * b2 * c3 + b1 * c2 * d3 + c1 * d2 *
b3-d3 * b2 * c1-b3 * c2 * d1-c3 * d2 * b1);
ey:=(a1 * d2 * c3 + d1 * c2 * a3 + c1 * a2 *
d3-a3 * d2 * c1-d3 * c2 * a1-c3 * a2 * d1);
ez:=(a1 * b2 * d3 + b1 * d2 * a3 + d1 * a2 *
b3-a3 * b2 * d1-b3 * d2 * a1-d3 * a2 * b1);
if (e=0) and ((ex=0) or (ey=0) or (ez=0)) then
writeln ( 'безліч рішень')
else if (e <> 0) and ((ex = 0) or (ey =
0) or (ez = 0)) then
writeln ( 'немає рішень')
else begin
x:=ex/e;
y:=ey/e; z:=ez/e;
writeln ( 'Головний
визначник е =', e);writeln ( 'a =', x); writeln ( 'b =', y); writeln
( 'c =', z);
writeln( ' Шукана квадратична функція у=', x, '*x*x+( ' , y, ' )x+( ', z, ' ) '); end; end.
Протестуйте
правильність виконання алгоритму.
Практична робота 22.
Алгоритми розгалуження та
вибору.
Завдання 1. Створити
алгоритм повного розгалуження if ….. then … else
program pryklad_01;
var a,b,c,y: real;
begin
write(‘Vvedit a’);
readln(a);
write(’Vvedit b’);
readln(b);
write(‘Vvedit c’);
readln(c);
if a>=15 then
begin
if a<=20 then begin writeln( ‘a v
diapazoni 15-20 ‘);
y:=10-(exp(abs(a-b)))*(exp(a*(ln(sqr(sin(c)/cos(c)+1))));
end
else writeln begin ( ‘a >20 ‘ );
y:=20-(exp(abs(a-b)))*(exp(a*(ln(sqr(sin(c)/cos(c)+1))));
end;
end
else writeln(‘a<15’);
y:=30-(exp(abs(a-b)))*(exp(a*(ln(sqr(sin(c)/cos(c)+1))));
writeln(‘y=’,y);
readln;
end.
Завдання 2. Створити алгоритм повного вибору case N of …. else
Program zrazok_02;
var Num: integer;
begin
write('Введіть число:');
readln(Num);
case Num of
0: writeln('Нуль');
1: writeln('Один');
2: writeln('Два' );
3: writeln('Три ');
4: writeln('Чотири') ;
5:writeln('П’ять');
6:writeln('Шість');
7:writeln('Сім');
8:writeln('Вісім');
9:writeln('Дев’ять');
else writeln('Число не є цифрою'); end;
readln; end.
Завдання 3. Створити
алгоритм повного розгалуження if ….. then … else
program Bilshe03;
var a,b:integer;
begin
writeln('Vvedit
a:'); readln(a);
writeln('Vvedit
b:'); readln(b);
if
a>b then writeln('a=',a) else
if
a<b then writeln('b=',b) else writeln('a=b'); end.
Практична робота 23.
Алгоритми розгалуження геометричного змісту
Завдання 1. Cтворити та реалізувати мовою
програмування Pascal,
що визначає в скількох точках перетинаються два кола за шістьма чисел x1, y1,
r1, x2, y2, r2, де x1, y1, x2, y2, - координати центрів кіл, r1, r2 – їх
радіуси. Усі числа - дійсні, не перевищують 1000000000 за модулем, та задані не
більш ніж із 3 знаками після коми.
Program Circus01;
var
x1,y1,r1,x2,y2,r2, d:real;
begin
readln (x1, y1, r1, x2, y2, r2); d:=sqr(x1-x2)+sqr(y1-y2);
if
(x1=x2) and (y1=y2) and (r1=r2)
then writeln (-1)
else
if (sqr(r1+r2)=d)
or (sqr(r1-r2)=d) then writeln (1)
else
if (sqr(r1+r2)<d)
or (sqr(r1-r2)>d) then writeln (0)
else
writeln (2); end.
Завдання 2. Cтворити та реалізувати мовою програмування Pascal, що визначає
за розмірами прямокутних дверей a, b та розмірами шафи,
що має форму прямокутного паралелепіпеда x, y, z, x, y, z < 10
чи можна пронести шафу у двері, якщо проносити її дозволяється так, щоб кожне
ребро шафи було паралельне або перпендикулярне кожній стороні дверей.
program SHАFA2;
var a, b, c, x, y, z:real;
begin readln (a, b, x, y, z);
if ((x<a) and
(y<b)) or ((x<b) and (y<a)) or ((z<a) and (y<b)) or
((x<a) and (z<b))
or ((y<a) and (z<b)) or ((z<a) and (x<b))
then writeln (1) else writeln (0); end.
Завдання 3. Cтворити
та реалізувати алгоритм мовою
програмування Pascal.
Гена збирається на туристичний зліт учнів своєї школи. У
своєму класі його було призначено відповідальним за палатки. У себе вдома він
знайшов 3 палатки: перша з них важить a1 кілограм і вміщує b1 чоловік, друга
важить a2 кілограм і вміщує b2 чоловік, третя важить a3 кілограм і вміщує b3
чоловік.
У
класі Гени k чоловік. Виясніть, чи може він вибрати палатки так, щоб у
них змогли поміститись усі. При цьому враховуйте, що вибрані палатки повинні
разом важити не більше w кілограм.
Вхідні дані: два цілих числа k та w (1 ≤ k
≤ 15, 1 ≤ w ≤ 30). Другий рядок містить шість
цілих чисел: a1, b1, a2, b2, a3, b3 (1≤ a1, a2, a3 ≤ 10, 1 ≤
b1, b2, b3 ≤ 15).
program KLASS4;
var
k,w,a1,a2,a3,b1,b2,b3: integer;
n1, n2, n3,
n4, m1, m2, m3, m4: integer;
begin
read (k,w);
readln (a1,b1,a2,b2,a3,b3);
m1 := a1 + a2;
n1 := b1 + b2; m2 := a1 + a3; n2 := b1 + b3;
m3 := a3 + a2;
n3 := b3 + b2; m4 := a1 + a2 + a3; n4 := b1 + b2 + b3;
if
( (a1<=w) and (b1>=k) ) or
( (a2<=w) and (b2>=k) ) or
( (a3<=w) and (b3>=k) ) or (
(m1<=w) and (n1>=k) ) or
( (m2<=w) and (n2>=k) ) or (
(m3<=w) and (n3>=k) ) or
( (m4<=w) and (n4>=k) ) then writeln('YES') else writeln('NO');
end.
Завдання 4. Cтворити
та реалізувати алгоритм мовою програмування Pascal.
У різдвяний вечір на підвіконні стояли три квіточки, зліва
направо: герань, крокус та фіалка. Кожен ранок Маша витирала підвіконня і
міняла місцями квіточку, що стояла праворуч,з центральною квіточкою. А Таня
кожен вечір поливала квіточки і міняла місцями ліву та центральну квіточки.
Потрібно визначити порядок квітів вночі після того, як пройде k днів.
Вивести m рядків, що містять по три латинських літери:
"G", "C" и "V" (великі літери
без пропусків), які описують порядок квітів на вікні по закінченню k днів
(зліва направо). Позначення: G – герань, C – крокус, V –
фіалка.
program E4;
var m, k, i: integer;
begin readln(m);
for i := 1 to m do begin readln(k);
if (k mod 3 = 1) then writeln('VGC');
if (k mod 3 = 2) then writeln('CVG');
if (k mod 3 = 0) then writeln('GCV');
end; end.