неділя, 5 травня 2019 р.

Алгоритми дій з лінійними масивами


Слова, зміст яких є синонімічними 
з точки зору мови програмування 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(а12+…+ар)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 осіб, якщо серед кандидатів  ліцеїстів та m ліцеїсток. Скласти і реалізувати алгоритм підрахунку усіх можливих способів створення Ради парламенту мовою Pascal. Вхідні дані: k, m, n. Вивід: кількість!
Розв’язання. Нехай кандидатів у Раду парламенту більше, ніж n. У Раду парламента може зайти: або одна, або дві,…., або  m  ліцеїсток.  Кількість способів обрати тільки ліцеїсток обчислюємо як  комбінації: С1m =m(1 місце в раді парламенту); С2m =m(m-1)/2( для двох осіб) ; С3;…  С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х22х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.



**********************************

Немає коментарів:

Дописати коментар