Слова, зміст яких є синонімічними
з точки зору мови програмування Pascal:
рядок чисел=лінійний масив=вектор з координатами
Практична робота 107.
Алгоритми дій з масивами мовою Pascal
program Vector1; {Алгоритм підрахунків координат лінійної комбінації трьох векторів(напрямлених відрізків)
або дії
з елементами числового масиву}
const n=2; var
a, b,c,d: array [1..n] of real; i: integer;
sk1, sk4, sk2, sk3: real;
begin writeln ( 'Вводяться ', n, '-i випадкові коорд-ти для трьох векторів:');
for i:=1 to n do begin
a[i]:=-40*random(4+i); write(' а[', i, ']=: ', a[i]); writeln(' '); writeln;
b[i]:=50*random(5+i); write(' b[', i, ']=: ', b[i]); writeln(' '); writeln;
c[i]:=-60*random(6+i); write(' c[', i, ']=: ', c[i]); writeln(' '); writeln; end;
writeln(' *** ');
writeln; writeln ( 'Це ', n, ' –i координати нового вектора d=-5*а+8*b-4*c:');
d[1]:=0; d[2]:=0; for i:=1 to n do begin d[i]:=-5*a[i]+8*b[i]-4*c[i];
write('d[', i, ']= ', d[i]); write(' '); end; writeln('***');
writeln( 'Це модулі(або довжини) векторів a, b,d,c:');
sk1:=sqrt(a[1]*a[1]+a[2]*a[2]); writeln('довжина |a| = ', sk1);
sk2:=sqrt(b[1]*b[1]+b[2]*b[2]); writeln(' довжина |b| = ', sk2);
sk4:=sqrt(d[1]*d[1]+d[2]*d[2]); writeln(' довжина |d| = ', sk4);
sk3:=sqrt(c[1]*c[1]+c[2]*c[2]); writeln(' довжина |с| = ', sk3); writeln(' *** ');
writeln;
writeln
( 'Це три скалярні добутки для таких пар векторів: ab, ас, сb, ad:');
sk1:=a[1]*b[1]+a[2]*b[2]; writeln(' ab = ', sk1); writeln(' ');
sk2:=a[1]*c[1]+a[2]*c[2]; writeln(' ас = ', sk2); writeln(' ');
sk3:=b[1]*c[1]+b[2]*c[2]; writeln(' bс = ', sk3); writeln(' ');
sk4:=d[1]*a[1]+d[2]*a[2]; writeln(' ad = ', sk4); writeln(' '); writeln(' **** ');
writeln;
writeln ( 'Це
косинус кута між такими парами
векторів a та b:');
sk1:=sk1/((a[1]*a[1]+a[2]*a[2])*(b[1]*b[1]+b[2]*b[2]));
writeln(' cos(a,b)=
', 10000*sk1);
if sk1>0 then writeln('кут(a,b) - гострий');
if sk1=0 then writeln('кут(a,b) - прямий');
if sk1<0 then writeln('кут(a,b) - тупий');
writeln ( 'Це
косинус кута між такими парами векторів
с та b:');
sk3:=sk3/((c[1]*c[1]+c[2]*c[2])*(b[1]*b[1]+b[2]*b[2]));
writeln(' cos(c,b)=
', 10000*sk3);
if sk3>0 then writeln('кут(с,b) - гострий');
if sk3=0 then writeln('кут(с,b) - прямий');
if sk3<0 then writeln('кут(с,b) - тупий');
writeln ( 'Це
косинус кута між такими парами векторів
а i с:');
sk2:=sk2/((a[1]*a[1]+a[2]*a[2])*(c[1]*c[1]+c[2]*c[2]));
writeln(' cos(a,c)=
', 10000*sk2);
if sk2>0 then writeln('кут(a,с) - гострий');
if sk2=0 then writeln('кут(a,с) - прямий');
if sk2<0 then writeln('кут(a,с) - тупий');
writeln(' **** ');
writeln; end.
*****************************************
********************************************
program SORT10;{Швидке сортування лінійного масиву}
var a: array [1..10] of integer; {Масив елементів}
n: integer;
procedure QuickSort (L, R: Integer); {Швидке сортування масиву A []}
var i, j, x, y: integer;
begin
i:=l; j:=r;
x:=a[(l+r) div 2];
repeat
while (A[i]<x) do i:=i+1;;
while (x<A[j]) do j:=j-1;
if (i<=j) then
begin
y:=A[i]; a[i]:=a[j]; a[j]:=y;
i:=i+1; j:=j-1;
end;
until(i>j);
if (l<j) then QuickSort(l,j);
if (i<r) then QuickSort(i,r);
end;
begin
writeln('введіть 10 елементів масиву:');
for n:=1 to 10 do {readln(a [n]);} a[n]:=random(200);
writeln('Початкове розташування елементів в масиві A'); writeln;
for n:=1 to 10 do write('a[',n, ']:=', a[n],' '); writeln;
QuickSort(1, 10); {На вході: ліва і права межа сортування}
writeln('вигляд масиву А після сортування:'); writeln;
for n:=1 to 10 do write('a[',n, ']:=', a[n],' ');
end.
Практична робота 108.
Алгоритми з масивами мовою Pascal
program Vector2; {Алгоритм підрахунків координат лінійних комбінацій
двох векторів(напрямлених відрізків) або дії з
елементами числового масиву}
const n=2; var
t, p,w,v,h: array [1..n] of real; s, i: integer;
s1, s4, s2, s3: real;
begin writeln ( 'Вводяться ', n, '-i випадкові коорд-ти для трьох векторів:');
for i:=1 to n do begin
t[i]:=-90*random(11); write('
t[', i, ']=: ', t[i]); writeln(' '); writeln;
p[i]:=30*random(10); write('
p[', i, ']=: ', p[i]); writeln(' '); writeln;
w[i]:=-70*random(8); write(' w[', i, ']=: ', w[i]); writeln(' '); writeln; end;
writeln(' *** '); writeln;
writeln ( 'Це ', n, ' –i координати 1-ого нового вектора h=2.6t/9+3.85p/7-5.25w/17:');
h[1]:=0; h[2]:=0; for i:=1 to n do begin h[i]:=2.6*t[i]/9+3.85*p[i]/7-5.25*w[i]/17;
write('h[', i, ']= ', h[i]); write(' '); end; writeln('***');
writeln(' *** '); writeln;
writeln ( 'Це ', n, ' –i координати 2-ого нового вектора v=(t+p-w)(2.8h/1.5+6.5w/6.9):');
v[1]:=0; v[2]:=0; for i:=1 to n do begin v[i]:=(t[i]+p[i]-w[i])(2.8*h[i]/1.5+6.5*w[i]/6.9);
write('v[', i, ']= ', v[i]); write(' '); end; writeln('***');
writeln( 'Це модулі(або довжини) векторів t, p,w,h:');
s1:=sqrt(t[1]*t[1]+t[2]*t[2]); writeln('довжина |t| = ', s1);
s2:=sqrt(p[1]*p[1]+p[2]*p[2]); writeln(' довжина |p| = ', s2);
s4:=sqrt(w[1]*w[1]+w[2]*w[2]); writeln(' довжина |w| = ', s4);
s3:=sqrt(h[1]*h[1]+h[2]*h[2]); writeln(' довжина |h| = ', s3); writeln(' *** ');
writeln;
writeln
( 'Це три скалярні добутки для таких пар векторів: tp, tw, wp, hv:');
s1:=t[1]*p[1]+t[2]*p[2]; writeln(' tp = ', s1); writeln(' ');
s2:=t[1]*w[1]+t[2]*w[2]; writeln(' tw = ', s2); writeln(' ');
s3:=w[1]*p[1]+w[2]*p[2]; writeln(' wp = ', s3); writeln(' ');
s4:=h[1]*v[1]+h[2]*v[2]; writeln(' hv = ', s4); writeln(' '); writeln(' **** ');
writeln;
writeln ( 'Це
косинус кута між такими парами
векторів t та p:');
s1:=s1/((t[1]*t[1]+t[2]*t[2])*(p[1]*p[1]+p[2]*p[2]));
writeln(' cos(t,p)=
', 10000*s1);
if s1>0 then writeln('кут(t,p) - гострий'); if s1=0 then writeln('кут(t,p) - прямий');
if s1<0 then writeln('кут(t,p) - тупий');
writeln ( 'Це
косинус кута між такими парами векторів w та p:');
s3:=s3/((w[1]*w[1]+w[2]*w[2])*(p[1]*p[1]+p[2]*p[2]));
writeln(' cos(w,p)=
', 10000*s3);
if s3>0 then writeln('кут(w,p) - гострий'); if s3=0 then writeln('кут(w,p) - прямий');
if s3<0 then writeln('кут(w,p) - тупий');
writeln ( 'Це
косинус кута між такими парами векторів h i v:');
s4:=s4/((h[1]*h[1]+h[2]*h[2])*(v[1]*v[1]+v[2]*v[2]));
writeln(' cos(a,c)=
', 10000*s4);
if s4>0 then writeln('кут(h,v) - гострий'); if s4=0 then writeln('кут(h,v) - прямий');
if s4<0 then writeln('кут(h,v) - тупий');
writeln(' **** ');
writeln; end.
***************************************
**************************************************
Практична
робота 109.
Нелінійні алгоритми
Завдання 1.
Є масив, що складається з N чисел. За один крок дозволяється зменшити на 1
кілька (можливо один) підряд рівних елементів. Мета – зробити всі елементи
рівними нулю. За яку мінімальну кількість кроків це може бути зроблено?
Формат введення-виведення: Програма зчитує з клавіатури
(стандартного пристрою введення) натуральне число N (1≤N≤2∙105) –
кількість чисел у масиві, а з наступного рядка N невід’ємних цілих чисел,
елементів масиву, кожне з яких не перевищує 2∙109.
Програма виводить на екран (стандартний пристрій виведення) єдине число –
шукану кількість кроків.
PROGRAm
Zeroing1;
type arr=
Array[1..200005] of longint;
var A: arr; i, k, n: longint;
begin read(n); for
i:=2 to n+1 do read(a[i]);
writeln(' **** n=
', n); a[1]:=0; k:=0;
for
i:=1 to n do begin writeln('*** a[',i,']=',
a[i]); writeln(' a[',i+1,']=', a[i+1]);
if a[i+1]>a[i] then k:=k+a[i+1]-a[i]; writeln(' k=', k); end;
write(' Найменша кількість кроків
для обнулення елементів масиву
k=', k); end.
Дані для тестування
алгоритму: А)Введення: 3; 3; 4; 1; Виведення результату : 4.
Б) Введення : 3; 3; 1;
4; Виведення: 6. В)
Введення : 5; 4; 2; 5; 4; 4. Виведення: 7.
Завдання 2. Є коло радіуса R
з координатами центра (х,у) і пряма, що задана координатами двох своїх
точок. Якої довжини відрізок прямої лежить всередині кола?
Вхідні дані. Задано рядок з
7-ми чисел: радіус кола, координати (х, у) центра і координати 2-х точок прямої. Всі числа
цілі, за абсолютним значенням не перевищують 10000.
Вихідні дані. Вивести шкану
довжину з точністю до 5 цифр після коми. Якщо коло і пряма не перетинаються,
вивести -1, якщо дотикаються - вивести 0.
Розв'язання
Взаємне розташування кола і прямої має декілька випадків.
Знаходимо відстань L від центру кола до прямої, яка задана двома
точками. Якщо відстань більша за радіус, то пряма і коло не перетинаються, коли
ж рівні, то дотикаються, а інакше – слід знайти довжину хорди, яка сполучає дві
точки перетину прямої і кола. Враховуємо, що відстань обчислена наближено. Для
знаходження точок перетину прямої і кола – використаємо формулу.
PROGRAm CIRCUS2;
var r,x0,y0,x1,y1,x2,y2: integer;
a,b,c,aa,bb,cc,x3,y3,x4,y4,L,d,d1: real;
begin
readln(r, x0, y0, x1, y1, x2, y2);
L:=abs((x2-x1)*(y0-y1)-(y2-y1)*(x0-x1)
)/sqrt(sqr(x2-x1)+sqr(y2-y1));
if (L-r)>0.00001
then writeln(-1) else if abs(L-r)<=0.00000005
then writeln(0)
else begin a:=y2-y1; b:=x1-x2; c:=x1*(y1-y2)+y1*(x2-x1);
if abs(b)<=0.000000001 then begin y3:=-sqrt(r*r-sqr(c/a+x0))+y0;
y4:=sqrt(r*r-sqr(c/a+x0))+y0; x3:=-c/a; x4:=-c/a;
d:=sqrt(sqr(x4-x3)+sqr(y4-y3)); writeln(d:0:5);
end else begin aa:=a*a/(b*b)+1; bb:=(y0+c/b)*a/b-x0;
cc:=x0*x0+sqr(y0+c/b)-r*r;
d1:=bb*bb-aa*cc; x3:=(-bb-sqrt(d1))/aa x4:=(-bb+sqrt(d1))/aa;
y3:=(-a*x3-c)/b;
y4:=(-a*x4-c)/b; d:=sqrt(sqr(x4-x3)+sqr(y4-y3)); writeln(d:0:5);
end; end; end.
Дані для тестування алгоритму:
А)Введення: 5 0 0 4 1 4
2 Виведення результату : 6.
Практична
робота 110.
Нелінійні алгоритми геометричного змісту
Завдання 1. Cтворити та реалізувати алгоритм мовою Pascal, що визначає за відомими довжинами трьох сторін трикутника чи
має він внутрішній прямий кут.
PROGRAm LINEAR1;
var a,b,c,k: integer;
begin readln(a, b, c);
while
(a<>0)and(b<>0)and(c<>0) do begin if
c<a then begin
k:=c; c:=a; a:=k;
if c<b then
begin k:=c; c:=b; b:=k; end; end; if
c<b then begin k:=c; c:=b; b:=k;
if c<a then
begin k:=c; c:=a; a:=k; end; end; if (a*a+b*b=c*c) then writeln(' yes')
else if
(a*a+b*b<>c*c) then writeln('nou'); writeln(' ', a, ' ', b, ' ', c); end;
end.
Дані для тестування алгоритму:
А)Введення: 5 4 3 Виведення результату : yes.
Б)Введення: 5 12 13 Виведення
результату : yes.
В)Введення: 25 24 7 Виведення
результату : yes.
Г)Введення: 5 4 6 Виведення
результату : nou.
Завдання 2. Cтворити та реалізувати алгоритм мовою Pascal, що визначає за
відомими довжинами a, b,
c, d чи можна у прямокутник зі сторонами a, b цілком
помістити прямокутник зі сторонами c, d.
Program fiercutnyk2;
const eps=0.000001; var a,b,c,d,hk,wk,hl,wl,ab,cd,bc,ad,af,ge,ga,ae,ac,cf,
bae, da, baf, bac, caf, cab, fac:
real; s:string;
begin readln(a, b, c, d);
if a<b then begin wk:=b; hk:=a;
end else begin wk:=a; hk:=b;
end;
if c<d then begin wl:=d; hl:=c;
end else begin
wl:=c; hl:=d; end;
if hl>hk then s:='NO' else
begin if wk>=wl then s:='YES' else begin
ab:=wl; cd:=wl; bc:=hl; ad:=hl; af:=hk;
ac:=sqrt(wl*wl+hl*hl);
cf:=sqrt(ac*ac-hk*hk); cab:=arctan(bc/ab); fac:=arctan(cf/af);
bae:=3.1415926/2-cab-fac; ge:=ad*sin(bae)+ab*cos(bae);
if
(wk-ge)>=eps then s:='YES' else s:='NO';
end; end; writeln(s); end.
Дані для тестування алгоритму:
А)Введення: 5 4 1 1 Виведення
результату : yes.
Б)Введення: 5 8
1 3 Виведення
результату : yes.
В)Введення: 25 24 3 5 Виведення результату : yes.
Г)Введення: 5 4 6 8
Виведення результату : nou.
Завдання 3. Cтворити та реалізувати алгоритм мовою Pascal, що визначає координати
вершини правильного трикутника An
Program
Tryangul;
var an, a1, d, n, x, y: real; begin readln(n); a1:=1; d:=2; an:=a1+d*(n-1);
x:=(a1+an)*n/2-0.5-an/2; y:=sqrt(3)*an/2; writeln(x:0:3,'
',y:0:3); end.
Дані для тестування алгоритму:
N= 20; N= 25;
N= 50; n=76
***************************************************
Практична
робота 111.
Обчислювальні
алгоритми на масивах.
Завдання 1. Створити та реалізувати алгоритм мовою Pascal, який підносить до квадрату парні остачі усіх чисел в одномірному масиві(рядок
чисел) при діленні на 7 і підносить до
кубу непарні остачі (mod 7) та
виводить результати цих дій у новий масив. І до того ж знаходить суму усіх цих остач. При цьому у початковому масиві числа задаються алгоритмом, як випадкові 7-цифрові
цілі від’ємні числа.
program MOD1; {Підрахунок і дії з остачами
для усіх елементів числового масиву}
const n=2; var
a, b: array [1..n] of integer; s, i:
integer;
begin writeln ( 'Виводиться ', n, ' випадкових
елементів масиву A:');
for i:=1 to n do begin a[i]:=-1000000-random(9000000); write('
а[', i, ']=: ', a[i]); write(' '); end; writeln; writeln
( 'Виводиться ', n, ' елементів масиву остач:');
s:=0; for i:=1
to n do begin b[i]:=a[i] mod 7; s:=s+b[i]; write('b[', i, ']= ', b[i]); write(' '); end; writeln; writeln('Сума усіх остач елементів
масиву =', s); writeln('***');
for i:=1 to n do begin if b[i] mod 2=0 then b[i]:= b[i]* b[i] else b[i]:= b[i]* b[i]* b[i];
write('c[', i, ']= ', b[i]); write(' '); end; writeln; writeln('************');end.
Протестувати алгоритм для 9-цифрових: а) const =9; б) const =8; в) const =25.
Завдання 2. Створити та реалізувати алгоритм мовою Pascal, який знаходить
парні числа і ділить ці числа на 2 та знаходить непарні числа і
подвоює їх в двовимірному масиві(таблиця чисел). При цьому у початковому
масиві алгоритмом задаються випадкові 8-цифрові цілі, як додатні так і від’ємні числа.
program ODD2; {Дії окремо з парними та окремо з непарними елементами масиву}
const n=3; var
a: array [1..n, 1..n] of
integer; j,
i, p: integer;
begin writeln ( 'Вводиться ', n*n, ' випадкових
елементів масиву');
for i:=1
to n do begin for j:=1 to n do begin a[i, j]:=-4000000+random(90000000);
write(' а[', i, ' ,' , j, ' ]= ', a[i, j]); write(' '); end; writeln(' '); end; writeln ('Масив:');
p:=0; for
i:=1 to n do begin for
j:=1
to n do begin
if (a[i, j] mod 2)=0 then
begin p:=p + 1; a[i, j]:=a[i, j] div 2 end else a[i, j]:=2*a[i, j];
write(' b[', i, ' ,' , j, ' ]=', a[i, j]); write(' '); end; writeln(' '); end; writeln;
writeln('Кількість
парних елементів масиву =', p);
writeln('Кількість
непарних елементів масиву =', n*n- p); writeln('*******');end.
Протестувати алгоритм для 4-цифрових: а) const =4; б) const =5; в) const =8.
Завдання 3. Створити та реалізувати алгоритм мовою Pascal, який виводить два масиви розміром nxn у вигляді рядків та стовпців і знаходить потроєну суму та потроєну різницю цих двох двовимірних масивів А та В(таблиці з різними числами, котрі збільшені в 3 рази), якщо у двох масивах
алгоритмом задаються випадкові 6-цифрові цілі
додатні числа.
program SUM3DELTA3; { Потроєна сума
або потроєна різниця масивів: С= 3А ±
3В}
const n=2; var
b, a: array [1..n, 1..n] of
integer; k,m, j, i: integer;
begin writeln ( 'Виводиться по ', n*n, ' випадкових
елементів масивів А та В');
for i:=1 to n do begin
for j:=1 to n do begin
a[i,j]:= 100000+random(90000) ;
write(' a[',i,';',j,']:= ' , a[i,j]); end; writeln('
'); end;
writeln(' Другий масив:');
for i:=1 to n do
begin for j:=1
to n do begin b[i,j]:= 100000+random(90000);
write(' b[',i,';',j,']:= ', b[i,j]); end; writeln('
'); end; writeln(' ');
writeln(' Відповідь.');
for i:=1 to n do begin for j:=1 to n do begin write(' 3a+3b[', i, ' ,' , j, ' ]= ', 3*( a[i,j]+ b[i,j] )); end; writeln(' '); end;
writeln(' '); writeln(' '); for k:=1 to n do begin for m:=1
to n do begin write(' 3a-3b[', k, ' ,' , m, ' ]= ', 3*( a[k,m]- b[k,m])); end; writeln(' '); end;
writeln(' '); writeln; end.
Протестувати алгоритм для 10-цифрових: а) const =3; б) const =4; в) const =9.
Практична
робота 112.
Обчислювальні
алгоритми на масивах.
Завдання 1. Створити та реалізувати алгоритм мовою Pascal, який знаходить потроєний квадрат суми усіх чисел в одномірному масиві, тобто С=
3(а1+а2+…+ар)2 і виводить
новий масив, в якому кожний і-ий елемент дорівнює числу: C -a і*aі , якщо у даному масиві А алгоритмом задаються
випадкові 7-цифрові цілі від’ємні числа.
program QUADRATSUMMA1; {Підрахунок потроєного
квадрату суми чисел масиву}
const n=2; var
a, b: array [1..n] of integer; c, s, i: integer;
begin writeln ( 'Вводиться ', n, ' випадкових
елементів масиву A:');
for i:=1 to n do begin a[i]:=-1000000-random(9000000);
write(' а[', i, ']=: ', a[i]); write(' '); end; writeln;
writeln ( 'Виводиться ', n, ' елементів нового
масиву різниць C -а І*аІ:');
s:=0; for i:=1
to n do s:=s+a[i]; C:=3*s*s;
for i:=1 to n do begin write('b[', i, ']= ', c- a[i]*a[i]); write(' '); end; writeln;
writeln('Потроєний
квадрат суми елементів масиву
А:', C); writeln('*****************');
end.
Протестувати алгоритм для 4-цифрових: а) const =7; б) const =6.
Завдання 2. Створити та реалізувати алгоритм мовою Pascal, який змінює усі числа на протилежні і обмінює числа місцями відносно
головної діагоналі в двовимірному
масиві, якщо у масиві алгоритмом задаються випадкові 8-цифрові цілі додатні і від’ємні
числа.
program TRANSPONUVAN2; {Обмін елементів масиву відносно головної діагоналі}
const n=3; var
a,b: array [1..n, 1..n] of integer; s, m, j, i, p: integer;
begin writeln ( 'Вводиться ', n*n, ' випадкових
елементів масиву');
for i:=1 to n do begin for j:=1
to n do begin
a[i, j]:=10000000+random(90000000)*(1- random(3));
write(' a[',i,';',j,']:= ' , a[i,j]); end; writeln('
'); end;
writeln(' Змінений масив:');
p:=0; for
i:=1 to n do begin for j:=1
to n do begin
b[i, j] :=- a[j,i]; write(' b[', i, ' ,' , j, ' ]=', b[i, j]); write(' '); end; writeln(' '); end; writeln;
writeln('*****************');end.
Протестувати алгоритм для 4-цифрових: а) const =2; б) const =4; в) const =5.
Завдання 3. Створити та реалізувати алгоритм мовою Pascal, який виводить два масиви розміром nxm у вигляді рядків та стовпців і знаходить поелементу різницю між потроєними числами першого рядка масиву та подвоєними числами другого рядка двовимірного масиву А(nxm) і результат записує у третій рядок, якщо у масиві А алгоритмом задаються випадкові 1-цифрові цілі додатні
числа.
program DELTA3; {Різниця
між потроєними числами першого рядка
масиву }
const n=3; const m=4;
var b, a: array [1..n, 1..m] of
integer; j, i: integer;
begin writeln ( 'Виведення ', n*m, ' випадкових
елементів масиву A: ');
for i:=1 to n do begin
for j:=1 to m do begin
a[i,j]:= 1+random(10) ;
write(' a[',i,';',j,']:= ' , a[i,j]);
end; writeln(' '); end;
writeln(' ');
writeln('Шуканий масив: ');
for i:=1 to m do
begin a[3, i]:= 3*a[1, i]- 2*a[2,
i]; end;
for i:=1 to n do
begin for j:=1 to m do
begin
write(' b[',i,';',j,']:= '
, a[i,j]); end; writeln(' ');
end; writeln(' ');
writeln; end.
Протестувати алгоритм для а) випадкових 10-цифрових: const n=6; const m=9;
б)
випадкових 7-цифрових: const n=7; const m=8; в) 4-цифрових:
const n=4; const m=5.
**********************************
*******************************************
Практична
робота 10.
Програмування циклів мовою 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}
Завдання 2.
Ліцей проводить вибори до Ради учнівського парламенту. Скількома способами
можна обрати Раду парламенту у
складі n осіб,
якщо серед кандидатів k ліцеїстів та m ліцеїсток. Скласти
і реалізувати алгоритм підрахунку усіх можливих способів створення Ради
парламенту мовою Pascal.
Вхідні дані: k, m, n.
Вивід: кількість!
Розв’язання.
Нехай кандидатів у Раду парламенту більше, ніж n.
У Раду парламента може зайти: або одна, або дві,…., або m ліцеїсток. Кількість способів обрати тільки ліцеїсток обчислюємо як комбінації: С1m =m(1 місце в раді парламенту); С2m =m(m-1)/2( для двох осіб) ; С3m
;… Сmm. (буває варіант Сnn =1, якщо n=m і в Раді
парламенту лише ліцеїстки і немає ліцеїстів). Аналогічно знаходимо кількість способів для ліцеїстів:
С1 k =k;
С2k =k(k-1)/2; ….., Сk-1k=k-1 (для k-1 ліцеїстів);Сkk=1 (для k ліцеїстів); С0k (для n-1 ліцеїсток і 1 ліцеїстa);
Таким чином, вибір усіх осіб у Раду парламенту за цих
умов можна здійснити сумою добутків:
р= С1kСn-1m + С2kСn-2m + … +
Сn-2mС2k + Сn-1mС1k
program
RadaParlament; const k1=15; m1=15; var
i,g,j, k, m, n, v1, d1, b1, v2, d2, b2, v3, d3, b3, p:integer;
a, b: array[1..k1*m1]
of integer; c: array[1..k1,1..m1] of integer;
begin
writeln('Введіть
число заявок від юнаків:
k<= ',k1); readln(k);
writeln('Введіть число
заявок від юнаків:
m<= ',m1); readln(m);
writeln('Введіть число місць у Раді парламенту n<= ', k1*m1); readln(n);
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; b[i]:= v2 div v1; v3:=b[i]+v3; end;
for i:=1 to m do begin d1:=i*d1;
d2:=(m-i+1)*d2;a[i]:= d2 div d1; d3:=a[i]+d3;
end;
for i:=1
to k do begin for j:=1 to m do begin c[i,j]:=a[j]*b[i];
writeln('j=',j,' i= ',i,' ',
'c[',i,';',j,']=',a[j]* b[i],'
'); end; end;
writeln(' Кількість способів створити Раду парламенту');
for i:=1 to k do begin
for j:=1 to m do begin if i+j=n then begin b3:=c[i,j]+b3;
writeln('j=',j,' i= ',i,' ',
'c[',i,';',j,']=',a[j]* b[i],' ');end; end; end;writeln('^^^^^^^^');
writeln('
b3= ',b3, ' способів отримати Раду парламенту.');writeln(' '); end.
Протестуйте
правильність роботи алгоритму: {k;m;n}={(5;5;10)=1; (2;2;2)=4;
(2;2;3)=4; (4;4;10)=0; (4;4;5)=56}
Практична робота 11.
Лінійні алгоритми мовою Pascal
Завдання 1. Скласти і
реалізувати алгоритм для знаходження
кількості днів, за яку виконають сумісну роботу два програміста, якщо такий
об’єм роботи перший програміст самостійно виконує за k
днів, а другий програміст самостійно виконує за m
днів.
program Robota_1; {назва
алгоритму}
var k,m: real; {оголошення змінних величин: k,m – це дійсні числа}
begin { початок виконання алгоритму}
writeln( 'k='); readln(k);
writeln( 'm='); readln(m); { введення
двох чисел}
k:=(k*m)/(k+m);
{ обчислення за формулою}
writeln('Разом виконають за ', k, ' днів');
{ виведення результату}
end.
{закінчення
алгоритму}
Протестуйте алгоритм для таких
значень k i m: а)12 i 8; б)3,2 i 2,4; в)6,5 i 2,6; г)42 і36; д)40,30 і 40,45; е)20 і 16; є)80 і 84.
Завдання 2.
Скласти і реалізувати алгоритм для
знаходження справжньої маси монети, якщо її зважували на бракованих терезах з
нерівними плечами, і при викладенні гирьок на першій чашечці, то маса монети на
протилежній чашечці становила k грам, а при викладанні гирьок на другій чашечці
терезів маса монети на протилежній чашечці становила m грам.
program Robota_2; {назва алгоритму}
var k,m: real; {оголошення змінних величин: k, m – це дійсні числа}
begin {
початок виконання алгоритму}
writeln(
'k='); readln(k); writeln( 'm='); readln(m); { введення двох чисел}
k:=sqrt(k*m);
{ обчислення за функцією квадратного
кореня}
writeln('Cправжня маса монети: ', k, ' грам'); { виведення
результату}
end.
{закінчення алгоритму}
Протестуйте алгоритм
для таких значень k i m: а)12 i 8; б)3,2 i 2,4; в)6,5 i 2,6; г)42 і36; д)40,30 і 40,45; е)20 і 16; є)80 і 84.
Завдання 3.
Є три гаманці: татчин, мамчин, сина. У татовому гаманці: k грн, у маминому гаманці m
грн. Бабуся запитала внучка, яку б ти хотів мати cуму грошей у своєму гаманці і запропонувала чотири
можливі варіанти: 1) середнє арифметичне грошей у двох гаманцях, що мають k+1000
грн і m-1000 грн відповідно; 2)
середнє геометричне грошей, що у двох гаманцях, котрі мають k-2000
грн і m+2000 грн відповідно; 3)середнє квадратичне грошей
у двох гаманцях, котрі мають k-3000 грн і m+3000 грн відповідно; 4)
середнє гармонійне грошей у двох гаманцях, котрі мають k+4000 грн і m-4000 грн
відповідно. Для внучка бабусі скласти і реалізувати алгоритм для впорядкування від найбільшого до найменшого названих
бабусею чотирьох грошових величин.
program Robota_3; {назва алгоритму}
var k,m,n: real; {оголошення змінних величин: k, m, n – це дійсні числа}
begin {
початок виконання алгоритму}
writeln(
'k='); readln(k); writeln( 'm='); readln(m); { введення двох чисел}
n:=sqrt(((k-3000)*(k-3000)+(m+3000)*(m+3000))*0.5); {обчислення
за фор-лою серед-ого квадр-ного}
writeln('Cереднє квадратичне: ', n, ' грн
');
{ виведення результату}
n:= ((k+1000)+(m-1000))*0.5; {обчислення за фор-лою серед-ого арифметичного}
writeln('Cереднє арифметичне: ', n, ' грн
');
{ виведення результату}
n:=sqrt((k-2000)*(m+2000)); {обчислення
за фор-лою серед-ого геометр-ного}
writeln('Cереднє геометричне: ', n, ' грн
');
{ виведення результату}
n:=2*((k+4000)*(m-4000))/ ((k+4000)+(m-4000)) ;
{обчислення за фор-лою
серед-ого гарм-ного}
writeln('Cереднє гармонійне: ', n, ' грн
');
{ виведення результату}
end.
{закінчення алгоритму}
Протестуйте алгоритм
для таких значень k i m: а)10000 i 80000; б)300000 i 400000; в)600500 i 900600.
****************
**********************
Практична робота 12.
Алгоритми табуляції
мовою Pascal
Завдання 1. Скласти і
реалізувати алгоритм для знаходження табулювання значень квадратичної функції, що
задана рекурсивною формулою у=(а1х+а2)х+а3=
а1х2+а2х+а3.
program Quadratfunction; {назва
алгоритму табуляції}
var a1, a2, a3, x, y, d, x1,
x2,y1: 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); x1:=x; {обчислення
першого нуля квадратичної
функції}
writeln( ' перший
наближений нуль квадратичної функції х1=', x, 'з абсолютною похибкою ',y); writeln;
x:=0.5*(-a2+sqrt(d))/a1;
y:=abs((a1*x+a2)*x+a3);
x2:=x;{ {обчислення
другого нуля
квадратичної функції} writeln( ' другий
наближений нуль квадратичної функції х2=', x, 'з абсолютною похибкою ',y); writeln; end else writeln( ' немає нулів квадратична функція');
x:=0.5*(-a2)/a1; y:=(a1*x+a2)*x+a3;
y1:=y; {обчислення координат вершини
параболи }
if (a1>0) then {оголошення мінімуму
квадратичної функції як координат вершини параболи} writeln( 'гілки параболи напрямлені
вгору, мінімум квадратичної функції якщо
Хmin=', x, ' та Уmin= ',y) else {оголошення максимуму
квадратичної функції як координат вершини параболи}
writeln( 'гілки параболи напрямлені вниз, максимум квадратичної функції якщо Хmах=',x, ' та Уmах= ',y); writeln;
writeln( 'вісь симетрії графіка параболи це вертикальна пряма лінія: Хвісь=', -0.5*a2/a1); writeln;
if (a1>0) then writeln(' функція зростає, якщо Х>', -0.5*a2/a1); writeln;
if (a1>0) then writeln(' функція спадає, якщо Х<', -0.5*a2/a1); writeln;
if (a1>0) and (d>0) then writeln(' функція додатна, якщо Х<', x1, ' та Х>', x2); writeln;
if (a1>0) and (d>0) then writeln(' функція відємна, якщо ХЄ(', x1, ' ;', x2, ') ' ); writeln;
if (a1<0) and (d>0) then writeln(' функція відємна, якщо Х<', x1, ' та Х>', x2); writeln;
if (a1<0) and (d>0) then writeln(' функція додатна, якщо ХЄ(', x1, ' ;', x2, ') ' ); writeln;
if (a1<0) then writeln(' функція зростає, якщо Х<', -0.5*a2/a1); writeln;
if (a1<0) then writeln(' функція спадає, якщо Х>', -0.5*a2/a1); writeln;
if (a2=0) then writeln( 'Квадратична функція у=',
a1, '*x*x+(
' , a2, ' )x+(
', a3, ' ) парна.') else
writeln( 'Квадратична функція у=',
a1, '*x*x+(
' , a2, ' )x+(
', a3, ' ) ні парна, ні
непарна.'); writeln;
writeln( 'Обернена функція до першої гілки параболи
квадратичної функції: у1=+((x-(', y1, '))/ (', a1, '))^0.5 +(', -0.5*a2/a1, ')'); writeln;
writeln( 'Обернена функція до другої гілки параболи
квадратичної функції: у2=-((x-(', y1, '))/( ', a1, '))^0.5 +(', -0.5*a2/a1, ')'); writeln;
writeln( ' Немає
перегинів випуклих ділянок квадратична функція');
end.
{закінчення
алгоритму}
Протестуйте алгоритм чотири рази та
порівняйте результати табуляції і виберіть той варіант, при якому можна знайти
найточніше наближення нулів
квадратичної функції, тобто випадок y:=(a1*x+a2)*x+a3=0.
********************
***********************************************
Практична робота 13.
Алгоритми
табуляції мовою Pascal
Завдання 1. Із потяга зійшли два пасажира і направились одночасно в один і той же
пункт А. Перший пасажир половину часу йшов зі швидкістю v1 м/год, а другу
половину часу йшов зі швидкістю v2 м/год. Другий пасажир йшов першу половину шляху зі
швидкістю v1 м/год, а другу половину шляху зі швидкістю v2 м/год.
Допоможіть слідчому, дізнатися, яку відстань долали пасажири від виходу із
потяга до пункту призначення і хто першим прибуває в пункт А. Скласти і реалізувати алгоритм для вияснення, хто першим прибуває у пункт
призначення і на скільки раніше, ніж інший, якщо відомо, що перший пасажир
витрачає на весь свій шлях t хвилин?
program Robota_4; {назва алгоритму}
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. Скласти і
реалізувати алгоритм для знаходження табулювання значень кубічної функції, що
задана рекурсивною формулою у=((а1х+а2)х+а3)х+a4.
program Cubesfunction; {назва
алгоритму табуляції}
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.
Завдання 3. Створити
алгоритм мовою Паскаль, який знаходить корінь кубічного рівняння, якщо відомо,
що тільки вільний член кубічного рівняння від’ємний, а всі інші коефіцієнти
додатні дійсні числа.
program DichotomiaCUB;
var c1, c2, c3, c4, a, b, mid, x, e, y: real; n, m, i: integer;
begin
c1:=(1+random(3)) *(2+random(6)) *(random(2)) + 1+random(3) ;
writeln( ' Якщо найстарший коефіцієнт в кубічному рівнянні: c1=', c1); writeln;
c2:=(1+random(7)) *(2+random(9)) *(random(5)) + 1+random(7) ;
writeln( ' Якщо квадратичний коефіцієнт в кубічному рівнянні: c2=', c2); writeln;
c3:=(1+random(8)) *2+random(4) *(random(7)) + 1+random(8) ;
writeln( ' Якщо лінійний коефіцієнт в кубічному рівнянні: c3=', c3); writeln;
c4:=-(1+random(12)) ;
writeln( ' Якщо нульoвий коефіцієнт в
кубічному рівнянні: c4=', c4); writeln;
writeln( ' Дане кубічне
рівняння:', c1, '*x*x*x+(
' , c2, ' )*x*x+( ', c3, ' )*x ',c4, '=0');
a:=0; b:=10;
for i:=1 to 1000 do begin
mid:=0.5*(a+b);
y:=c1*mid*mid*mid+c2*mid*mid+c3*mid+c4;
if y>0 then b:=mid else a:=mid;
end; writeln( 'Наближений корінь кубічноого рівняння: mid=', mid); writeln;
writeln( 'Наближене
значення кубічноого рівняння: y=', y); writeln;
end.
**************
****************************************
Практична робота 14
«Лінійні алгоритми
мовою Pascal»
Завдання 1. Скласти і
реалізувати алгоритм для знаходження
кількості днів, за яку виконають сумісну роботу два програміста, якщо такий
об’єм роботи перший програміст самостійно виконує за k
днів, а другий програміст самостійно виконує за m
днів.
program Robota_1; {назва
алгоритму}
var k,m: real; {оголошення змінних величин: k,m – це дійсні числа}
begin { початок виконання алгоритму}
writeln( 'k='); readln(k);
writeln( 'm='); readln(m); { введення
двох чисел}
k:=(k*m)/(k+m);
{ обчислення за формулою}
writeln('Разом виконають за ', k, ' днів');
{ виведення результату}
end.
{закінчення
алгоритму}
Протестуйте алгоритм для таких
значень k i m: а)12 i 8; б)3,2 i 2,4; в)6,5 i 2,6; г)42 і36;
д)40,30 і 40,45; е)20 і 16; є)80 і 84.
Завдання 2.
Скласти і реалізувати алгоритм для
знаходження справжньої маси монети, якщо її зважували на бракованих терезах з нерівними
плечами, і при викладенні гирьок на першій чашечці, то маса монети на
протилежній чашечці становила k грам, а при викладанні гирьок на другій чашечці
терезів маса монети на протилежній чашечці становила m грам.
program Robota_2; {назва алгоритму}
var k,m: real; {оголошення змінних величин: k, m – це дійсні числа}
begin {
початок виконання алгоритму}
writeln(
'k='); readln(k); writeln( 'm='); readln(m); { введення двох чисел}
k:=sqrt(k*m); { обчислення за функцією квадратного
кореня}
writeln('Cправжня маса монети: ', k, ' грам); { виведення результату}
end.
{закінчення алгоритму}
Протестуйте алгоритм
для таких значень k i m: а)12
i 8; б)3,2 i 2,4; в)6,5 i 2,6; г)42 і36;
д)40,30 і 40,45; е)20 і 16; є)80 і 84.
Завдання 3.
Є три гаманці: татчин, мамчин, сина. У татовому гаманці: k грн, у маминому гаманці m
грн. Бабуся запитала внучка, яку б ти хотів мати cуму грошей у своєму гаманці і запропонувала чотири
можливі варіанти: 1) середнє арифметичне грошей у двох гаманцях, що мають k+1000
грн і m-1000 грн відповідно; 2)
середнє геометричне грошей, що у двох гаманцях, котрі мають k-2000
грн і m+2000 грн відповідно; 3)середнє квадратичне грошей
у двох гаманцях, котрі мають k-3000 грн і m+3000 грн відповідно; 4)
середнє гармонійне грошей у двох гаманцях, котрі мають k+4000 грн і m-4000 грн
відповідно. Для внучка бабусі скласти і реалізувати алгоритм для впорядкування від найбільшого до найменшого названих
бабусею чотирьох грошових величин.
program Robota_3; {назва алгоритму}
var k,m,n: real; {оголошення змінних величин: k, m, n – це дійсні числа}
begin {
початок виконання алгоритму}
writeln(
'k='); readln(k); writeln( 'm='); readln(m); { введення двох чисел}
n:=sqrt(((k-3000)*(k-3000)+(m+3000)*(m+3000))*0.5); {обчислення
за фор-лою серед-ого квадр-ного}
writeln('Cереднє квадратичне: ', n, ' грн
');
{ виведення результату}
n:= ((k+1000)+(m-1000))*0.5; {обчислення
за фор-лою серед-ого арифметичного}
writeln('Cереднє арифметичне: ', n, ' грн
');
{ виведення результату}
n:=sqrt((k-2000)*(m+2000)); {обчислення
за фор-лою серед-ого геометр-ного}
writeln('Cереднє геометричне: ', n, ' грн
');
{ виведення результату}
n:=2*((k+4000)*(m-4000))/ ((k+4000)+(m-4000)) ;
{обчислення за фор-лою
серед-ого гарм-ного}
writeln('Cереднє гармонійне: ', n, ' грн
');
{ виведення результату}
end.
{закінчення алгоритму}
Протестуйте алгоритм для таких
значень k i m: а)10000 i 80000; б)300000 i 400000; в)600500 i 900600.
Немає коментарів:
Дописати коментар