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

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

Практична робота 1. Лінійні алгоритми мовою Pascal
Завдання 1(6 балів). Скласти і реалізувати алгоритм в програмному середовищі, який виконує взаємний обмін числовими значеннями двох цілих змінних; і виводить на екран  два початкових значення змінних і два кінцеві значення цих змінних. Використовувати в алгоритмі більше двох цілих змінних не можна.
Алгоритм  мовою 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.
Завдання 2(6 балів). Cамостійно скласти і реалізувати алгоритм program SuperposiziaNumer, який виконує взаємний обмін числовими значеннями між трьома цілими  змінними; і виводить на екран  три початкових значення змінних і три  кінцеві значення цих змінних. Використовувати в алгоритмі більше чотирьох  цілих змінних не можна.
Протестувати правильну роботу цього алгоритму  для трійок цілих  чисел:
 -2;  -9 і 17;      -1;  0 і 7;      7;  100 і 250;         -300;  -900 і - 1000.


Практична робота 2. Лінійні алгоритми мовою Pascal
Завдання 1(6 балів). Скласти і реалізувати алгоритм в програмному середовищі, який визначає із двох довільних дійсних чисел найменше число та найбільше число. Значення  двох дійсних змінних вводяться зклавіатури; і виводить на екран  найменше значення із двох  чисел  та найбільше значення із двох  чисел. Використовувати в алгоритмі більше трьох дійсних змінних не можна.
Алгоритм  мовою Pascal
program  МАхМіnNumer;  {алгоритм знаходження МАХ(x;y) та МІN(x;y) }
var     {оголошується опис змінних величин, які використовує алгоритм}
x,y,z: real;            {оголошуються три дійсні  змінні у даному  алгоритмі}
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 і -17;      0 і -8;    -2 і 0;    -1 і 1;    100 і 250;    900  і - 1000.
Завдання 2(6 балів). Cамостійно скласти і реалізувати алгоритм в програмному середовищі, який визначає із трьох довільних дійсних чисел найменше число та найбільше число. Значення  трьох дійсних змінних вводяться з клавіатури; і результат  виводить на екран  найменше значення із трьох  чисел  та найбільше значення із трьох  чисел. Використовувати в алгоритмі більше чотирьох дійсних змінних не можна.
Протестувати правильну роботу цього алгоритму  для трійок цілих  чисел:

 -2;  -9 і -17;      -1;  0 і - 7;      7;  100 і 250;         300;  300 і - 300.


Практична робота 3. Лінійні алгоритми мовою 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).


Практична робота 4. Лінійні алгоритми мовою 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-кутника. Тоді ймовірність зустрічі(це відношення площ геометричних фігур в прямокутній системі координат xOy)
 Р(А)=(Площа 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).

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

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