Главная / Оаип / Лабораторная работа №5. Обработка одномерных массивов

Лабораторная работа №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.

В языке С/С++ не проверяется выход индекса за пределы массива. Корректность использования индексов элементов массива должен контролировать программист.

Примеры описания массивов:

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.

Панель диалога и результаты выполнения программы приведена на рис. 5.1.

Рис. 5.1

Настройка компоненты StringGrid

На закладке Additional выберите пиктограмму r1, установите компоненты 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(" 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(" Rezult massiv A");

for(i=0; i<kol;i++) printf("%4d", a[i]);

puts(" Press any key… ");

getch();

}

С заполненным случайными числами массивом А результат программы может быть следующим:

5.4. Индивидуальные задания

Написать программу по обработке одномерных массивов. Размеры массивов вводить с клавиатуры. В консольном приложении предусмотреть возможность ввода данных как с клавиатуры, так и с использованием функции Random().

При создании оконного приложения скалярный (простой) результат выводить в виде компоненты Label, а массивы вводить и выводить с помощью компонент StringGrid.

В одномерном массиве, состоящем из N вводимых с клавиатуры целых элементов, вычислить:

Произведение элементов массива, расположенных между максимальным и минимальным элементами. Сумму элементов массива, расположенных между первым и последним нулевыми элементами. Сумму элементов массива, расположенных до последнего положительного элемента. Сумму элементов массива, расположенных между первым и последним положительными элементами. Произведение элементов массива, расположенных между первым и вторым нулевыми элементами. Сумму элементов массива, расположенных между первым и вторым отрицательными элементами. Сумму элементов массива, расположенных до минимального элемента. Сумму модулей элементов массива, расположенных после последнего отрицательного элемента. Сумму элементов массива, расположенных после последнего элемента, равного нулю. Сумму модулей элементов массива, расположенных после минимального по модулю элемента. Сумму элементов массива, расположенных после минимального элемента. Сумму элементов массива, расположенных после первого положительного элемента. Сумму модулей элементов массива, расположенных после первого отрицательного элемента. Сумму модулей элементов массива, расположенных после первого элемента, равного нулю. Сумму положительных элементов массива, расположенных до максимального элемента. Произведение элементов массива, расположенных между первым и последним отрицательными элементами.

Оставить комментарий