Навчити розробляти алгоритми пошуку в таблицях елементів із заданими властивостями.
Тип уроку: Лекційний з практичними прикладами.
Для організації пошуку в таблиці елементів із заданими властивостями необхідно
організувати циклічний перегляд всіх елементів, кожний з яких командою розгалуження
порівняти із заданим еталоном або перевірити на деяку властивість. Якщо масив
одновимірний, цикл для організації перегляду всіх елементів буде один, якщо
ж масив двовимірний - циклів буде два.
Задача №314 (2).
Умова: Дано натуральне число n та послідовність дійсних
чисел a1, a2, … an. Визначити в цій послідовності кількість сусідств
двох чисел різного знаку.
Перш за все запропонуємо в цій задачі інший метод опису масиву з використанням
константи, що задає розмір масиву, та вказівки Type. А, по-друге, звертаємо
вашу увагу на те, що для визначення двох сусідніх елементів масиву використовується
загальний опис індексів i та i+1 (можна і-1 та і),
а це при організації циклу можне викликати ситуацію виходу за межі масиву.
Дійсно, якщо організувати цикл з параметром для зміни індексу від 1 до
N, де N - кількість елементів масиву, то при i=N значення
і+1 буде виходити за межі масиву. Це являється синтаксичною помилкою,
що призводить до неочікуваних результатів, тому цикл треба організовувати
не для зміни індексу від 1 до N, а для зміни від 1 до
N-1.
Program Example_314_2; Uses crt; Const N=100; Type Masiv = array[1..N] of real; Var A:Masiv; {A - масив для зберігання даних чисел}
i,count:byte; {і - змінна циклу, count - кількість сусідств} Begin Randomize; Clrscr; count:=0; For i:=1 to N do Begin A[i]:=random*100-random*50; {Заповнення масиву випадковими дійсними числами} Write(A[i]:8:2); {Виведення масиву на екран для контролю правильності роботи програми} End; For i:=1 to N-1 do Begin If (A[I]<0) and (A[I+1]>0) or (A[I]>0) and (A[I+1]<0) then count:=count+1; End; Writeln; Writeln('Кількість заданих сусідств ',count); Readkey; {Затримка зображення на екрані} End.Задача №321(1,2).
Program Example_321_1_2; Uses crt; Const n = 30; Var A:array[1..n] of integer; {A - масив даних чисел} i:byte; {і - зміннa циклу} count,N_max:byte; {count - кількість максимальних елементів в масиві, N_max - номер першого найбільшого елементу} max:integer; {max - максимальний елемент масиву} Begin Clrscr; Randomize; {Заповнення масиву випадковими числами та виведення його на екран для контролю за роботою програми} For i:=1 to n do Begin A[i]:=random(150) - random(80); Write(A[i]:5); end; {Надання змінним початкових значень} max:=A[1]; N_max:=1; count:=0; {Прохід по масиву для пошуку максимуму та його номеру} for i:=1 to n do begin if A[i]> max then begin max:=A[i]; N_max:=i; end; end; {Другий прохід по масиву для підрахунку кількості максимальних елементів} for i:=1 to n do begin if A[i]= max then count:=count+1; end; Writeln('Максимум = ',max); Writeln('Номер першого максимума = ',N_max); Writeln('Кількість максимумів = ',count); Readkey; {Затримка зображення на екрані} End.Задача №350(1).
Program Example_350_1; Uses crt; Const n = 8; Type Masiv = array[1..n,1..n] of real; Var A:Masiv; {A - масив для зберігання даних чисел} i,j:byte; {і,j - змінні циклу} count_plus,count_minus:word; Begin Clrscr; count_plus:=0; count_minus:=0; For i:=1 to n do Begin For j:=1 to n do begin A[i,j]:=sin(i+j); {Заповнення масиву} Write(A[i,j]:8:2); {Виведення на екран} If A[I,j] > 0 Then count_plus: = count_plus + 1; If A[I,j] < 0 Then count_minus: = count_minus + 1; end; writeln; End; Writeln('Кількість додатних елементів масиву - ',count_plus); Writeln('Кількість від'ємних елементів масиву - ',count_minus); Readkey; {Затримка зображення на екрані} End.Задача №352.
Program Example_352; Uses crt; Const n = 10; Type Masiv = array[1..n,1..n] of real;
Var A : Masiv; {A - масив для зберігання даних чисел} i,j : byte; {і,j - змінні циклу} max : real; {max - максимальний елемент масиву} Begin Randomize; Clrscr; For i:=1 to n do Begin For j:=1 to n do begin A[i,j]:=random(120)/3-random*20; Write(A[i,j]:8:2); end; writeln; End; max:=A[1,1]; {Беремо у якості еталону перший елемент масиву} For i:=1 to n do For j:=1 to n do begin if A[i,j]>max then Max:=A[i,j]; {Порівнюємо кожен елемент масиву з еталоном і, якщо черговий елемент більший за еталон, переприсвоюємо еталон} end; End; Writeln('Максимальний елемент масиву - ',max:8:2); Writeln('Перетворена матриця: '); For i:=1 to n do begin For j:=1 to n do begin if A[i,j]=max then A[i,j]:=0; {Шукаємо максимуми в масиві і, знайшовши,присвоюємо їм нуль} write(a[i,j]:8:2); end; writeln; end; End; Readkey; {Затримка зображення на екрані}
End.Задача №355_1.
Program Example_355_1; Uses crt; Const n = 10; Type Masiv = array[1..n,1..n] of real; Var A:Masiv; i,j:byte; {і,j - змінні циклу} x:real; {x - шуканий елемент} count:word; {count - кількість входжень} Begin Randomize; Clrscr; Write('Введіть шуканий елемент: '); Readln(x); Count:=0; {Початок обрахунку} For i:=1 to n do Begin For j:=1 to n do begin A[i,j]:=random*120-random*80; Write(A[i,j]:8:2); If A[i,j]=x Then count:=count+1; end; writeln; End; Writeln('Кількість шуканих елементів - ',count); Readkey; {Затримка зображення на екрані} End.Задача №356.
Program Example_356; Uses crt; Const n = 9; m = 12; Type Masiv = array[1..n,1..m] of integer; Var A : Masiv; i,j : byte; {і,j - змінні циклу} Sum,SA : real; {Sum - сума елементів таблиці, SA - середнє арифметичне} Begin Randomize; Clrscr; Sum:=0; {Початкове значення суми} Writeln('Вихідний масив: '); For i:=1 to n do Begin For j:=1 to m do begin A[i,j]:=random(120)-random(65); Write(A[i,j]:5); Sum:=Sum+A[i,j]; {Накопичення суми елементів масиву} end; writeln; End; SA:=Sum/(n*m); Writeln('Середнє арифметичне - ',SA:8:2); Writeln('Результуючий масив: '); For i:=1 to n do Begin For j:=1 to m do begin if A[I,j] < SA then A[I,j]:=-1; if A[I,j] > SA then A[I,j]:=1; Write(A[i,j]:5); end; writeln; End; Readkey; {Затримка зображення на екрані} End.Задача №358.
Program Example_358; Uses crt; Type Masiv = array[1..6,1..9] of real; Var A:Masiv; i,j:byte; {і,j - змінні циклу} Sum,max:real; {Sum - сума елементів таблиці, max - максимальний елемент таблиці} N_max:byte; {N_max - номер рядка, що містить максимальний елемент} Begin Randomize; Clrscr; Writeln('Вихідний масив: '); For i:=1 to 6 do Begin For j:=1 to 9 do begin A[i,j]:=random*12-random(65)/11; Write(A[i,j]:8:2); end; writeln; End; max:=A[1,1]; {Беремо у якості еталону перший елемент масиву} N_max:=1; For i:=1 to 6 do For j:=1 to 9 do Begin if A[i,j]>max then Begin max:=A[i,j]; N_max:=i; End; End; Writeln('Максимальний елемент масиву - ',max:8:2); Sum:=0; {Початкове значення суми} For j:=1 to n do Begin Sum:=Sum+A[N_max,j]; End; Writeln('Отримана сума - ',Sum:8:2); Readkey; {Затримка зображення на екрані} End.