Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Деякі задачі опрацювання значень елементів одновимірного масиву

Поиск

Розглянемо кілька задач на опрацювання значень елементів одновимірного масиву. У всіх задачах, розглянутих нижче, будемо вводити значення елементів масиву з багаторядкового поля, а виводити результат у багаторядкове поле, якщо результатом є значення елементів одновимірного масиву, або в напис. Створюватимемо процедури, пов’язані з подією OnClick для кнопки. При необхідності, ви зможете аналогічно створити процедури, пов’язані з іншими подіями або з іншими об’єктами.

Будемо розглядати всі масиви з 10 чисел. Якщо кількість елементів масиву інша, то потрібно буде внести до текстів процедур відповідні зміни.

 

Задача 2. Визначити, скільки разів зустрічається дане дійсне число серед значень елементів даного масиву з 10 дійсних чисел.

 

Очевидно, що для розв’язання цієї задачі потрібно переглянути послідовно значення всіх елементів масиву, порівняти кожне з них з даним числом, і якщо деяке з них дорівнює цьому числу, то збільшити лічильник таких елементів масиву на 1.

procedure TForm1.Button1Click(Sender: TObject);

var a: array [1..10] of Real; i, k: Integer; x: Real;

Begin

x:= StrToFloat (Edit1.Text); // Уведення числа, з яким потрібно порівнюватизначення елементів масиву

k:= 0; // Лічильник кількості елементів масиву, що дорівнюють даному числу х – їх поки що не зустрілося жодного

for i:= 1 to 10 do

Begin

a[i]:= StrToFloat (Memo1.Lines[i-1]); // Уведення значень елементів одновимірного масиву з багаторядкового поля

if a[i] = x then k:= k+1; // Якщо значення чергового елемента масиву дорівнює заданому числу, то значення лічильника збільшується на 1

end;

Label1.Caption:= IntToStr (k) + ' разів' // Виведення результату в напис з додаванням пояснювального тексту

end;

 

Звертаємо вашу увагу: якщо не включити перед початком другого циклу команду k:= 0, то перше виконання команди k:= k+1 може виявитися некоректним.

Задача 3. Визначити, чи зустрічається дане дійсне число серед значень елементів даного масиву з 10 дійсних чисел.

 

Можна було б розв’язати цю задачу аналогічно попередній: визначити, скільки елементів масиву дорівнюють даному числу, і якщо ця кількість 0, то даного числа в масиві немає, а якщо більше 0, то є. Але такий метод розв’язування є нераціональним. Уявіть собі, що дане число є значенням вже першого елемента масиву. Тоді всі інші елементи масиву переглядати не потрібно, а попередній метод розв’язування передбачає обов’язковий перегляд усіх елементів масиву.

Для реалізації раціонального методу розв’язування цієї задачі використаємо змінну логічного типу f і присвоїмо їй початкове значення false (дане число в масиві поки ще не зустрілося). Порівнюватимемо послідовно значення елементів масиву з даним числом і якщо один з них дорівнює даному числу, то змінимо значення змінної f на true і перервемо виконання циклу командою break (англ. break – переривати). Виведення результату реалізуємо залежно від значення змінної f.

 

procedure TForm1.Button1Click(Sender: TObject);

var a: array [1..10] of Real; i: Integer; x: Real; f: Boolean;

Begin

for i:= 1 to 10 do

a[i]:= StrToFloat (Memo1.Lines[i-1]);

x:= StrToFloat (Edit1.Text);

f:= false; // Дане число в масиві поки що не зустрілося

for i:= 1 to 10 do

if a[i] = x

Then begin

f:= true; // Дане число в масиві зустрілося

break; // Перериваємо виконання циклу, бо число зустрілося в масиві

end;

If f

then Label1.Caption:= 'зустрічається'

else Label1.Caption:= 'не зустрічається';

end;

 

Задача 4. У даному масиві з 10 дійсних чисел визначити найбільше значення.

 

Спочатку вважатимемо, що значення першого елемента масиву і є найбільшим серед усіх значень елементів масиву. Після чого послідовно переглядатимемо всі інші елементи масиву і якщо зустрінеться значення, яке більше того, яке ми на даний момент вважаємо найбільшим, то зробимо це значення найбільшим.

 

procedure TForm1.Button1Click(Sender: TObject);

var a: array [1..10] of Real; i: Integer; max: Real;

Begin

for i:= 1 to 10 do

a[i]:= StrToFloat (Memo1.Lines[i-1]);

max:= a[1]; // Вважаємо, що найбільший елемент – перший

for i:= 2 to 10 do

if a[i] > max then max:= a[i]; // Замінюємо значення найбільшого елемента

Label1.Caption:= FloatToStr (max) + ' – найбільше значення';

end;

 

Задача 5. У даному масиві з 10 різних дійсних чисел визначити найбільше значення і найменше значення і обміняти їх місцями.

 

Оскільки потрібно обміняти місцями найбільше і найменше значення серед значень елементів масиву, то потрібно визначити не тільки самі ці значення, а ще й порядковий номер елемента масиву, значення якого найбільше, і порядковий номер елемента масиву, значення якого найменше. Спробуємо визначити все це, переглядаючи елементи масиву лише один раз.

Спочатку вважатимемо, що значення першого елемента масиву і найбільше, і найменше, а номер найбільшого і найменшого елемента масиву 1. Після чого послідовно переглядатимемо всі інші елементи масиву. Якщо значення чергового елемента масиву більше того значення, яке ми на той момент вважаємо найбільшим, то замінюємо найбільше значення серед уже переглянутих елементів масиву і номер найбільшого елемента. Якщо ні, то може це значення менше ніж те, яке ми поки що вважаємо найменшим. І якщо це так, то замінюємо найменше значення серед уже переглянутих елементів масиву і номер найменшого елемента.

 

procedure TForm1.Button1Click(Sender: TObject);

var a: array [1..10] of Real; i, nmax, nmin: Integer; max, min: Real;

Begin

for i:= 1 to 10 do

a[i]:= StrToFloat (Memo1.Lines[i-1]);

max:= a[1]; nmax:= 1; // Значення першого елемента приймається за найбільше

min:= a[1]; nmin:= 1; // Значення першого елемента приймається за найменше

for i:= 2 to 10 do

if a[i] > max // Порівняння значення чергового елемента з найбільшим на цей момент

Then

Begin

max:= a[i]; // Замінюємо значення найбільшого елемента

nmax:= i; // Замінюємо номер найбільшого елемента

End

Else

if a[i] < min // Порівняння значення чергового елемента з найменшим на цей момент

Then

Begin

min:= a[i]; // Замінюємо значення найменшого елемента

nmin:= i; // Замінюємо номер найменшого елемента

end;

a[nmax]:= min; a[nmin]:= max; // Обмін значеннями найбільшого і найменшого елементів

for i:= 1 to 10 do

Memo1.Lines.Append(FloatToStr(a[i]); // Виведення значень елементів масиву з переставленими найбільшим і найменшим значеннями

end;

Задача 6. Визначити елементи даного масиву з 10 дійсних чисел, значення яких більше даного дійсного числа.

Очевидно, що як і в Задачі 2, потрібно переглянути послідовно значення всіх елементів масиву і з’ясувати, які з них більші, ніж задане число. Виникає питання, де зберігати значення цих елементів масиву. Адже залежно від значень елементів масиву і від даного числа, кількість таких елементів може бути різна: від 0 до 10.

Було б доцільно заносити значення шуканих елементів до іншого масиву, але нам заздалегідь невідома кількість його елементів.

У мові програмування Delphi є можливість використовувати масиви, кількість елементів яких заздалегідь невідома і яка може змінюватися в ході виконання проекту. Такі масиви називаються динамічними. На відміну від них, масиви, кількість елементів яких відома заздалегідь і яка не змінюється в ході виконання проекту, називаються статичними.

Звертаємо вашу увагу, що нумерація елементів динамічного масиву завжди розпочинається з 0.

У рядку var динамічний масив b, елементами якого будуть дійсні числа, описується так: var b: array of Real;.

 

procedure TForm1.Button1Click(Sender: TObject);

var a: array [1..10] of Real; b: array of Real; i, k: Integer; x: Real;

Begin

for i:= 1 to 10 do

a[i]:= StrToFloat (Memo1.Lines[i-1]);

x:= StrToFloat (Edit1.Text);

k:= 0; // Лічильник кількості елементів масиву b (спочатку в масиві b немає елементів)

for i:= 1 to 10 do

if a[i] > x

Then begin

k:= k+1; // Збільшення на 1 значення лічильника кількості елементів масиву b

SetLength (b, k); // Встановлення нового розміру (кількості елементів) динамічного масиву b

b[k-1]:= a[i]; // Занесення відповідного елемента масиву a до масиву b

end;

Memo2.Lines.Clear;

if k = 0

then Memo2.Lines[0]:= 'Таких чисел не існує'

Else

for i:= 1 to k do

Memo2.Lines.Append(FloatToStr(b[i-1]));

end;

SetLength (англ. set – встановлювати, length – довжина).

Використовуючи динамічні масиви, можна створювати програми для довільної кількості чисел, уведених у рядки багаторядкового поля. У таких випадках потрібно ввести дані з цього багаторядкового поля в динамічний масив a, наприклад, так:

k:= Memo1.Lines.Count; //Визначається кількість заповнених рядків поля

SetLength (a, k); // Встановлюється відповідна кількість елементів динамічного масиву a і виділяється для його елементів відповідна ділянка пам’яті

For i:= 0 to k-1 do a[i]:= StrToFloat(Memo1.Lines[i]); // Уведення даних з рядків поля до масиву

Далі дані з динамічного масиву можна опрацьовувати різноманітними методами.

 



Поделиться:


Последнее изменение этой страницы: 2016-09-18; просмотров: 489; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.137.159.163 (0.01 с.)