ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 12.09.2024
Просмотров: 16
Скачиваний: 0
Лабораторна робота №5
Тема: Обробка одновимірних масивів.
Мета: вивчити складений тип даних - масив, основні властивості компоненти StringGrid. Написати і відлагодити програму з використанням одновимірних масивів
5.1 Теоретична частина
Масив - кінцева послідовність даних одного типу.
Масив - об'єкт складного типу, кожен елемент якого визначається ім'ям (ID) і цілочисельним значенням індексу (номери), по якому до елементу масиву проводиться доступ. Розглянемо одновимірні масиви.
Увага! Індекси масивів в мові С/С++ починаються з 0.
У програмі одновимірний масив декларується таким чином:
тип ID масиву [розмір];
де розмір - вказує кількість елементів в масиві. Розмір масиву може задаватися константою або константним вираженням. Для використання масивів змінного розміру існує окремий механізм - динамічне виділення пам'яті.
Приклади декларації масивів :
int a[5];
double b[4] = 1.5, 2.5, 3.75;
у цілочисельному масиві а перший елемент а[0], другий - а[1], ., п'ятий - а[4]. Для масиву b, що складається з дійсних чисел, виконана ініціалізація, причому елементи масиву отримають наступні значення: b[0]=1.5, b[1]=2.5, b[2]=3.75, b[3]=0.
У мові C/C++ не перевіряється вихід індексу за межі масиву. Коректність використання індексів елементів масиву повинен контролювати програміст.
Приклади опису масивів :
const Nmax=10; - завдання максимального значення;
typedef double mas1[Nmax*2]; - опис типу одновимірного масиву;
mas1 a; - декларація масиву а типу mas1;
int ss[10]; - масив з десяти цілих чисел.
Елементи масивів можуть використовуватися у виразах так само, як і звичайні змінні, наприклад:
f = 2*a[3] + a[Ss[i] + 1]*3;
a[n] = 1 + sqrt(fabs(a[n - 1]));
5.2. Створення віконного застосування Компонент StringGrid
При роботі з масивами введення і виведення значень зазвичай організовується з використанням компоненти StringGrid, призначеної для відображення інформації у вигляді двомірної таблиці, кожен осередок якої є вікном однорядкового редактора (аналогічно вікну Edit). Доступ до інформації здійснюється за допомогою елементу Cells[ACol][ARow] типу AnsiString, де цілочисельні значення ACol, ARow вказують позицію елементу.
Увага! Перший індекс ACol визначає номер стовпця, а другий ARow - номер рядка на відміну від індексів масиву.
У інспекторові об'єктів значення ColCount і RowCount встановлюють початкові значення кількості стовпців і рядків в таблиці, а FixedCols і FixedRows задають кількість стовпців і рядків фіксованої зони. Фіксована зона виділена іншим кольором і зазвичай використовується для написів.
5.3. Приклад виконання завдання
Видалити з масиву А розміром N, що складається з цілих чисел (позитивних і негативних), усі негативні числа. Новий масив не створювати. Для заповнення масиву використовувати фунцию random(kod) - генератор випадкових рівномірно розподілених цілих чисел від 0 до (int) kod.
5.3.1. Приклад створення віконного застосування
Значення N вводити з Edit, значення масиву А - з компоненти StringGrid. Результат вивести в компоненту StringGrid.
Панель діалогу і результати виконання програми приведена на мал. 1.
Мал. 1
Налаштування компоненту StringGrid
На закладці Additional виберіть відповідну піктограму, встановите компоненти StringGrid1 і StringGrid2 і відрегулюйте їх розміри. У інспекторові об'єктів для обох компонент встановите значення ColCount рівними 2, RowCount рівними 1, тобто по два стовпці і одному рядку, а значення FixedCols і FixedRows рівними 0. Значення ширини клітини стовпця DefaultColWidth рівним 40.
За умовчанням в компоненту StringGrid введення даних дозволене тільки програмно. Для дозволу введення даних з клавіатури необхідно у властивості Options рядок goEditing для компоненти StringGrid1 встановити в положення true.
Текст функцій-обробників може мати наступний вигляд:
. . .
int n = 4;
//---------------------------------------------------------------------------
void __fastcall TForm1::FormCreate(TObject *Sender)
{
randomize(); // Зміна початкової адреси для random()
Edit1 ->Text=IntToStr(n);
StringGrid1 ->ColCount=n;
for(int i=0; i<n;i++) // Заповнення масиву А випадковими числами
StringGrid1 ->Cells[i][0] = IntToStr(random(21) - 10);
Label3 ->Hide(); // Приховати компоненту
StringGrid2 ->Hide();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
n=StrToInt(Edit1 ->Text);
if(n>10){
ShowMessage("Максимальна кількість 10"!);
n=10;
Edit1 ->Text = "10";
}
StringGrid1 ->ColCount=n;
for(int i=0; i<n;i++)
StringGrid1 ->Cells[i][0]=IntToStr(random(21) - 10);
Label3 ->Hide();
StringGrid2 ->Hide();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{
int i, kol = 0, a[10]; // Декларація одновимірного масиву
//Заповнення масиву А елементами з таблиці StringGrid1
for(i=0; i<n;i++)
a[i]=StrToInt(StringGrid1 ->Cells[i][0]);
//Видалення негативних елементів з масиву А
for(i=0; i<n;i++)
if(a[i]>=0) a[kol++] = a[i];
StringGrid2 ->ColCount = kol;
StringGrid2 ->Show(); // Показати компоненту
Label3 ->Show();
//Виведення результату в таблицю StringGrid2
for(i=0; i<kol;i++) StringGrid2 ->Cells[i][0]=IntToStr(a[i]);
}
5.3.2. Приклад створення консольного застосування
Текст програми може мати наступний вигляд (зверніть увагу на те, що функція main використовується в простій формі - без параметрів і не повертає результатів) :
. . .
#include <stdio.h>
#include <conio.h>
void main()
{
int a[10],n, i, kol=0;
randomize(); // Зміна початкової адреси для random()
printf("Input N (<=10) ");
scanf("%d", &n);
puts("\n Massiv A");
for(i=0; i<n;i++){
a[i] = random(21) - 10; // Заповнення масиву А випадковими числами
printf("%4d", a[i]);
}
//Видалення негативних елементів з масиву А
for(i=0; i<n;i++)
if(a[i]>=0) a[kol++] = a[i];
puts("\n Rezult massiv A");
for(i=0; i<kol;i++) printf("%4d", a[i]);
puts("\n Press any key ... ");
getch();
}
Із заповненим випадковими числами масивом А результат програми може бути наступним:
5.4. Індивідуальні завдання
Написати програму по обробці одновимірних масивів. Розміри масивів вводити з клавіатури. У консольному застосуванні передбачити можливість введення даних як з клавіатури, так і з використанням функції random().
При створенні віконного застосування скалярний (простий) результат виводити у вигляді компоненти Label, а масиви вводити і виводити за допомогою компонент StringGrid.
Обрати номер завдання згідно номеру в списку групи.
У одновимірному масиві, що складається з n цілих елементів, що вводяться з клавіатури, обчислити:
-
Добуток елементів масиву, розташованих між максимальним і мінімальним елементами.
-
Суму елементів масиву, розташованих між першим і останнім нульовими елементами.
-
Суму елементів масиву, розташованих до останнього позитивного елементу.
-
Суму елементів масиву, розташованих між першим і останнім позитивними елементами.
-
Добуток елементів масиву, розташованих між першим і другим нульовими елементами.
-
Суму елементів масиву, розташованих між першим і другим негативними елементами.
-
Суму елементів масиву, розташованих до мінімального елементу.
-
Суму модулів елементів масиву, розташованих після останнього негативного елементу.
-
Суму елементів масиву, розташованих після останнього елементу, рівного нулю.
-
Суму модулів елементів масиву, розташованих після мінімального по модулю елементу.
-
Суму елементів масиву, розташованих після мінімального елементу.
-
Суму елементів масиву, розташованих після першого позитивного елементу.
-
Суму модулів елементів масиву, розташованих після першого негативного елементу.
-
Суму модулів елементів масиву, розташованих після першого елементу, рав-ного нулю.
-
Суму позитивних елементів масиву, розташованих до максимального елементу.
-
Добуток елементів масиву, розташованих між першим і останнім негативними елементами.
Хід виконання роботи.
Запустити середовище візуальної розробки та ознайомитися з інтерфейсом.
За наданими методичними вказівками створити проект та ознайомитися з властивостями використаних компонентів.
Оформити звіт до виконаної роботи.
Структура звіту
-
Назва роботи.
-
Тема роботи.
-
Мета роботи.
-
Перелік використних компонентів.
-
Властивості використаних компонентів та події, що вони забезпечують. (Доцільно оформити у вигляді таблиці.)
-
Скрін-шот працюючого додатку.
-
Програмний код додатку.
-
Відповіді на контрольні питання до роботи.