ЗАДАЧА № 51
Постановка задачі:
Середню групу дитячого садочка вивели на прогулянку. Скільки дівчаток і скільки хлопчиків видно з-за паркану, якщо зріст хлопчиків задається у сантиметрах від’ємними числами, а дівчаток – додатними у вигляді цілих значень а1, а2, …, аn? Крім того, у всіх дівчаток на голівках зав’язані бантики заввишки
Аналіз алгоритму:
При розв’язанні цієї задачі, заповнюючи масив, необхідно генерувати як додатні, так від’ємні числа. Для пошуку в масиві елементів із заданою властивістю (в даному випадку чисел, що за модулем більші, ніж задане) використовується вже відома команда розгалуження.
Текст програми:
Program Task_51;
Uses crt;
Var N, H:word;{N – кількість дітей в дитсадочку, Н – висота паркану}
А:аrrау[1..100] of longint;
{А – зарезервований масив для зберігання зросту дітей}
і, Count_Girl, Count_Boy:longint;
{і – змінна циклу,
Count_Girl – кількість дівчаток,
Count_Boy – кількість хлопців}
Begin
Randomize;
Clrscr;
Count_Girl:=0;
Count_Boy:=0;
Write(‘Введіть висоту паркану: ‘);
Readln(H);
Write(‘Введіть кількість дітей в дитсадочку: ‘);
Readln(N);
For i:=1 to N do
Begin
A[i]:=random(300)–150;
{Заповнення масиву випадковими числами від –150 до +150}
Write(А[і]:5);
{Виведення масиву на екран для контролю роботи програми}
If (A[i]<0)>H) Then Count_Boy:=Count_Boy+1;
If (A[i]>0) and (A[i]+10>H) Then Count_Girl:=Count_Girl+1;
End;
Write(‘хлопчики, яких видно з–за паркану: ‘, Count_Boy);
Write(‘дівчатка, яких видно з–за паркану: ‘ , Count_Girl);
Readkey;
End.
ЗАДАЧА № 52
Постановка задачі:
Дано натуральне число п та послідовність дійсних чисел а1, а2, …, аn. Визначити кількість сусідств двох чисел різного знаку.
Аналіз алгоритму:
Перш за все запропонуємо в цій задачі інший метод опису масиву з використанням константи, що задає розмір масиву, та вказівки Туре. А, по-друге, зверніть увагу, що для визначення двох сусідніх елементів масиву використовується загальний опис індексів і та і + 1 (можна і – 1 та і), а це при організації циклу можне викликати ситуацію виходу за межі масиву. Дійсно, якщо організувати цикл з параметром для зміни індексу від 1 до N, де N – кількість елементів масиву, то при і = N значення і + 1 буде виходити за межі масиву. Це є помилкою, що призводить до неочікуваних результатів, тому цикл треба організовувати для зміни індексу не від 1 до N, а для зміни від 1 до N – 1.
Текст програми:
Program Task_52;
Uses crt;
Const N=100;
Type Masiv = array[1..N] of real;
Var A:Masiv; {A – масив для зберігання даних чисел}
і, Count:byte; {і – змінна циклу, count – кількість сусідств}
Begin
Randomize;
Clrscr;
Count:=0;
For і:=1 to N do
Begin
A[i]:=random*100–random*50;
Write(А[і]:8:2);
End;
For i:=1 to N–l do
If ((A[i]<0)>0)) or ((A[i]>0) and (A[i+1]<0))
Then Count:=Count+l;
Writeln;
Writeln(‘Кількість заданих сусідств = ‘, Count);
Readkey;
End.
ЗАДАЧА № 53
Постановка задачі:
Дано одновимірний масив цілих чисел A[i], де i = 1, 2, …, п. Визначити, скільки разів максимальний елемент зустрічається у даному масиві та порядковий номер першого найбільшого елементу.
Аналіз алгоритму:
Для розв’язку цієї задачі спочатку необхідно пройти по всіх елементах масиву і знайти серед них максимальний, запам’ятавши його номер. Для цього користуються стандартним алгоритмом:
1) береться будь-який елемент масиву (як правило, перший) і його значення присвоюється змінній max, тобто він вважається за еталон найбільшого елементу;
2) по черзі з масиву вибираються всі останні елементи і, якщо серед них знайдеться більший за обраний еталон, то змінній max присвоюється нове значення, яке тепер буде новим еталоном. В іншій змінній, наприклад, N_max запам’ятовується номер цього найбільшого елементу (початкове значення цієї змінної було 1, тому що спочатку ми вважали найбільшим 1-ий елемент). Після закінчення перегляду всього масиву змінна max буде містити шуканий максимум, а змінна N_max – його номер. Щоб запам’ятати номер першого максимального елемента, необхідно шукати в матриці елемент, що точно більший еталону. Якщо ж ми будемо шукати елемент, що не менший за еталон, то в змінній N_max залишиться номер останнього найбільшого елементу (подумайте чому).
Після знаходження максимуму другим проходом можна вже підрахувати кількість таких елементів в масиві. Для цього кожен елемент порівнюється з еталоном, що знаходиться в змінній max, та до лічильника count додається одиниця у випадку співпадання цих значень.
Текст програми:
Program Task_53;
Uses crt;
Const n = 30;
Var A:array[1..n] of integer; {A – масив даних чисел}
і:byte; {і – змінна циклу}
count, N_max:byte;
{count – кількість максимальних елементів в масиві,
N_max – номер першого найбільшого елементу}
max:integer; {max – максимальний елемент масиву}
Begin
Clrscr;
Randomize;
For і:=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 і:=2 to n do
If A[i]>max Then
Begin
max:=A[i];
N_max:=i;
End;
{Другий прохід по масиву для підрахунку кількості максимальних елементів}
For i:=1 to n do
If A[i]= max Then count:=count+1;
Writeln(‘Максимум = ‘ , max);
Writeln(‘Номер першого максимума = ‘, N_max);
Writeln(‘Кількість максимумів = ‘, count);
Readkey;
End.
ЗАДАЧА № 54
Постановка задачі:
Дано цілочислову прямокутну таблицю порядку N × M. Усі елементи таблиці менші за середнє арифметичне її значень, замінити на «– 1», а більші – на «1».
Аналіз алгоритму:
Щоб виконати задану заміну, необхідно спочатку обчислити середнє арифметичне елементів таблиці. Для цього знайдемо суму всіх елементів, а потім поділимо на їх кількість (елементів у таблиці всього N • M). Після виконання зазначених обчислень необхідно ще раз організувати прохід по масиву, в результаті якого командою розгалуження вибрати додатні та від’ємні елементи і замінити їх відповідно до умови.
Текст програми:
Program Task_54;
Uses crt;
Const n = 9; m = 12;
Type Masiv = array[1..n, 1..m] of integer;
Var A:Masiv; i, j:byte; {i, j – змінні циклу}
Sum, SA:real; {Sum – сума елементів таблиці,
SA – середнє арифметичне}
Begin
Randomize;
Clrscr;
Sum:=0; {Початкове значення суми}
Writeln(‘Вихідний масив: ‘);
For і:=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[і,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] <>
if A[i,j] > SA then A[i,j]:=1;
Write(A[i,j]:5);
End;
Writeln;
End;
Readkey;
End.
ЗАДАЧА № 55
Постановка задачі:
У даній дійсній матриці розмірністю 6×9 знайти суму елементів рядка, що містить найбільший елемент. Вважається, що такий елемент у матриці єдиний.
Аналіз алгоритму:
Щоб знайти суму елементів заданого рядка, спочатку визначимо, в якому з рядків матриці знаходиться максимальний елемент. Після цього ми повинні запам’ятати номер рядка, в якому він знаходиться. Використаємо для цього додаткову змінну N_max. Після повного проходу по масиву з метою пошуку максимуму, організовуємо новий цикл, але вже не по всьому масиву, а тільки по рядку з номером N_max для обчислення суми елементів цього рядка.
Текст програми:
Program Task_55;
Uses crt;
Type masiv = array[1..6, 1..9] of real;
Var A: Masiv;
i, j:byte; {i, j – змінні циклу}
Sum, max:real;
{Sum – сума елементів таблиці, max – махе. елемент таблиці}
N_max:byte; {N_max – номер рядка, що містить макс. елемент}
Begin
Randomize;
Clrscr;
Writeln(‘Вихідний масив: ‘);
Fox 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;
{Беремо у якості еталону перший елемент масиву}
mах:=А[1,1];
Nmax:=1;
For i:=1 to 6 do
For j:=1 to 9 do
if A[i,j]>max then
Begin
max:=A[i,j];
N_max:=i;
End;
Writeln(‘Максимальний елемент масиву = ‘, max:8:2);
Sum:=0;
For j:=1 to n do
Sum: =Sum+A[N_max,j];
Writeln(‘Отримана сума = ‘, Sum:8:2);
Readkey;
End.
Немає коментарів:
Дописати коментар