неділю, 21 січня 2018 р.

Aлгоритми мовою Pascal

Практична робота 7
Aлгоритми мовою Pascal

Завдання 1.  На конференцію приїхали рівно по k представників від m(не менше ніж 2) фірм-конкурентів по виробництву гри "Саmрf", при цьому, усі представники різних фірм є конкурентами. Відомо, що у кожного учасника конференції рівно  n конкурентів серед усіх інших учасників.  Скласти алгоритм, який знаходить найбільшу кількість учасників  та найменшу кількість фірм-конкурентів в конференції?
 Розв’язання.  Кількість учасників конференції дорівнює km осіб. З іншого боку, кількість конкурентів у одного представника дорівнює k(m-1)= n, звідси маємо рівність km =  n + k, права частина якого є лінійний вираз відносно двох змінних. Лінійний вираз р(k)= n + k досягає свого найбільшого і найменшого значення на межах числового проміжка від 1 до n. Якщо   k = n, то маємо найбільше значення р(n)= n + n =2n, тому  nm = 2n, звідси  m = 2. Відповідь: 2n осіб, 2 фірми.
Алгоритм мовою Pascal
program МіnConkurent;    var k,m,n:integer;    begin
writeln('введіть число конкурентів  в особи 2<n<109  n='); readln(n);
write('найбільше:', 2*n, ' осіб');  {вивід найбільшого числа учасників}
write('найменше: 2 фірми'); {вивід найменшого числа учасників}
end.                              {оголошення кінця алгоритму}

Завдання 2.  На конференцію приїхали рівно по k представників від m(не менше ніж 2) фірм-конкурентів по виробництву гри "Саmрf", при цьому, усі представники різних фірм є конкурентами. Відомо, що у кожного учасника конференції рівно  n конкурентів серед усіх інших учасників.  Скласти алгоритм, який знаходить найбільшу кількість фірм-конкурентів і найменшу кількість представників в конференції?
 Розв’язання.  Кількість учасників конференції дорівнює km осіб. З іншого боку, кількість конкурентів у одного представника дорівнює k(m-1)= n, звідси маємо рівність km =  n + k, права частина якого є лінійний вираз відносно двох змінних. Лінійний вираз р(k)= n + k досягає свого найбільшого і найменшого значення на межах числового проміжка від 1 до n. Якщо   у формулі р(k)= n + k,  підставимо k = 1, то отримаємо найменше значення р(1)= n + 1 , тому найбільше значення m = n+1, звідси  n = m-1. Відповідь: n+1 фірм, 1 особа.
Алгоритм мовою Pascal
program МахConkurent;    var n:integer;    begin
writeln('введіть число конкурентів  в особи 2<n<109  n='); readln(n);
write('найбільше:' n+1, 'фірм');  {вивід найбільшого числа фірм}
write('найменше: 1 представник від фірми'); {вивід найменшого числа представників }   end.   {оголошення кінця алгоритму}

Завдання 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.

Завдання 4. Самостійно скласти і реалізувати алгоритм впорядкування виразів: (n/k)+(p/m)-(m/p)-(k/m); та (р/k)+(n/m)-(k/n)-(n/p) в порядку зростання для дробових чисел k,m,n,p.

Завдання 5. Самостійно скласти і реалізувати алгоритм впорядкування виразів: (1/k)+(1/m)-1/p)-(1/n); та (1/k)+(1/p)-(1/m)-(1/n) в порядку зростання для дробових чисел k,m,n,p.




БАНК ЗАВДАНЬ «Лінійні алгоритми»

1.     Створити та реалізувати мовою програмування лінійний алгоритм, що знаходить за трьома відомими сторонами трикутника a, b, c e три дійсні числа – real, які  вводяться з клавіатури) половину периметрa(р=а+b+c), площу(S=(p(p-a)(p-b)(p-c))0,5), радіус описаного кола (R=abc/4S), радіус вписаного кола(r=S/p).  Вивести на екран шукані величини.
2.    Створити та реалізувати мовою програмування лінійний алгоритм, що знаходить за трьома відомими сторонами трикутника a, b, c e три дійсні числа – real, які  вводяться з клавіатури) усі висоти(Ha = 2(p(p-a)(p-b)(p-c))0,5)/a, Hb = 2(p(p-a)(p-b)(p-c))0,5)/b, Hc = 2(p(p-a)(p-b)(p-c))0,5)/c)  трикутника.  Вивести на екран шукані величини.
3.    Створити та реалізувати мовою програмування лінійний алгоритм, що знаходить за трьома відомими сторонами трикутника a, b, c e три дійсні числа – real, які  вводяться з клавіатури)   усі медіани (ma = 0.5(2b2 +2c2-a2)0,5, mb = 0.5(2a2 +2a2-b2)0,5), mc = 0.5(2b2 +2a2-c2)0,5 трикутника.  Вивести на екран шукані величини.
4.    Створити та реалізувати мовою програмування лінійний алгоритм, що за відомими фізичними величинами a1, m1, m2(дійсні  числа)   і законом збереження імпульсу a2=a1m1/m2 знаходить прискорення другого  фізичного об’єкта(тіла).  Вивести на екран шукані величини.  

5.    Створити та реалізувати мовою програмування лінійний алгоритм, що знаходить за відомим ребром куба а(дійсне число) знаходить площу поверхні куба( S = 6a2 ), об'єм куба (V = a3 ), діагональ куба (D=a(3)0.5), діагональ грані куба (L=a(2)0.5).  Вивести на екран шукані величини. 



http://pinskolimp.blogspot.ru/p/5.html



СТАНДАРТНІ АЛГОРИТМИ НА МОВІ PASCAL

Задача1. Скласти програму  на мові  Pascal  підрахунку   кількості різних букв у слові.

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
          if s[i]=s[j] then inc(n);          end;
       r:=r+1/n;       end;
    writeln('количество различных букв = ', r:1:0);   
end.

Задача 2. Перестановка  останньої букви у слові на перше місце (циклічний рух вправо).
var s:string;
    i,j,n:integer;
begin
    readln(s);
    s:=s[length(s)] + copy(s,1,length(s)-1);
    writeln(s);
end.
Результат:  введення:  wertyu    виведення:   uwerty
Задача 3. Перевірка рядка на   "паліндромність".
Наприклад , "шалаш", "красарк"  -  це рядки паліндроми.

var s1,s2:string;
    i:integer;
begin
    readln(s1); s2:='';
    for i:=length(s1) downto 1 do begin
       s2:=s2+s1[i];      end;
    if s1=s2 then writeln(s1, ' -  паліндромне слово')
             else  writeln(s1, ' -  непалідромне слово);
end.



СТАНДАРТНІ АЛГОРИТМИ НА МОВІ PASCAL
Задача 4. Знайти і вивести всі  дільники  натурального числа A
var a,n,c,d:word;
begin { основная программа }
    readln( a );
    n:=1;
    while ( n <= sqrt(a) ) do begin
       c:=a mod n;
       d:=a div n;
       if c = 0 then begin
          writeln( n );
          if n <> d then writeln( d );
       end;
       inc( n );
    end;  end.

Задача 5.  Знайти і вивести усі досконалі числа  до 10000

const LIMIT = 10000;
var n,i,j,s,lim,c,d : word;
begin
  for i:=1 to LIMIT do begin
     s:=1; lim:=round(sqrt(i));
     for j:=2 to lim do begin
       c:=i mod j;          d:=i div j;
       if c = 0 then begin
          inc(s,j);
          if (j<>d) then inc(s,d); {двічі не додавати корінь числа}
       end;       end;
     if s=i then writeln(i);     end; 
end.

Задача 6. Знайти і вивести всі прості числа  до 500

const LIMIT = 500;
var i,j,lim : word;
begin
  writeln;
  for i:=1 to LIMIT do begin
      j:=2; lim:=round(sqrt(i));
      while (i mod j <> 0) and (j <= lim) do inc( j );
      if (j > lim) then write( i,' ' );   end;  
end.

СТАНДАРТНІ АЛГОРИТМИ НА МОВІ PASCAL
Задача 7. Знайти і вивести суму цифр  числа  до 10000
var a,x:integer;
    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 );
end.

Задача 8. Знайти і вивести суму чисел лінійного масиву

var a:array[1..10] of integer;
    s:longint;
    i:integer;
begin
     writeln('введіть 10 чисел масиву');
     s:=0;
     for i:=1 to 10 do begin
        readln( a[i] );
        s:=s+a[i];
     end;
     writeln( 'Сума елементів масиву = ', s );
end.

Задача 9.  Знайти і вивести суму чисел двомірного масиву 5х5(таблиці)
var a:array[1..5,1..5] of integer;
    s:longint;
    i,j:integer;
begin
     writeln('введіть 25 елементів масиву');
     s:=0;
     for i:=1 to 5 do begin
        for j:=1 to 5 do begin
           readln( a[i,j] );
           s:=s+a[i,j];
        end;
     end;
     writeln( 'Сума елементів масиву = ', s );
end.
СТАНДАРТНІ АЛГОРИТМИ НА МОВІ PASCAL
Задача 10.   Знайти найбільше число у лінійному масиві
var a:array[1..10] of integer;
    max:integer;
    i:integer;
begin
     writeln('введіть 10 елементів масиву');
     max:=-(MAXINT+1);
     for i:=1 to 10 do begin
        readln( a[i] );
        if max < a[i] then max:=a[i];
     end;
     writeln( 'Максимальний елемент  масиву = ', max );
end.
 Задача 11.    Знайти найменше  число у лінійному масиві
var a:array[1..10] of integer;
    min:integer;
    i:integer;
begin
     writeln('введіть 10 елементів масиву');
     min:=MAXINT;
     for i:=1 to 10 do begin
        readln( a[i] );
        if min > a[i] then min:=a[i];
     end;
     writeln( 'Мінімальний елемент  масиву =  ', min );
end.
Задача 12.  Знайти середнє арифметичне число для усіх чисел лінійного масиву
var a:array[1..10] of integer;
    s:longint;
    i,n:integer;
begin
     s:=0; n:=0;
     writeln('введите 10 элементов массива');
     for i:=1 to 10 do begin
        readln( a[i] );
        s:=s+a[i]; inc(n);
     end;
     writeln( 'Середнє арифметичне число = ', s/n );
end. 


https://www.ua5.org/pascal/

Мови програмування

http://borlpasc.narod.ru/
Сайт, присвячений мові програмування Turbo Pascal
http://chemisk.narod.ru/
Програмування на Паскалі
http://www.codenet.ru/
Все для програміста
http://lktalks.blogspot.com/2007/06/blog-post_24.html
Перша у світі мова програмування
http://pascal-md.narod.ru/
Паскаль школярам
http://pascalstudy.narod.ru/
Все для вивчення Турбо Паскаль
http://progopedia.ru/
Енциклопедія мов програмування
http://prohod.org/
Мова програмування ЛОГО
http://schools.keldysh.ru/sch444/MUSEUM/LANR/evol.htm
Еволюція мов програмування
http://www.toehelp.ru/theory/informat/lecture04.html
Лекції з мови програмування Турбо Паскаль

суботу, 20 січня 2018 р.

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

Практична робота 1.
 Лінійні алгоритми мовою Pascal

Завдання 1.(3 бали). Скласти і реалізувати алгоритм в програмному середовищі, який визначає із довільної кількості прямих загального положення   число точок перетину цих прямих. Значення  кількості прямих вводяться з клавіатури; і виводить на екран  кількість точок перетину цих прямих. Використовувати в алгоритмі більше однієї цілої змінної не можна.
Алгоритм  мовою Pascal
Program linearPunkt;   {алгоритм знаходження кількості точок перетину прямих на площині}
var                    { оголошується опис змінних величин, які використовує алгоритм}
k: integer;        {оголошується  ціла змінна у даному  алгоритмі}
begin                                                     {початок виконання дій алгоритму}
write('k='); readln(k);     { на екрані запит на введення з клавіатури цілого числа: у}
 write('кількість прямих k='); writeln(k,'  ');      { перевірка початкового: k}
k:=(k-1)*k div 2;              {обчис-ня  кіл-сті точок перетину за  форм-лою:0,5(k-1)k}
writeln;  write('кількість точок перетину прямих k=');     {повідомлення про виведення результату}
writeln(k,'  ');                {виведення результату обчислення алгоритму}
writeln;   end.                  {закінчення дій алгоритму}
Протестувати правильну роботу цього алгоритму  для цілих  чисел:  1;  2; 4; 5; 0;  100;  901;   9000; 101010.
Завдання 2.(3 бали). Скласти і реалізувати алгоритм в програмному середовищі, який виконує взаємний обмін числовими значеннями двох цілих змінних; і виводить на екран  два початкових значення змінних і два кінцеві значення цих змінних. Використовувати в алгоритмі більше двох цілих змінних не можна.
Алгоритм  мовою Pascal
program SuperposiziaNumer;   {алгоритм обміну числовими значеннями двох змінних}
var                     {оголошується про опис змінних величин, які використовує алгоритм}
x,y: integer;                                   {оголошуються дві цілі змінні у даному  алгоритмі}
begin                                                    {оголошується про початок алгоритмічних дій}
write('x=');                 {на екрані запит на введення з клавіатури цілого числа: х}
readln(x);                {зчитування числового значення і внесення його в змінну  х}
write('y=');              { на екрані запит на введення з клавіатури цілого числа: у}
readln(y);                {зчитування числового значення і внесення його в змінну  у}
 write('початкове значення x='); writeln(x,'  ');            { виведення на екран початкового: х}
 write('початкове значення y='); write(y,'  ');                 { виведення на екран початкового: у}
x:=x+y; y:=x-y; x:=x-y;    {взаємний обмін числами за допомогою арифметичних дій «+»та «-».}
writeln;                 {поставити курсор на екрані з нового рядка}
 write('кінцеве значення x=');    {виведення на екран  повідомлення}
writeln(x,'    ');        {виведення на екрані  числового значення змінної х}
 write('кінцеве значення y=');        {виведення на екран  повідомлення}
write(y,'    ');                            {виведення на екрані  значення значення змінної у}
 writeln;                                {поставити курсор на екрані з нового  рядка}                 
end.                                                     {закінчення дій алгоритму}

Протестувати правильну роботу цього алгоритму  для пари цілих  чисел:   -9 і 17;     0 і 7;       100 і; 250;           -900 і - 1000.  Виконайте цей алгоритм для дійсного типу числових величин.
Завдання 3. (3 бали). Самостійно скласти і реалізувати алгоритм в програмному середовищі, який визначає із довільної кількості прямих загального положення   на площині    знаходить кількість  утворених частин площини, при умові, що кожна точка перетину прямих утворена не більше, ніж двома прямими. Значення  кількості прямих вводиться з клавіатури; і результат виводить на екран, це  кількість частин площини. Використовувати в алгоритмі більше однієї цілої змінної не можна. Формула кількості частин на площині після перетину n непаралельних прямих має вигляд:   k(n) =  (n+1)n/2 +1, де n - натуральне число, кількість прямих.
Протестувати правильну роботу цього алгоритму  для цілих  чисел:  1;  2; 3; 4; 5;  6;  7;   3059; 121314.
Завдання 4. (3 бали). Самостійно скласти і реалізувати алгоритм в програмному середовищі,  що за заданими n точками  на площині, знаходить кількість  відрізків між цими усіма точками.  Протестувати правильну роботу цього алгоритму  для  цілих  чисел:  1;  2; 3; 4; 5;  6;  7;   2099; 521314.  Формула кіль-сті відрізків: k(n) =  (n-1)n/2 , де n - натуральне число, кількість точок.


Практична робота 2.
Лінійні алгоритми мовою Pascal

Завдання 1. Скласти і реалізувати алгоритм  для знаходження кількості днів, за яку виконають сумісну роботу два програміста, якщо такий об’єм роботи перший програміст самостійно виконує за k днів, а другий програміст самостійно виконує за m днів.
program  Pobota_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  Pobota_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  Pobota_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.


Практична робота 3.
Лінійні алгоритми мовою Pascal

Завдання 1(2 бали). Скласти і реалізувати алгоритм в програмному середовищі, який визначає із двох довільних дійсних чисел найменше число та найбільше число. Значення  двох дійсних змінних вводяться зклавіатури; і виводить на екран  найменше значення із двох  чисел  та найбільше значення із двох  чисел. Використовувати в алгоритмі більше трьох дійсних змінних не можна.
Алгоритм  мовою Pascal
program  МАхМіnNumer; {алгоритм знаход-ня МАХ(x;y) та  МІN(x;y)}
var                    {оголошується опис змінних величин, які використовує алгоритм}
x,y,z: real;        {оголошуються три дійсні  змінні величини x,y,z  у даному  алгоритмі}
begin                                                                    {оголошується початок алгоритмічних дій}
write('x=');         {на екрані запит на введення з клавіатури цілого числа: х}
readln(x);            {зчитування  числового значення і внесення його в змінну  х}
write('y=');            { на екрані запит на введення з клавіатури цілого числа: у}
readln(y);              {зчитування числового значення і внесення його в змінну  у}
 write('початкове значення x='); writeln(x,'  ');   { виведення на екран  початкового: х}
 write('початкове значення y='); write(y,'  ');      { виведення на екран  початкового: у}
 z:=abs(x-y); x:=0.5*(x+y-z);  y:=x+z;    {знаходження МАХ(x;y) та МІN(x;y) }
 writeln;                                       {поставити курсор на екрані з нового рядка}
 write('найменше значення x=');     {виведення на екран  повідомлення}
writeln(x,'  ');        {виведення на екран  найменшого числового значення змінної х}
 write('найбільше значення y=');         {виведення на екран  повідомлення}
write(y,'  ');              {виведення на екрані  найбільшого числового значення змінної y}
 writeln;                      {поставити курсор на екрані з нового рядка}                 
end.                                {закінчення дій алгоритму}
Протестувати правильну роботу цього алгоритму  для двійок цілих  чисел:  -9.9 і -1.7;  0.89 і -8.93;  -2 і 0;    -1.4 і 1.7;    10.033 і 25.902;    900  і - 1000.
Завдання 2. (2 бали). Самостійно скласти і реалізувати алгоритм в програмному середовищі,  що за заданим цілим числом   знаходить суму перших парних натуральних чисел, що не перевищують 2n.  Протестувати правильну роботу цього алгоритму  для  цілих  чисел:  1;  2; 3; 4; 25;  36;  57;   2022; 521314.  Формула суми парних чисел: 2+4+6+..+ 2n = n*(n+1)   , де n - натуральне число.
Завдання 3. (2 бали). Самостійно скласти і реалізувати алгоритм в програмному середовищі,  що за заданим цілим числом   знаходить суму перших непарних натуральних чисел, що не перевищують 2n-1.  Протестувати правильну роботу цього алгоритму  для  цілих  чисел:  1;  2; 3; 4; 25;  46;  77;   3033; 521314.  Формула суми непарних чисел: 1+3+5+...+ (2n-1) = n*n=n2, де n - натуральне число.
Завдання 4. (2 бали). Самостійно скласти і реалізувати алгоритм в програмному середовищі,  що за заданим цілим числом   знаходить суму квадратів натуральних чисел, що не перевищують n2.  Протестувати правильну роботу цього алгоритму  для  цілих  чисел:  1;  2; 3; 4; 5;  16;  47;   4044; 521314.  Формула суми квадратів чисел: 12+22+...+ n2= n*(n+1)*(2n+1)/6, (div) де n - натуральне число.
Завдання 5. (2 бали). Самостійно скласти і реалізувати алгоритм в програмному середовищі,  що за заданим цілим числом   знаходить суму кубів  натуральних чисел, що не перевищують n3.  Протестувати правильну роботу цього алгоритму  для  цілих  чисел:  1;  2; 3; 4; 5;  1527;   505; 521314.  Формула суми кубів чисел: 13+23+33+43+…+ n3= n2*(n+1) 2/4 ,(div) де n - натуральне число.
Завдання 6. (2 бали). Самостійно скласти і реалізувати алгоритм в програмному середовищі,  що за заданим цілим числом   знаходить суму четвертих степенів натуральних чисел, що не перевищують n4.  Протестувати правильну роботу цього алгоритму  для  цілих  чисел:  1;  2; 3; 4; 6;  1626;   66; 521314.  Формула суми четвертих степенів чисел: 14+24+34+…+ n4=(6n5+15n4+10n3- n)/30 ,(div) де n - натуральне число.
Завдання 7.(2 балів). Самостійно скласти і реалізувати алгоритм в програмному середовищі,  що за заданим цілим числом   знаходить найменше число та найбільше число для  значень (1-n)*(n2-5n +6)   та  (1-n)*(n2-6n +5) . Цілі   змінні вводяться з клавіатури; результат  виводить на екран  найменше значення із двох  чисел  та найбільше значення із двох  чисел. Використовувати в алгоритмі більше чотирьох цілих змінних не можна.
Протестувати правильну роботу цього алгоритму  для цілих  чисел:  -2;  -1;  0;  1;  4;  5; 6; 7.   

Практична робота 4.
Лінійні алгоритми мовою Pascal

Завдання 1.(4 бали). Нехай R- це приблизна кількість риби у ставку(R>0), проте вона невідома. Одночасно виловити усю рибу в ставку неможливо. Тому першого дня зі ставка виловлюють  K риб(K>0), помічають їх і відпускають назад у ставок. Через день знову закидають сітку і виловлюють  M риб(M>0), серед яких виявляють  N помічених риб(0<N<=K). Створіть і реалізуйте алгоритм, який знаходить приблизну кількість риб у ставку.
Розв’язання. Нехай у ставку R – риб, тоді K/R – це ймовірність виловити помічену рибу. Кількість помічених риб серед другого вилову приблизно дорівнює M*K/R =N. Звідси отримаємо приблизну кількість риб у ставку R =M*K/N риб.
program Fisher;             {назва    алгоритму}
var r,k,m,n: integer;      {оголошення  змінних величин: r,k,m,n - це цілі числа}
begin                                {початок виконання дій  алгоритму}
readln(k);                        {оголошення  про введення  числа k - це ціле число}
readln(m);                    {оголошення  про введення  числа m - це ціле число}
readln(n);                        {оголошення  про введення  числа n - це ціле число}
r:=k*m div n;    {арифметичні дії над цілими k,m,n  і присвоєння результату  r}
write(r);                 {оголошення  про виведення  числа r - це ціле число}
end.                              {кінець виконання дій      алгоритму}
Протестуйте його для трійок цілих чисел (K;M;N)={(2000;2400;1000), (2300;2500;1600), (5581;3159;2992), (4581;3159;2992), (2001;20001;2001), (2077;2166;1552)}.
Завдання 2.(4 бали). Із молока,  жирність якого становить а%(1<a<7) виготовляють сир жирністю b%(15<b<30).При цьому залишається сироватка жирністю с% (0,0001<c< 0,09).
Створіть і реалізуйте алгоритм, який знаходить кількість сиру m кг, що виходить із k тонн молока.
Розв’язання. Нехай із k тонн молока виходить m кг сиру. Маса жиру в k тоннах молока k*1000*(а/100) =10kа кг. Маса жиру в m кг сиру становить m*(b/100) кг.  Маса жиру в сироватці становить (k*1000-m)*(с/100).  Оскільки при переробці молока кінцевими продуктами є сир та сироватка, тоді складаємо рівняння для кількості жиру в обох продуктах:   m*(b/100) + (k*1000-m)*(с/100) =10kа, звідси  m =1000k(a-c)/(b-c    
program Cheese;             {назва    алгоритму}
var a,b,c, k,m: real;      {оголошення  змінних величин: a,b,c, k,m: - це дійсні числа}
begin                                {початок виконання дій  алгоритму}
writeln('введіть жирність молока 1<a<5  а='); readln(a);
writeln('введіть жирність сиру 15<b<30  b='); readln(b);
writeln('введіть жирність сироватки 0.001<c<0.100, c='); readln(c);
writeln('введіть кількість молока 1<k<1000, k='); readln(k);
        {оголошення  про введення  числа  k - це дійсне число}
m:=1000*k*(a-c)/(b-c); {арифметичні дії над дійсними a,b,c, k,  і присвоєння m}
write(m);                 {оголошення  про виведення  числа m - це ціле число}
end.                              {кінець виконання дій      алгоритму}.
Протестуйте алгоритм для четвірок дійсних  чисел (a; b; c; k)={(5.5; 17.4; 0.1; 1), (3.89; 16.67; 0.086; 20), (4.581; 17.759; 0.029; 40.5), (3.181; 18.59; 39.92; 30), (4.1; 19.61; 0.08; 25).
 Завдання 3.(4 бали). Із молока,  жирність якого становить а%(1<a<7) виготовляють вершки k кг (1< k <100)  вершків, жирністю b%(20<b<60). Самостійно створіть і реалізуйте алгоритм, який знаходить кількість молока m кг, жирність якого становить а%(1<a<7),  із якого вийшло  k кг (0.1< k <100)  вершків, жирністю b% (20<b<60).
Розв’язання. Нехай із m кг молока виходить k  кг  вершків. Маса жиру в m кг молока становить  0.01*а* m  Маса жиру в k кг вершків становить 0.01*b* k  кг. Оскільки при переробці молока кінцевими продуктами є вершки, тоді складаємо рівняння для кількості жиру в обох продуктах:   0.01*а* m  = 0.01*b* k.  Звідси   m = b* k/а, для b,k,а дійсних.
Протестуйте алгоритм для трійок дійсних  чисел (a; b; k)={(5.5; 27.4; 1), (3.89; 26.67; 3.86), (4.581; 37.759;  20.5), (3.181; 28.59;  30), (4.1; 39.61; 25).


Практична робота 5.
 Лінійні алгоритми мовою Pascal

Завдання 1.(4 бали). Створіть і реаліз уйте алгоритм, який знаходить скільки треба досипати a кг солі до k  кг водного m% розчину, щоб отримати водний розчин з концентрацією n %.
Розв’язання. Нехай у розчин треба досипати  a кг солі. Маса солі у початковому розчині становить 0.01mk   кг. Маса солі у новому розчині становить 0.01n(k +а). Тоді маємо рівняння: 0.01n(k +а)= 0.01mk+а.  Звідси, маємо а =0.01k(m- n)/(0.01n -1)
program SaltSolution;             { оголошення  назви    алгоритму}
var a,k,m,n: real;                 {оголошення  змінних величин: а,k,m,n - це дійсні числа}
begin                             {початок виконання дій   алгоритму}
writeln('введіть початкову масу води 1<k<5000  k='); readln(k);
writeln('введіть початковий відсоток концентрації солі у воді 1<m<10 m='); readln(m);
writeln('введіть кінцевий відсоток концентрації солі у воді 10<m<60  n='); readln(n);
a:=0.01*k*(m- n)/(0.01*n -1); {арифм-чні дії над дійсними k,m,n  і присв-ня резуль-ту  a}
write(a , 'кг');                                   {оголошення  про виведення  числа a - це ціле число}
end.                                   {кінець виконання дій      алгоритму}
Протестуйте його для трійок дійсних чисел (k;m;n)={(200; 2; 12), (300;2.5;16), (5500;3;29), (581; 3; 9), (200; 1.8; 20), (1000; 1.6; 2)}.
Завдання 2.(4 бали). Швейна фабрика має пошити  k  костюмів  двох моделей. Для визначення того, скільки костюмів і якої моделі треба пошити провели опитування серед покупців.  Результати опитування: 1-у модель вибрало  m  покупців;  2-у модель вибрало  n покупців.  Створіть і реалізуйте алгоритм, який знаходить кількість костюмів і якої моделі треба пошити, якщо опитано  m+n покупців. 
Розв’язання. Частка покупців, котрі вибрали першу модель, становить  m /(m+n). Частка покупців, котрі вибрали другу модель, становить  n /(m+n).  Швейна фабрика має пошити:
1-у модель   km /(m+n) одиниць та  2-у модель   kn /(m+n) одиниць.
program Models;                           {оголошення  назви    алгоритму}
var a1,a2,k,m,n: integer;    {оголошення  змінних величин: a1,a2,n, k,m: - це цілі числа}
begin                                              {оголошення початку виконання дій  алгоритму}
writeln('введіть кількість  замовлених  костюмів 1<k<10000  а='); readln(k);
writeln('введіть кількість покупців 1-ої моделі  1<m<3000); readln(m);
writeln('введіть кількість покупців 2-ої моделі  1<n<3000); readln(n);
        {оголошення  про введення  числа  k - це дійсне число}
a1:=(k*m) div (m+n); {арифметичні дії над цілими n, k,m,  і присвоєння результату  a1}
a2:=(k*n) div (m+n);  {арифметичні дії над цілими n, k,m,  і присвоєння результату  a2}
write('a1=',a1, 'одиниць; ', 'a2=', a2, 'одиниць.'); {виведення  кіль-сті костюмів}
end.                              {кінець виконання дій      алгоритму}.
Протестуйте алгоритм для трійок цілих  чисел (a; b; c; k)={(5; 1;  1), (3; 16; 20), (4581; 17; 29), (3181; 181; 59), (3900; 92; 30), (410; 19; 25).
 Завдання 3.(4 бали). Син з батьком домовилися зустрітися між  k та m годинами протягом доби. Але у них існувала умова зустрічі: той, хто приходить першим на місце зустрічі,  чекає другого не більше n хв, після чого покидає місце зустрічі. Самостійно створіть і реалізуйте алгоритм, який знаходить ймовірність зустрічі сина та батька.  
Розв’язання. Нехай х – момент приходу сина;  у – момент приходу батька; тоді умова зустрічі батька та сина записується виразом:  |x-y|=<n. Тоді -n=< x-y=<n,  звідки отримаємо: y=<х+n;  у>=x-n.  Якщо А – подія, коли батько і син зустрінуться за цієї умови, то фактом зустрічі буде точка вибрана із заштрихованої 6-кутника. Тоді ймовірність зустрічі
 Р(А)=(Площа 6-кутника):(площа квадрата)=(m-k) 2*602-(60m-60k- n)2/((m-k) 2*602)
program Meeting;
var k,m,n: integer;   p: real;
begin  writeln(' введіть нижню межу  на проміжку зустрічі: 10<k<20  k='); readln(k);
writeln(' введіть верхню межу на проміжку зустрічі: 11<m<24  m='); readln(m);
writeln(' тривалість очікування в хвилинах  5<n<60  n='); readln(n);
p:=((m-k)*(m-k)*60*60-(60*m-60*k-n)*(60*m-60*k-n))/((m-k)*(m-k)*60*60);
write('p=',p);  {виведення результату}      end. {кінець  алгоритму}
Протестуйте алгоритм для трійок дійсних  чисел (k; m; n)={(15; 17.41), (8; 12; 80), (14; 17; 15), (18; 19; 15), (12; 15; 25).

Практична робота 6.
Алгоритми геометричного змісту

Завдання 1. Створити, реалізувати алгоритм мовою Pascal, який знаходить кількість сторін опуклого багатокутника, якщо у багатокутника існує рівно k внутрішніх кутів, що дорівнюють  а градусів(0<a<100), а усі решта внутрішніх кутів дорівнюють  b градусів(100<b<180).
program Poligon1;
var a, b, k, n: integer;
begin
a:=random(60);    b:=100+random(20); k:= 1+random(3);
writeln(‘Кількість  кутів, що дорівнюють  k=’, k);
writeln(‘Градусна міра декілького  кутів, що дорівнюють  А=’, a);
writeln(‘Градусна міра декілького  кутів, що дорівнюють  B=’, b);
n:=(360-k*(180-a)) div (180-b)+k;
writeln(‘Кількість  cторін багатокутника  n=’, n); end.

Протестуйте правильність алгоритму:     1)a:=75;    b:= 160; k:= 3;  Відповідь: 5.  2) a:=80;    b:= 160; k:= 3;  Відповідь: 6.   3) a:=70;    b:= 160; k:= 3;  Відповідь: 4.  
4)a:=90;    b:=160; k:= 3; Відповідь: 7.
Завдання 2. Створити, реалізувати алгоритм мовою Pascal, який знаходить периметр та площу прямокутного трикутника, якщо у трикутника відомі довжини двох катетів.
program TRYkut2;
var a, b, p, s: real;
begin
a:=10+random(60);    b:=10+random(40);    writeln(‘Довжина першого катета, а=’, a);
writeln(‘Довжина другого катета, b=’, b);        s:= a*b/2;    p:=a+b+sqrt(a*a+b*b) ;
writeln(‘Периметр трикутника  р=’, p);     writeln(‘Площа трикутника  s=’, s);  end.

Протестуйте правильність алгоритму:     1)a:=75;    b:=100;  2) a:=80;    b:= 120; 3) a:=70;    b:= 100;  4)a:=90;    b:=180.
Завдання 3. Створити, реалізувати алгоритм мовою Pascal, який знаходить периметр та площу довільного трикутника, якщо відомо у трикутники довжини трьох сторін.
program TRYkut3;
var a, b, c, p, s: real;
begin
a:=10+random(60);    b:=10+random(40);   c:=10+random(50);  
 writeln(‘Довжина першої сторони, а=’, a); writeln(‘Довжина 3-ої  сторони, c=’, c);
writeln(‘Довжина другої сторони, b=’, b);   p:= (c+a+b)/2;
   s:=sqrt(p*(p-a)*(p-b)*(p-c)) ;     p:= 2*p;
writeln(‘Периметр трикутника  р=’, p);     writeln(‘Площа трикутника  s=’, s);  end.

Протестуйте правильність алгоритму:     1)a:=75;    b:=100;  c=85;  2) a:=80;    b:= 120; c=95;  3) a:=70;    b:= 100;  c=105;    4)a:=190;    b:=180c=185; 
Завдання 4. Є коло радіуса 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.   



Практична робота 7. Лінійні алгоритми мовою Pascal
Завдання 1.(4 бали). Створіть і реалізуйте алгоритм, який знаходить скільки треба досипати a кг солі до k  кг водного m% розчину, щоб отримати водний розчин з концентрацією n %.
Розв’язання. Нехай у розчин треба досипати  a кг солі. Маса солі у початковому розчині становить 0.01mk   кг. Маса солі у новому розчині становить 0.01n(k +а). Тоді маємо рівняння: 0.01n(k +а)= 0.01mk+а.  Звідси, маємо а =0.01k(m- n)/(0.01n -1)
program SaltSolution;             { оголошення  назви    алгоритму}
var a,k,m,n: real;                 {оголошення  змінних величин: а,k,m,n - це дійсні числа}
begin                             {початок виконання дій   алгоритму}
writeln('введіть початкову масу води 1<k<5000  k='); readln(k);
writeln('введіть початковий відсоток концентрації солі у воді 1<m<10 m='); readln(m);
writeln('введіть кінцевий відсоток концентрації солі у воді 10<m<60  n='); readln(n);
a:=0.01*k*(m- n)/(0.01*n -1); {арифмні дії над дійсними k,m,n  і присвоє-я резуль-ту  a}
write(a , 'кг');                                   {оголошення  про виведення  числа a - це ціле число}
end.                                   {кінець виконання дій      алгоритму}
Протестуйте його для трійок дійсних чисел (k;m;n)={(200; 2; 12), (300;2.5;16), (5500;3;29), (581; 3; 9), (200; 1.8; 20), (1000; 1.6; 2)}.
Завдання 2.(4 бали). Швейна фабрика має пошити  k  костюмів  двох моделей. Для визначення того, скільки костюмів і якої моделі треба пошити провели опитування серед покупців.  Результати опитування: 1-у модель вибрало  m  покупців;  2-у модель вибрало  n покупців.  Створіть і реалізуйте алгоритм, який знаходить кількість костюмів і якої моделі треба пошити, якщо опитано  m+n покупців. 
Розв’язання. Частка покупців, котрі вибрали першу модель, становить  m /(m+n). Частка покупців, котрі вибрали другу модель, становить  n /(m+n).  Швейна фабрика має пошити:
1-у модель   km /(m+n) одиниць та  2-у модель   kn /(m+n) одиниць.
program Models;                                {оголошення  назви    алгоритму}
var a1,a2,k,m,n: integer;         {оголошення  змінних величин: a1,a2,n, k,m: - це цілі числа}
begin                                              {оголошення початку виконання дій  алгоритму}
writeln('введіть кількість  замовлених  костюмів 1<k<10000  а='); readln(k);
writeln('введіть кількість покупців 1-ої моделі  1<m<3000); readln(m);
writeln('введіть кількість покупців 2-ої моделі  1<n<3000); readln(n);
        {оголошення  про введення  числа  k - це дійсне число}
a1:=(k*m) div (m+n); {арифметичні дії над цілими n, k,m,  і присвоєння результату  a1}
a2:=(k*n) div (m+n);  {арифметичні дії над цілими n, k,m,  і присвоєння результату  a2}
write('a1=',a1, 'одиниць; ', 'a2=', a2, 'одиниць.'); {виведення  кіль-сті модельних костюмів }
end.                              {кінець виконання дій      алгоритму}.
Протестуйте алгоритм для трійок цілих  чисел (a; b; c; k)={(5; 1;  1), (3; 16; 20), (4581; 17; 29), (3181; 181; 59), (3900; 92; 30), (410; 19; 25).
 Завдання 3.(4 бали). Син з батьком домовилися зустрітися між  k та m годинами протягом доби. Але у них існувала умова зустрічі: той, хто приходить першим на місце зустрічі,  чекає другого не більше n хв, після чого покидає місце зустрічі. Самостійно створіть і реалізуйте алгоритм, який знаходить ймовірність зустрічі сина та батька.  
Розв’язання. Нехай х – момент приходу сина;  у – момент приходу батька; тоді умова зустрічі батька та сина записується виразом:  |x-y|=<n. Тоді -n=< x-y=<n,  звідки отримаємо: y=<х+n;  у>=x-n.  Якщо А – подія, коли батько і син зустрінуться за цієї умови, то фактом зустрічі буде точка вибрана із заштрихованої 6-кутника. Тоді ймовірність зустрічі
 Р(А)=(Площа 6-кутника):(площа квадрата)=(m-k) 2*602-(60m-60k- n)2/((m-k) 2*602)
program Meeting;
var k,m,n: integer;   p: real;
begin  writeln(' введіть нижню межу  на проміжку зустрічі: 10<k<20  k='); readln(k);
writeln(' введіть верхню межу на проміжку зустрічі: 11<m<24  m='); readln(m);
writeln(' тривалість очікування в хвилинах  5<n<60  n='); readln(n);
p:=((m-k)*(m-k)*60*60-(60*m-60*k-n)*(60*m-60*k-n))/((m-k)*(m-k)*60*60);
write('p=',p);  {виведення результату}      end. {кінець  алгоритму}
Протестуйте алгоритм для трійок дійсних  чисел (k; m; n)={(15; 17.41), (8; 12; 80), (14; 17; 15), (18; 19; 15), (12; 15; 25).


Практична робота 8Лінійні алгоритми мовою Pascal
Завдання 1. На конференцію прибуде k делегацій, у кожній з них  m осіб. Організаторам конференції треба скласти і реалізувати алгоритм, який знаходить кількість усіх зустрічей, які можуть відбутися між: а) двома делегаціями конференції; б) між двома особами, які є учасниками конференції; в) між трьома делегеціями; г) між трьома особами.
program Conferenz1;                        {оголошення  назви    алгоритму}
var k,m,n: integer;                {оголошення  змінних цілих величин   k,m,n для  алгоритму}           
begin  writeln(' введіть кількість делегацій: 4<k<10  k='); readln(k);      {ведення числа k}
writeln(' введіть кількість осіб в делегації:  3<m<12  m='); readln(m);    {ведення числа m}
n:=(k-1)*k div 2;                                       {обчислення кількості усіх двосторонніх зустрічей}
writeln('кількість усіх двосторонніх зустрічей між', k, 'делегаціями:  n=', n);
n:=(m*k-1)*m*k div 2;    {обчислення кількості усіх двосторонніх зустрічей між особами }
writeln('кількість усіх двосторонніх зустрічей між', m*k, 'учасниками:  n=', n);
n:=(k-2)* (k-1)*k div 6;                 {обчислення кількості усіх тристоронніх зустрічей }
writeln('кількість усіх тристоронніх зустрічей між', k, 'делегаціями:  n=', n);
n:=(m*k-2)* (m*k-1)*m*k div 6;    {обчислення кількості усіх тристоронніх зустрічей }
writeln('кількість усіх тристоронніх зустрічей між', m*k, 'учасниками:  n=', n);   writeln; end.
Протестуйте алгоритм для пар  чисел (k; m)={(15; 17), (8; 12), (14; 15), (18; 10), (12; 15; 25).

Завдання 2. На конференцію прибуде k делегацій. Організаторам конференції треба скласти і реалізувати алгоритм, який знаходить тривалість в годинах конференції, якщо  на конференції відбудуться  лише тристоронні зустрічі між делегаціями,  і на кожну таку зустріч разом з перервою витрачається  m хвилин, протягом  цих хвилин  одночасно можуть відбутися  тільки  n зустрічей. Врахуовуйте, що по p хвилин  проходитиме відкриття та закриття конференції.
 program Conferenz2;                        {оголошення  назви    алгоритму}
var k,m,n,p: integer;                {оголошення  змінних цілих величин   k,m,n для  алгоритму}           
begin  writeln(' Введіть кількість делегацій: 4<k<20  k='); readln(k);      {введення числа k}
writeln(' Введіть тривалість однієї зустрічі: 4<m<60  m='); readln(m);  {введення числа m}
writeln(' Введіть кількість  одночасних  зустрічей:  3<n<20  n='); readln(n);    { число n}
writeln(' Введіть тривалість  відкриття і закриття 15<p<60  p='); readln(p);    { число p}
n:=m div 30 +n*(k-2)* (k-1)*k div (360*p);         {обчислення  часу тривалості  конференції }
writeln('Тривалість  конференції  n=', n, 'год');
writeln; end.
Протестуйте алгоритм для четвірок чисел (k; m; n; р)={(9; 20; 3; 30)=10 год, (10; 15; 3; 20)=10 год, (20; 20; 20; 30)=20 год, (15; 30; 5;  30)=10 год}.
Завдання 3. На бізнес-конференцію прибуде k делегацій, із яких тільки m делегацій матимуть лише тристоронні зустрічі, а  усі інші учасники матимуть тільки двосторонні зустрічі.  Організаторам конференції треба скласти і реалізувати алгоритм, який знаходить суму усіх внесків  на банківський рахунок  конференції, якщо  на конференції усі делегеції  за усі свої тристоронні зустрічі між делегаціями одноразово сплачують n доларів,  і усі делегеції  за усі двосторонні зустрічі одноразово сплачують p доларів,  Враховуйте, що  на конференції не існує делегацій, у яких не  проходитиме  зустрічей на конференції.
 program Conferenz3;                        {оголошення  назви    алгоритму}
var k,m,n,p: integer;                {оголошення  змінних цілих величин   k,m,n для  алгоритму}           
begin  writeln(' Введіть кількість делегацій: 4<k<20  k='); readln(k);      {введення числа k}
writeln(' Введіть кількість делегацій для тристорон. зустрічей: 4<m<20  m='); readln(m); 
writeln(' Введіть тариф за тристоронні зустрічі:  1000<n<10000  n='); readln(n);    
writeln(' Введіть тариф за двосторонні зустрічі:  1500<p<60000  p='); readln(p);    
n:=m*n + (k-m)*p;         {обчислення  cуми внесків  конференції }
writeln(' cуми внесків від делегацій  конференції  n=', n, 'доларів');
writeln; end.
Протестуйте алгоритм для четвірок чисел (k; m; n; р)={(20; 5;1000; 30000)=455 000 дол, (7; 3; 2000; 5000)=20 000 дол, (15; 9; 1200; 3700)=33000 год, (18; 10; 2500; 3000)=49000 дол}.

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




БАНК ЗАВДАНЬ «Лінійні алгоритми»

1.     Створити та реалізувати мовою програмування лінійний алгоритм, що знаходить за трьома відомими сторонами трикутника a, b, c e три дійсні числа – real, які  вводяться з клавіатури) половину периметрa(р=а+b+c), площу(S=(p(p-a)(p-b)(p-c))0,5), радіус описаного кола (R=abc/4S), радіус вписаного кола(r=S/p).  Вивести на екран шукані величини.
2.    Створити та реалізувати мовою програмування лінійний алгоритм, що знаходить за трьома відомими сторонами трикутника a, b, c e три дійсні числа – real, які  вводяться з клавіатури) усі висоти(Ha = 2(p(p-a)(p-b)(p-c))0,5)/a, Hb = 2(p(p-a)(p-b)(p-c))0,5)/b, Hc = 2(p(p-a)(p-b)(p-c))0,5)/c)  трикутника.  Вивести на екран шукані величини.
3.    Створити та реалізувати мовою програмування лінійний алгоритм, що знаходить за трьома відомими сторонами трикутника a, b, c e три дійсні числа – real, які  вводяться з клавіатури)   усі медіани (ma = 0.5(2b2 +2c2-a2)0,5, mb = 0.5(2a2 +2a2-b2)0,5), mc = 0.5(2b2 +2a2-c2)0,5 трикутника.  Вивести на екран шукані величини.
4.    Створити та реалізувати мовою програмування лінійний алгоритм, що за відомими фізичними величинами a1, m1, m2(дійсні  числа)   і законом збереження імпульсу a2=a1m1/m2 знаходить прискорення другого  фізичного об’єкта(тіла).  Вивести на екран шукані величини.  
5.    Створити та реалізувати мовою програмування лінійний алгоритм, що знаходить за відомим ребром куба а(дійсне число) знаходить площу поверхні куба( S = 6a2 ), об'єм куба (V = a3 ), діагональ куба (D=a(3)0.5), діагональ грані куба (L=a(2)0.5).  Вивести на екран шукані величини.
r    


      https://blockly-demo.appspot.com/static/demos/code/index.html?lang=uk

         Практична робота 10.
 Лінійні алгоритми мовою Pascal

Завдання 1. На конференцію прибуде k делегацій, у кожній з них  m осіб. Організаторам конференції треба скласти і реалізувати алгоритм, який знаходить кількість усіх зустрічей, які можуть відбутися між: а) двома делегаціями конференції; б) між двома особами, які є учасниками конференції; в) між трьома делегеціями; г) між трьома особами.
program Conferenz1;                        {оголошення  назви    алгоритму}
var k,m,n: integer;                {оголошення  змінних цілих величин   k,m,n для  алгоритму}           
begin  writeln(' введіть кількість делегацій: 4<k<10  k='); readln(k); {ведення числа k}
writeln(' введіть кількість осіб в делегації:  3<m<12  m='); readln(m); {введення  m}
n:=(k-1)*k div 2;        {обчислення кількості усіх двосторонніх зустрічей}
writeln('кількість усіх двосторонніх зустрічей між', k, 'делегаціями:  n=', n);
n:=(m*k-1)*m*k div 2;    {обчислення кількості усіх двосторонніх зустрічей між особами }
writeln('кількість усіх двосторонніх зустрічей між', m*k, 'учасниками:  n=', n);
n:=(k-2)* (k-1)*k div 6;                 {обчислення кількості усіх тристоронніх зустрічей }
writeln('кількість усіх тристоронніх зустрічей між', k, 'делегаціями:  n=', n);
n:=(m*k-2)* (m*k-1)*m*k div 6;    {обчислення кількості усіх тристоронніх зустрічей }
writeln('кількість усіх тристоронніх зустрічей між', m*k, 'учасниками:  n=', n);   writeln; end.
Протестуйте алгоритм для пар  чисел (k; m)={(15; 17), (8; 12), (14; 15), (18; 10), (12; 15; 25).

Завдання 2. На конференцію прибуде k делегацій. Організаторам конференції треба скласти і реалізувати алгоритм, який знаходить тривалість в годинах конференції, якщо  на конференції відбудуться  лише тристоронні зустрічі між делегаціями,  і на кожну таку зустріч разом з перервою витрачається  m хвилин, протягом  цих хвилин  одночасно можуть відбутися  тільки  n зустрічей. Врахуовуйте, що по p хвилин  проходитиме відкриття та закриття конференції.
 program Conferenz2;                        {оголошення  назви    алгоритму}
var k,m,n,p: integer;    {оголошення  змінних цілих величин   k,m,n для  алгоритму}           
begin  writeln(' Введіть кількість делегацій: 4<k<20  k='); readln(k);    {введення k}
writeln(' Введіть тривалість однієї зустрічі: 4<m<60  m='); readln(m);  {введення  m}
writeln(' Введіть кількість  одночасних  зустрічей:  3<n<20  n='); readln(n);    { n}
writeln(' Введіть тривалість  відкриття і закриття 15<p<60  p='); readln(p);    { p}
n:=m div 30 +n*(k-2)* (k-1)*k div (360*p);         {обчислення  часу конференції }
writeln('Тривалість  конференції  n=', n, 'год');
writeln; end.
Протестуйте алгоритм для четвірок чисел (k; m; n; р)={(9; 20; 3; 30)=10 год, (10; 15; 3; 20)=10 год, (20; 20; 20; 30)=20 год, (15; 30; 5;  30)=10 год}.
Завдання 3. На бізнес-конференцію прибуде k делегацій, із яких тільки m делегацій матимуть лише тристоронні зустрічі, а  усі інші учасники матимуть тільки двосторонні зустрічі.  Організаторам конференції треба скласти і реалізувати алгоритм, який знаходить суму усіх внесків  на банківський рахунок  конференції, якщо  на конференції усі делегеції  за усі свої тристоронні зустрічі між делегаціями одноразово сплачують n доларів,  і усі делегеції  за усі двосторонні зустрічі одноразово сплачують p доларів,  Враховуйте, що  на конференції не існує делегацій, у яких не  проходитиме  зустрічей на конференції.
 program Conferenz3;                        {оголошення  назви    алгоритму}
var k,m,n,p: integer;                {оголошення  змінних цілих величин   k,m,n }           
begin  writeln(' Введіть кількість делегацій: 4<k<20  k='); readln(k);      {введення k}
writeln(' Введіть кількість делегацій для тристорон. зустрічей: 4<m<20  m='); readln(m); 
writeln(' Введіть тариф за тристоронні зустрічі:  1000<n<10000  n='); readln(n);   
writeln(' Введіть тариф за двосторонні зустрічі:  1500<p<60000  p='); readln(p);   
n:=m*n + (k-m)*p;         {обчислення  cуми внесків  конференції }
writeln(' cуми внесків від делегацій  конференції  n=', n, 'доларів');
writeln; end.
Протестуйте алгоритм для четвірок чисел (k; m; n; р)={(20; 5;1000; 30000)=455 000 дол, (7; 3; 2000; 5000)=20 000 дол, (15; 9; 1200; 3700)=33000 дол, (18; 10; 2500; 3000)=49000 дол}.
Завдання 4.  (3 бали). Самостійно скласти і реалізувати алгоритм, що  знаходить окремо кількість чотиристоронніх  договорів( кожна делегація  за результатами тристоронньої зустрічі отримує два лише договори) і окремо кількість двосторонніх договорів, які отримують учасники конференції при умові завдання 3.


Практична робота 11.
Лінійні алгоритми алгебраїчного змісту

Завдання 1. Створити, реалізувати алгоритм мовою Pascal, який знаходить значення функції f(x)=a*x8+ b*x6- c*|x3-x5|, якщо x, а,  b, с – випадкові цілі числа.
program Polinom1;
var a, b, c, x, f: integer;
begin
a:=-random(60);    b:=100-random(20); с:= 10-random(300); x:= 10-random(20);
writeln(‘Число  a=’, a); writeln(‘Число  b=’, b); writeln(‘Число  c=’, c);
writeln(‘Число  x=’, x);
f:=a* x* x* x* x* x* x+b* x* x* x* x* x* x –c*abs(x* x* x- x* x* x* x* x);
writeln(‘Значення функції для випадкових чисел  f=’, f); writeln(‘****’); end.

Протестуйте правильність алгоритму:     1)a:=75;    b:= 160; c:= 2; x =7.
 2) a:=80;    b:= 160; c:= 3;  x=-1.   3) a:=70;    b:= 160;c:= -7;  x= 4.  
4)a:=90;    b:=160; c:= 9; x=17.
Завдання 2. Створити, реалізувати алгоритм мовою Pascal, який знаходить значення функції f(x)= якщо x, а,  b, с – випадкові додатні  дійсні числа.
program Drob2;
var a, b, c, x, f: real;
begin
a:=1+random(60);    b:=12+random(30); c:= 11+random(40); x:= 10+random(20);
writeln(‘Число  a=’, a); writeln(‘Число  b=’, b); writeln(‘Число  c=’, c);
writeln(‘Число  x=’, x);
f:=sqrt((a+c)*x*x*x+b*x*x+x)/((c+b)*x*x*x+a*x*x+x);
writeln(‘Значення функції для випадкових чисел  f=’, f); writeln(‘****’); end.
Протестуйте правильність алгоритму:1)a:= 5; b:= 6; c:= 2; x =7.   2) a:=8; b:= 1; c:= 3;  x=1.   3) a:=7;    b:= 5;c:= 7;  x= 4.   4)a:=9;    b:=3; c:= 8; x=2.
Завдання 3. Створити, реалізувати алгоритм мовою Pascal, який знаходить значення функції f(x)= якщо x, а,  b, с – випадкові від’ємні дійсні числа.
program Drob3;
var a, b, c, x, f: real;
begin
a:=-1-random(60);    b:=-12-random(30); c:=- 11-random(40); x:= -10-random(20);
writeln(‘Число  a=’, a); writeln(‘Число  b=’, b); writeln(‘Число  c=’, c);
writeln(‘Число  x=’, x);
f:=(a/sqrt(x*x+2))-(b/ sqrt(x*x+3)) +(c/ sqrt(x*x+4));
writeln(‘Значення функції для випадкових чисел  f=’, f); writeln(‘****’); end.
Протестуйте правильність алгоритму:     1)a:=-75;    b:=-100;  c=-85; x =-7.    2) a:=-80;    b:= -120; c=-95; x =-37.    3) a:=-70;    b:= -100;  c=-105;  x =-27.     4)a:=-190;    b:=-180,  c=-185;  x =-17.   
Завдання 4.  Самостійно створити, реалізувати алгоритм мовою Pascal, який знаходить периметр та площу довільного прямокутника, якщо відомо у нього довжини двох сусідніх сторін.



Практична робота 12.
Лінійні алгоритми мовою Pascal

Завдання 1.  На конференцію приїхали рівно по k представників від m(не менше ніж 2) фірм-конкурентів по виробництву гри "Саmрf", при цьому, усі представники різних фірм є конкурентами. Відомо, що у кожного учасника конференції рівно  n конкурентів серед усіх інших учасників.  Скласти алгоритм, який знаходить найбільшу кількість учасників  та найменшу кількість фірм-конкурентів в конференції?
 Розв’язання.  Кількість учасників конференції дорівнює km осіб. З іншого боку, кількість конкурентів у одного представника дорівнює k(m-1)= n, звідси маємо рівність kmn + k, права частина якого є лінійний вираз відносно двох змінних. Лінійний вираз р(k)= n + k досягає свого найбільшого і найменшого значення на межах числового проміжка від 1 до n. Якщо   k = n, то маємо найбільше значення р(n)= n + n =2n, тому  nm = 2n, звідси  m = 2. Відповідь: 2n осіб, 2 фірми.
Алгоритм мовою Pascal
program МіnConkurent;    var k,m,n:integer;    begin
writeln('введіть число конкурентів  в особи 2<n<109  n='); readln(n);
write('найбільше:', 2*n, ' осіб');  {вивід найбільшого числа учасників}
write('найменше: 2 фірми'); {вивід найменшого числа учасників}
end.                              {оголошення кінця алгоритму}
Завдання 2.  На конференцію приїхали рівно по k представників від m(не менше ніж 2) фірм-конкурентів по виробництву гри "Саmрf", при цьому, усі представники різних фірм є конкурентами. Відомо, що у кожного учасника конференції рівно  n конкурентів серед усіх інших учасників.  Скласти алгоритм, який знаходить найбільшу кількість фірм-конкурентів і найменшу кількість представників в конференції?
 Розв’язання.  Кількість учасників конференції дорівнює km осіб. З іншого боку, кількість конкурентів у одного представника дорівнює k(m-1)= n, звідси маємо рівність kmn + k, права частина якого є лінійний вираз відносно двох змінних. Лінійний вираз р(k)= n + k досягає свого найбільшого і найменшого значення на межах числового проміжка від 1 до n. Якщо   у формулі р(k)= n + k,  підставимо k = 1, то отримаємо найменше значення р(1)= n + 1 , тому найбільше значення m = n+1, звідси  n = m-1. Відповідь: n+1 фірм, 1 особа.
Алгоритм мовою Pascal
program МахConkurent;    var n:integer;    begin
writeln('введіть число конкурентів  в особи 2<n<109  n='); readln(n);
write('найбільше:' n+1, 'фірм');  {вивід найбільшого числа фірм}
write('найменше: 1 представник від фірми'); {вивід найменшого числа представників }   end.   {оголошення кінця алгоритму}
Завдання 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.
Завдання 4. Самостійно скласти і реалізувати алгоритм впорядкування виразів: (n/k)+(p/m)-(m/p)-(k/m); та (р/k)+(n/m)-(k/n)-(n/p) в порядку зростання для дробових чисел k,m,n,p.
Завдання 5. Самостійно скласти і реалізувати алгоритм впорядкування виразів: (1/k)+(1/m)-1/p)-(1/n); та (1/k)+(1/p)-(1/m)-(1/n) в порядку зростання для дробових чисел k,m,n,p.

Практична робота 13.
Лінійні алгоритми мовою Pascal

Завдання 1. Cтворити та реалізувати мовою програмування Pascal випадкове трицифрове число і розділити його на цифри. Оскільки ми користуємося позиційною десятковою системою, то поділ числа на цифри виконується цілочисельним діленням даного числа на 10. Для цього використовуємо операції DIV та MOD.
Program PROBA_01;
var a:integer;
begin   a:=1+random(999);
writeln(a div 100, '  ' , (a mod 100) div 10,'  ',a mod 10);  end.
Завдання 2. Cтворити та реалізувати мовою програмування Pascal, що знаходить найменшу кількість розрізів куба розміром АхВхС, де 1 ≤ А, B, C ≤ 200000.  на одиничні кубики розміром 1х1х1. Найменша кількість  розрізів не залежить від вибору порядку прорізання сторін і обчислюється за формулою. Виведемо її. Почнемо розрізати по стороні А і одразу проріжемо на максимальну кількість частин. Отримаємо А частин розміру 1*В*С і виконаємо А-1 розрізів. Далі ріжемо кожен з отриманих кусків по стороні В. Отримаємо А*В кусків розмірами 1*1*С, виконавши при цьому всього А*(В-1) розріз. Залишається виконати розрізання по стороні С. Буде виконано А*В*(С-1) розрізів. Усього маємо (А-1)+А*(В-1)+А*В*(С-1)=А-1+А*В-А+А*В*С-А*В=А*В*С-1 розрізів.
Program PROBA_02;
var a,b,c: integer;   begin      a:=abs(random(99999));
 b:=abs(random(999999));   c:=abs(random(99999));
writeln(abs((a*b*c)-1));  end.
Завдання 3.  Cтворити та реалізувати мовою програмування Pascal, що знаходить найбільшу кількість точок із цілочисельними координатами на аркуші в клітинку можна накрити квадратом зі стороною N клітинок(1 N 10000).  Накреслимо на папері в клітинку квадратики зі сторонами 1, 2, 3, ... клітинок. У першому випадку ми закриємо 4 точки, у другому – 9, у третьому – 16... Як бачимо, ми отримуємо числа, що є точними квадратами: 2^2, 3^2, 4^2... Тому для введеного числа А потрібно вивести квадрат наступного числа.
Program PROBA_03;
var a: integer;
begin   a:=abs(random(999999));   writeln((a+1)*(a+1)); end.  
Завдання 4.  N будинків вишикувані в ряд. Cтворити та реалізувати мовою програмування Pascal, що знаходить кількість способів поселити Віку та Юлю в різні будинки так, щоб ці будинки не були сусідніми.
Program PROBA_04;
var a: integer;
begin a:=abs(random(999999));  
writeln((a-2)*(a-1));  end.