Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лабораторна робота №6(Масиви).docx
Скачиваний:
0
Добавлен:
01.04.2025
Размер:
96 Кб
Скачать
☆

Введення елементів одновимірних масивів з різних компонентів

За допомогою компонента Memo можна вводити масиви як при виконуванні програми, так і при конструюванні форми проекту програми через вікно властивості Lines (для переходу до нового рядка при введенні значень треба натиснути клавішу <Enter>).

Приклад фрагмента програми введення значень елементів одновимірного масиву А (в кожному рядку по одному числу):

for(i=0;i<=9;i++) A[i]=StrToFloat(Memo1->Lines->Strings[i]);

За допомогою компонента ListBox можна вводити масиви так само, як і з компонентом Memo, лише замість властивості Lines використовувати властивість Items.

Введення-виведення масиву у консолі

Виведення масиву у консолі за допомогою coutу стовпчик:

for(int i=0; i<n; i++) cout << a[i] << endl;

у рядок через пробіл:

for(int i=0; i<n; i++) cout << a[i] << " ";

cout << endl;

Введення масиву за допомогою cin:

for (int i=0; i<n; i++) cin >> a[i];

При цьому числа при введенні можуть бути написані як у стовпчик, так і у рядок через пробіл.

Приклади створювання проектів програм опрацювання одновимірних масивів.

Задача 1. Розробити схему алгоритму та проект програми для введення одновимірного масиву з 8-ми дійсних чисел та обчислення суми усіх елементів масиву.

Текст програми:

// Сума

void __fastcall TForm1::Button1Click(TObject*Sender)

{ float A[8], sum = 0;

for(int i = 0; i < 8; i++)

{ A[i]=StrToFloat(Memo1->Lines->Strings[i]);

sum += A[i]; }

Edit1->Text = FormatFloat("0.000", sum); }

//Очищення

void __fastcall TForm1::Button3Click(TObject *Sender)

{ Memo1->Clear();

Edit1->Clear();

}

// Вихід

void __fastcall TForm1::Button2Click(TObject *Sender)

{ Close();

}

Задача 2. Розробити консольний додаток для заповнення масиву з 20-ти елементів за формулою та визначити найбільший від'ємний елемент масиву.

Розв’язування. Оскільки невідомо, чи буде перший елемент масиву від'ємним, не можна присвоїти початкове значення змінній max. Присвоїмо їй значення 0.

Вважатимемо, що, якщо зустріли від'ємний елемент і змінна max дорівнює 0, то це буде перший від'ємний елемент і його слід присвоїти змінній max у якості початкового значення. Якщо змінна max вже набула певного значення, порівнюємо її з новим від'ємним елементом, і якщо новий елемент перевищує max, записуємо його до max.

Текст програми:

#include <conio.h>

#include <math.h>

#include <stdio.h>

int main()

{double a[20], max=0; int i;

for(i=0; i<20; i++)

{ a[i]=pow(-1,i)*sin(i*i)/sin(i+1);

cout<<a[i];

}

for(i=0; i<20; i++)

if(a[i]<0) //Якщо віднайшли від'ємний елемент і,

if(max==0 || max<0 && max<a[i])//якщо він є перший чи більший за max,

max=a[i]; //присвоюємо його max

cout<<"max = <<,max;

getch();

}

Задача 3. Увести масив з 10-ти цілих чисел. Створити новий масив, елементи якого обчислити, поділивши кожен з елементів початкового масиву на суму його елементів з непарними індексами.

Розв’язування. Щоб створити новий масив, спочатку обчислимо суму елементів з непарними індексами. Після цього послідовно поділимо всі елементи масиву на обчислену суму і присвоїмо результат відповідному елементові нового масиву. Після ділення елементи нового масиву матимуть тип float.

Будемо вводити початковий масив і виводити новий масив у компонент StringGrid, який міститься на панелі Additional. Цей компонент зазвичай використовується для таблиць. Він складається з комірок, кожна з яких є розміщена на перетині рядка і стовпчика і має два індекси. У цьому прикладі компоненти StringGrid матимуть імена (властивість Name) SG1 та SG2 і міститимуть по одному рядку (властивість RowCount=1) і 10 стовпчиків (властивість ColCount=10). Щоби надати користувачу можливість вводити числа у SG1, встановимо значення властивості Options->goEditingв true. Також встановимо для обох компонентів значення властивостей F ixedCols=0 та FixedRows=0, тобто таблиці не матимуть заголовків рядків і стовпчиків:

Текст програми:

void __fastcall TForm1::Button1Click(TObject *Sender)

{ const int N=10; //Константа N для кількості елементів масиву

int a[N], i, sum=0; //a – початковий масив

float b[N]; //b – новий масив

for(i=0; i<N; i++) //Введення елементів початкового масиву

a[i]=StrToInt(SG1->Cells[i][0]);//із StringGrid (стовпчик i, рядок 0)

for(i=0; i<N; i+=2) //Обчислення суми елементів з непарними індексами

sum+=a[i];

Edit1->Text=IntToStr(sum);

for(i=0; i<N; i++)

{ b[i]=1.*a[i]/sum; //Ділимо a[i] на sum і присвоюємо резул ьтат b[i]

SG2->Cells[i][0]=FormatFloat("0.00", b[i]);

}

}

Задача 4. Розробити схему алгоритму і проект програми для введення до 15-ти дійсних чисел із компонента Меmо і впорядкувати їх за зростанням.

Розв’язування. Сортування елементів масиву організуємо в окремій функції. Слід звернути увагу на заголовок цієї функції: void sort(float a[], int n)

де sort– ім'я функції, за яким її можна буде викликати;

float a[], int n– параметри функції: масив дійсних чисел а (який функція сортуватиме) і кількість елементів масиву n;

void– тип результату, який вказує на те, що функція виконуватиме сортування і змінюватиме масив, але жодних інших обчислень вона не виконуватиме і нічого, окрім зміненого масиву, повертати немає потреби. Викликати розглянуту функцію можна, якщо написати ім'я функції і у круглих дужках зазначити два фактичні параметри: ім'я масиву та кількість його елементів, наприкл ад: sort(a, 15); //Якщо елементів є 15

Текст функції та основної програми:

void sort(float a[], int n)

{ int i, j; //Параметри наступних циклів

float tmp; //Тимчасова зміна для переставлянь елементів

for (i=0; i<n-1; i++)

for (j=i+1; j<n; j++)

if (a[i] > a[j])

{ tmp = a[i];

a[i] = a[j];

a[j] = tmp;

} }

//------------------------------------------

void __fastcall TForm1::Button1Click(TObject *Sender)

{ int n,i; float a[15];

//Зчитування кількості заповнених рядків Memo1

n = Memo1->Lines->Count;

if (n>15) n=15;

for (i=0; i<n; i++)

a[i]=StrToFloat(Memo1->Lines->Strings[i]);

sort(a, n); //Виклик функції

Memo2->Clear();

for (i=0; i<n; i++)

Memo2->Lines->Add(FloatToStr(a[i]));

}