неділя, 15 квітня 2018 р.

Практичні завдання на масивах


Масиви
Приклад 1.
1.    Const Namel: array [1..10] of real = (1, 3, 5, 7, 9, 0, 2, 4, 6, 8); 
     Сталий одновимірний масив Namel із 10   дійсних чисел; діапазон зміни індексів 1..10.
2.    а)  var Name2: array [1..10] of  real;
     б) const n=1; m=10;
         var Name2: array [n..m] of  real;
     Змінний одновимірний масив Name2 із 10 дійсних чисел; діапазон зміни індексів 1..10.
3.      а)  type Massiv=array [1..10] of  real;
     var Name3: Massiv;
б)  const n=1; m=10;
     type Massiv = array [n..m] of  real;
     var Name3: Massiv;
Тип Massiv як множина всіх одновимірних масивів із 10 дійсних чисел з діапазоном зміни індексів 1..10. Змінний одновимірний масив Name3 як проста змінна типу Massiv.

Приклад 2. Ввести з клавіатури в масив 20 цілих чисел.
program Zadacha62;
var A: array [1..10] of  integer; i: integer;
begin
   for i:=1 to 20 do read (A[i]);
end.

Приклад 3. Обчислити суму елементів масиву з n цілих чисел.
program Zadacha66;
const n=10;
var a: array [1..n] of integer; i, sum: integer;
begin
   for i:=1 to n do
   begin
      write ('Введіть',і, '- й елемент масиву'); read (a[i]);
   end;
   sum:=0;
   for i:=1 to n do sum:=sum + a[i];                      
   writeln ('Сума всіх елементів масиву дорівнює: ', sum);
end.

Приклад 4. Знайти у масиві місце розташування елементів із заданим значенням.
program Zadacha67;
const n=100;
var a: array [1..n] of real;
   x: real; i: integer;
begin
   writeln (Введіть елементи масиву');
   for i:=1 to n do read (a[i]);
   writeln ('Введіть значення для пошуку');
   read (x);
   for i:=1 to n do
      if a[i]=x then
      writeln ('на',і, '- місці масиву розташований заданий елемент',х:8:2);
end.

                          Зразок програми на мові Pascal 
program rescheto1;                          {Після назви програми записують БЛОК ОПИСІВ}      
var                                   {Після слова  var  оголошується  змінні величини у програмі}
    a:  array [1..5000] of  boolean;          {ЦЕ лінійний масив із логічними значеннями}
    n, x, y:  integer;                             {Це три змінні   із цілочисельними значеннями}
begin                            {Оголошується початок програми – БЛОК ОПИСУ ДІЙ}   
write('n='); readln(n);                  {Оголошується запрос і введення найбільшого числа n}
a[1] := false;        {1-е місце масиву a[х] присвоєно значення  «хибне», 1 – непросте число}
for x:=2 to n do a[x] := true;    {Цикл з лічильником масиву a[х] присвоює  значення  «істинне»}
for x:= 2 to n div 2{round(sqrt(N))} do   {Для змінної х цикл з лічильником від 2 до  n/2  (до n0,5)}
for y:= 2 to n div x do           {Для змінної  y маємо  вкладений цикл з лічильником від 2 до  n/ х}
a[x*y] := false;           {Елементам a[x*y] присвоєно  «хибне», бо це непросте число і кінець циклу}
for x:=1 to n do                                {Цикл з лічильником для перебігу по масиву a[х] від 1 до  n}
if a[x] then write(x,' ');   {неповне розгалуження  для вияву по масиву a[х] усіх істинних значень}
readln;    {Виводяться на друк тільки індекси х(прості числа)  для усіх істинних значень масиву a[х]}

end.                                                       {Оголошується кінець програми – БЛОКУ ОПИСУ ДІЙ}















Практична робота 36. Практичні завдання на масивах
Завдання 1. Створити, реалізувати та протестуватувати алгоритм мовою Pascal, що отримує всі можливі варіанти перевезень 1000 штук цегли візками місткістю 100, 300, 400, 500 шт. цегли і підраховує їхню кількість.
Program CEGLA1;
 const  n=1000;      
var   a,b,c,d:array[1..201] of integer; 
       k,x,y,i,z,u: integer;
begin  k:=0;
for  x:= 0 to n div 100 do begin  writeln(x, ' =x');
for  y:= 0 to n div 300 do begin   writeln(y, ' =y');
for  z:= 0 to n div 400 do begin     writeln(z, ' =z');
for  u:= 0 to n div 500 do  begin    writeln(u, ' =u');
writeln(100*x+300*y+400*z+500*u,   ' =100*x+300*y+400*z+500*u');
if  (100*x+300*y+400*z+500*u)=n   then  begin
k:=k+1;    a[k]:=x;     b[k]:=y;     c[k]:=z;      d[k]:=u;      end;  end;  end;  end;  end;
for  i:= 1 to k do  writeln(' 100 шт. цегли: ', a[i], '  300 шт. цегли: ', b[i], '   400 шт. цегли:  ', c[i], '   500 шт. цегли: ',  d[i]);
writeln (' Кількість способів перевезень ', n, '  шт. цегли: k= ', k); writeln(' ******'); end.
Протестуйте цей алгоритм, якщо: 1) const  n=900;  2) const  n=800;   3) const  n=700;    4) const  n=600;  5) const  n=1500.  

Завдання 2. Створити, реалізувати та протестуватувати алгоритм мовою Pascal, що отримує всі можливі варіанти пересилання поштою  120 книг ящиками місткістю 10, 15, 20, 50  книг і підраховує їхню кількість та вартість, якщо ціна ящика на 10 книг – 4 грн, на 15 книг – 5.5 грн, на 20 книг – 7.5 грн,  на 50 книг – 19 грн.
Program KNYGA2;
 const  n=120;      var   a,b,c,d:array[1..201] of integer;        k,x,y,i,z,u: integer;
begin  k:=0;
for  x:= 0 to n div 10 do begin  writeln(x, ' =x');
for  y:= 0 to n div 15 do begin   writeln(y, ' =y');
for  z:= 0 to n div 20 do begin     writeln(z, ' =z');
for  u:= 0 to n div 50 do  begin    writeln(u, ' =u');
writeln(10*x+15*y+20*z+50*u,   ' =10*x+15*y+20*z+50*u');
if  (10*x+15*y+20*z+50*u')=n   then  begin
k:=k+1;    a[k]:=x;     b[k]:=y;     c[k]:=z;      d[k]:=u;      end;  end;  end;  end;  end;
for  i:= 1 to k do  writeln(' 10 книг: ', a[i], '  15 книг: ', b[i], '   20 книг:  ', c[i], '   50 книг: ',  d[i], '   Вартість пересилки:  ' ,  4*a[i] +5.5*b[i]+ 7.5*c[i]+ 19*d[i]);
writeln (' Кількість способів перевезень ', n, '  книг: k= ', k); writeln(' ******'); end.
Протестуйте цей алгоритм, якщо: 1) const  n=90;  2) const  n=80;   3) const  n=170;    4) const  n=60;  5) const  n=150.  



Практична робота 31. Обчислювальні алгоритми на масивах.
Завдання 1. Створити та реалізувати алгоритм мовою Pascal, який підносить до квадрату парні  остачі усіх чисел в одномірному масиві(рядок чисел) при діленні на 7 і підносить до кубу непарні остачі (mod 7) та виводить   результати цих дій  у новий масив. І до того ж   знаходить суму усіх цих остач.  При цьому  у початковому масиві числа задаються алгоритмом, як випадкові 7-цифрові цілі  від’ємні числа.
program MOD1;     {Підрахунок і дії з остачами для усіх елементів числового масиву}
const  n=2;    var a, b: array [1..n] of  integer;         s, i: integer;
begin        writeln ( 'Виводиться    ', n,  '  випадкових елементів масиву A:');
 for   i:=1  to   do  begin     a[i]:=-1000000-random(9000000);  write(' а[', i, ']=: ', a[i]);  write('     '); end; writeln;  writeln ( 'Виводиться    ', n,  '  елементів масиву остач:');
  s:=0;        for i:=1 to n do  begin  b[i]:=a[i]  mod  7   s:=s+b[i];   write('b[', i, ']= ', b[i]);  write('  '); end; writeln; writeln('Сума усіх остач елементів масиву =', s); writeln('***');
for i:=1 to n do  begin  if  b[i] mod 2=0 then b[i]:= b[i]* b[i]  else b[i]:= b[i]* b[i]* b[i];
write('c[', i, ']= ', b[i]);  write('     '); end; writelnwriteln('************');end.
Протестувати  алгоритм для 9-цифрових: а) const =9; б) const =8;  в) const =25. 
Завдання 2. Створити та реалізувати алгоритм мовою Pascal, який знаходить  парні числа і ділить ці числа на 2 та знаходить непарні числа і подвоює їх в двовимірному  масиві(таблиця чисел). При цьому  у початковому масиві алгоритмом задаються випадкові 8-цифрові цілі,  як додатні  так і від’ємні  числа.
program ODD2;   {Дії окремо з парними  та окремо з непарними елементами масиву}
const  n=3;       var  a: array [1..n, 1..n] of integer;             j, i, p: integer;
begin        writeln ( 'Вводиться    ', n*n,  '  випадкових елементів масиву');
for  i:=1 to n do begin  for j:=1 to n do begin        a[i, j]:=-4000000+random(90000000);
write('  а[', i, ' ,' , j, ' ]= ', a[i, j]);  write('  '); end;    writeln('  ');  end;  writeln ('Масив:');
    p:=0;   for i:=1 to n do begin       for   j:=1 to n do begin
  if  (a[i, j] mod 2)=0   then begin  p:=p + 1;  a[i, j]:=a[i, j] div 2  end  else a[i, j]:=2*a[i, j];
write('  b[', i, ' ,' , j, ' ]=', a[i, j]);     write('  '); end;    writeln('  ');  end;  writeln;
writeln('Кількість парних елементів масиву =', p);
writeln('Кількість непарних елементів масиву =', n*n- p); writeln('*******');end.
Протестувати  алгоритм для 4-цифрових: а) const =4; б) const =5;  в) const =8. 
Завдання 3. Створити та реалізувати алгоритм мовою Pascal, який виводить два масиви розміром nxn у вигляді рядків та стовпців і знаходить потроєну суму та  потроєну різницю цих двох  двовимірних  масивів А та В(таблиці з різними числами,  котрі збільшені в 3 рази), якщо у двох масивах алгоритмом задаються випадкові 6-цифрові цілі додатні  числа.
program SUM3DELTA3;   { Потроєна сума або потроєна різниця масивів: С= 3А ± 3В}
const  n=2;       var  b, a: array [1..n, 1..n] of integer;   k,m,  j, i: integer;
begin   writeln ( 'Виводиться  по  ', n*n,  '  випадкових елементів  масивів А та В');
for i:=1  to n do   begin      for j:=1  to n do  begin   a[i,j]:= 100000+random(90000) ; 
 write('  a[',i,';',j,']:= ' ,  a[i,j]);   end; writeln('   ');  end;  writeln(' Другий  масив:');
 for i:=1  to n do   begin     for j:=1  to n do  begin     b[i,j]:= 100000+random(90000);  
write('  b[',i,';',j,']:= ', b[i,j]);   end; writeln('   '); end;  writeln('   '); writeln(' Відповідь.');
for i:=1 to n do begin for    j:=1 to n do begin  write('  3a+3b[', i, ' ,' , j, ' ]= ', 3*( a[i,j]+ b[i,j] )); end; writeln('   '); end;  writeln('   ');   writeln('   ');  for  k:=1 to n do begin  for  m:=1 to n do begin   write('  3a-3b[', k, ' ,' , m, ' ]= ', 3*( a[k,m]- b[k,m]));  end; writeln('   '); end;  writeln('   '); writeln; end.
Протестувати  алгоритм для 10-цифрових: а) const =3; б) const =4;  в) const =9. 
Практична робота 32. Обчислювальні алгоритми на масивах.
Завдання 1. Створити та реалізувати алгоритм мовою Pascal, який знаходить потроєний квадрат суми усіх чисел в одномірному масиві, тобто  С= 3(а12+…+ар)2 і виводить новий масив, в якому кожний і-ий елемент дорівнює числу: C -a і*aі  , якщо у даному масиві А алгоритмом задаються випадкові 7-цифрові цілі  від’ємні числа.
program QUADRATSUMMA1; {Підрахунок потроєного квадрату суми чисел масиву}
const  n=2;    var a, b: array [1..n] of  integer;        c, s, i: integer;
begin        writeln ( 'Вводиться    ', n,  '  випадкових елементів масиву A:');
     for   i:=1  to  n   do  begin     a[i]:=-1000000-random(9000000);
write(' а[', i, ']=: ', a[i]);  write('     '); end; writeln;
writeln ( 'Виводиться    ', n,  '  елементів нового масиву різниць  C ІІ:');
     s:=0;        for i:=1 to n do  s:=s+a[i];   C:=3*s*s;
for i:=1 to n do  begin write('b[', i, ']= ', c- a[i]*a[i]);  write('     '); end; writeln;
writeln('Потроєний квадрат суми елементів масиву А:', C); writeln('*****************'); end.
Протестувати  алгоритм для 4-цифрових: а) const =7; б) const =6. 
Завдання 2. Створити та реалізувати алгоритм мовою Pascal, який змінює усі числа на протилежні і обмінює числа  місцями відносно головної діагоналі в двовимірному  масиві, якщо у масиві алгоритмом задаються випадкові 8-цифрові цілі додатні і від’ємні  числа.
program TRANSPONUVAN2;   {Обмін  елементів масиву відносно головної діагоналі}
const  n=3;       var  a,b: array [1..n, 1..n] of integer;            s, m, j, i, p: integer;
begin        writeln ( 'Вводиться    ', n*n,  '  випадкових елементів масиву');
     for    i:=1 to n do begin          for    j:=1 to n do begin 
      a[i, j]:=10000000+random(90000000)*(1- random(3));
write('  a[',i,';',j,']:= ' ,  a[i,j]);   end; writeln('   ');  end;  writeln(' Змінений  масив:');
p:=0;   for i:=1 to n do begin       for   j:=1 to n do begin
 b[i, j] :=- a[j,i];  write('  b[', i, ' ,' , j, ' ]=', b[i, j]);  write('  '); end; writeln('  ');  end;  writeln;
writeln('*****************');end.
Протестувати  алгоритм для 4-цифрових: а) const =2; б) const =4;   в) const =5
Завдання 3. Створити та реалізувати алгоритм мовою Pascal, який виводить два масиви розміром nxm у вигляді рядків та стовпців і знаходить поелементу різницю між потроєними  числами першого рядка масиву та подвоєними  числами другого рядка   двовимірного  масиву А(nxm) і результат записує у третій рядок, якщо у масиві А алгоритмом задаються випадкові 1-цифрові цілі додатні  числа.
program DELTA3;   {Різниця між потроєними  числами першого рядка масиву }
const  n=3; const  m=4;       var  b, a: array [1..n, 1..m] of integer;     j, i: integer;
begin   writeln ( 'Виведення ', n*m,  '  випадкових елементів масиву A: ');
for i:=1  to n do   begin      for j:=1  to m do  begin   a[i,j]:= 1+random(10) ;
 write('   a[',i,';',j,']:= ' ,  a[i,j]);   end; writeln('    ');  end;  writeln('   ');
writeln('Шуканий масив: ');
 for i:=1  to m do   begin  a[3, i]:= 3*a[1, i]- 2*a[2, i]; end;
 for i:=1  to n do   begin      for j:=1  to m do  begin
write('   b[',i,';',j,']:= ' ,  a[i,j]);   end; writeln('    ');  end;  writeln('   ');
writeln;   end.
Протестувати  алгоритм для   а) випадкових  10-цифрових: const  n=6; const  m=9
б) випадкових  7-цифрових:  const  n=7; const  m=8;  в)  4-цифрових: const  n=4; const  m=5.   



Завдання 1. Самостійно створити, реалізувати та протестуватувати алгоритм  SYK3 мовою Pascal, що отримує всі можливі варіанти розливання  30 літрів соку у тару місткістю 1, 2, 3, 5  літрів і підраховує їхню кількість та вартість, якщо ціна тари на 1 літру – 9 грн, на 2 літри  – 17.5 грн, на 3 літри –25.5 грн,  на 5 літрів  – 43 грн.

Завдання 2. Самостійно створити, реалізувати та протестуватувати алгоритм  BENZUN4 мовою Pascal, що отримує всі можливі варіанти розливання  45 літрів  бензину у тару місткістю 5, 10, 15, 20  літрів і підраховує їхню кількість та вартість, якщо ціна тари на 5 літрів – 145 грн, на 10 літрів  – 275 грн, на 15 літрів –425.5 грн,  на 20 літрів  – 550 грн.



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

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