неділя, 20 травня 2018 р.

Нелінійні алгоритми мовою Pascal



Практична робота 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     {оголошення циклу з лічильником  в алгоритмі}
       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-класників, заявок від 9-класників, заявок від 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: realk: 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, mn, b, iinteger;                                               {оголошуються змінні  типу:  цілі}
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<bor (r=bthen          { повне розгалуження для перевірки  рентабельності }
            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, mx, 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<v2then                                     { повне розгалуження для перевірки  рентабельності }
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х22х+а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х23х+а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: realn, iinteger;                             {оголошуються змінні  типу:  дійсні  та цілі}
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*xx:=x+d;                           { розгалуження   та обчислення}
writeln('результат обчислення  f(', x, ')=', f, 'якщо номер кроку i =', i); writeln; end; end.
Протестуйте цей алгоритм декілька разів і порівняйте результати обчислень на кожному кроці. Спробуйте самостійно змінити в алгоритмі діапазон випадкових чисел.
Завдання 2. Створити та реалізувати мовою Паскаль алгоритм, який обчислює значення  кускової функції.
program tabuljacia2;
var  p, n, iinteger;                             {оголошуються змінні  типу:  цілі}
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 divelse  p:=3*p+1;             { розгалуження   та обчислення}
writeln('результат обчислення 
p(', i, ')=', p, 'якщо номер кроку i =', i); writeln; end; end.
Протестуйте цей алгоритм декілька разів і порівняйте результати обчислень на кожному кроці. Спробуйте самостійно змінити в алгоритмі діапазон випадкових чисел.

Завдання 3. Створити та реалізувати мовою Паскаль алгоритм, який обчислює значення функції.
program tabuljacia3;
var  g, n, iinteger;                                                      {оголошуються змінні  типу:  цілі}
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  divelse  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.





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

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