Для організації пошуку в таблиці елементів із заданими властивостями
необхідно організувати циклічний перегляд всіх елементів, кожний з яких командою
розгалуження порівняти із заданим еталоном або перевірити на деяку властивість.
Якщо масив одновимірний, цикл для організації перегляду всіх елементів буде
один, якщо ж масив двовимірний - циклів буде два.
Задача №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).Умова: Дано одновимірний масив
цілих чисел
A[і], де
і =1,2,…,n. Визначити, скільки разів
максимальний елемент зустрічається у даному масиві та порядковий номер першого
найбільшого елементу.
Для розв'язку цієї задачі спочатку необхідно пройти по
всіх елементах масиву і знайти серед них максимальний, запам'ятавши його номер.
Для цього користуються стандартним алгоритмом, що полягає в наступному:
1)
береться будь-який елемент масиву (як правило, перший) і його значення
присвоюється змінній
max, тобто він вважається за еталон найбільшого
елементу;
2) по черзі з масиву вибираються всі останні елементи і, якщо серед
них знайдеться більший за вибраний еталон, то змінній max присвоюється нове
значення, яке тепер буде новим еталоном. В іншій змінній, наприклад,
N_max запам'ятовується номер цього найбільшого елементу (початкове
значення цієї змінної було 1, тому що спочатку ми вважали найбільшим 1-ий
елемент).
Після закінчення перегляду всього масиву змінна max буде містити
шуканий максимум, а змінна
N_max - його номер. Щоб запам'ятати номер
першого максимального елемента, необхідно шукати в матриці елемент, що точно
більше еталону. Якщо ж ми будемо шукати елемент, що не менший за еталон, то в
змінній
N_max залишиться номер останнього найбільшого елементу (подумайте
чому).
Після знаходження максимуму другим проходом можна вже підрахувати
кількість таких елементів в масиві. Для цього кожен елемент порівнюється з
еталоном, що знаходиться в змінній
max, та до лічильника
count
додається одиниця у випадку співпадання цих значень.
Програма, що реалізує
описаний алгоритм, наведена нижче:
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).Умова: Дано натуральне число
n. Визначити кількість додатних та від'ємних елементів таблиці
aij, де
i,j = 1,2,…,n, якщо:
Aij = sin(i+j).Візьмемо
дві змінних
count_plus та
count_minus для зберігання кількості
додатних та від'ємних елементів масиву відповідно .
На початку програми в
даній задачі необхідно заповнити масив за законом, що заданий в умові. А після
обчислення елементу масиву можна перевірити, являється він додатнім чи від'ємним
і в залежності від результату перевірки додати одиницю до однієї чи другої
змінної.
Програма, що реалізує запропонований алгоритм, наведена нижче:
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.
Умова: Дано квадратну дійсну матрицю
порядку
n. Усі максимальні елементи матриці замінити нулями.
В даній
задачі спочатку необхідно визначити, який елемент матриці є максимальним. Для
цього використовується алгоритм, що наведений вище. Єдина різниця полягає в
тому, що в цій задачі масив двовимірний і тому циклів для проходу по ньому буде
два. Після цього другим проходом по масиву ми будемо порівнювати елементи зі
знайденим значенням максимуму і, якщо елементи будуть дорівнювати значенню max,
вони будуть замінюватись на нуль. Програма для розв'язку описаного алгоритму має
наступний вигляд:
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.Умова: Дано квадратну дійсну
таблицю розмірності
n. Обчислити кількість входжень даного елемента.
В
даній задачі необхідно крім масиву чисел ввести (або задати якимось іншим
шляхом) значення шуканого елементу. Тоді алгоритм підрахунку кількості цих
елементів зводиться до організації порівняння кожного елемента масиву з шуканим
значенням. У випадку співпадання обох виконується підрахунок кількості
стандартним способом:
Count:=count+1;де
count - лічильник, що
зберігає кількість знайдених чисел.
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.
Умова: Дано цілочислову прямокутну таблицю
порядку
n х
m. Усі елементи таблиці, менші за середнє арифметичне
її значень, замінити на "-1", а більші - на "1".
Щоб виконати задану заміну,
необхідно на початку програми обчислити середнє арифметичне елементів таблиці.
Для цього потрібно знайти суму всіх елементів, а потім поділити на їх кількість
(елементів в таблиці всього
n*m). Після виконання зазначених обчислень
необхідно ще раз організувати прохід по масиву, в результаті якого командою
розгалуження вибрати додатні та від'ємні елементи і замінити їх згідно з умовою
задачі.
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.Умова: У даній дійсній матриці
розмірністю 6 х 9 знайти суму елементів рядка, що містить найбільший елемент.
Вважається, що такий елемент в матриці єдиний.
Щоб знайти суму елементів
заданого рядка, спочатку необхідно визначити, в якому з рядків матриці
знаходиться максимальний елемент. Тому, визначивши, який з елементів є
найбільшим, ми повинні ще запам'ятати номер рядка, в якому він знаходиться.
Використаємо для цього додаткову змінну
N_max. Після повного проходу по
масиву з метою пошуку максимуму, організовуємо новий цикл, але вже не по всьому
масиву, а тільки по рядку з номером
N_max для обчислення суми елементів
цього рядка.
Програма для реалізації описаного алгоритму має наступний
вигляд:
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.