Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Сборник ПППН_ОАиП_Delphi_ПО_2005-2006.doc
Скачиваний:
28
Добавлен:
19.08.2019
Размер:
3.77 Mб
Скачать

Практическая работа № 8 Разработка приложения для обработки массива

Цель работы:

  1. Освоить работу с массивами.

  2. Усвоить применение компонента StringGrid.

Краткие теоретические сведения

Исходные данные для решения многих задач удобно представляются в табличной форме. Колонки и строки таблицы, как правило, состоят из однородной информации. Поэтому в программе для хранения и обработки табличных данных имеет смысл использовать двумерные массивы. В общем-виде, описание двумерного массива выглядит так:

Имя : Array [НижняяГраницаИндекса1..ВерхняяГраницаИндекса1,

НижняяГраницаИндекса2..ВерхняяГраницаИндекса2] of Тип;

где

Имя – имя массива;

Array – зарезервированное слово языка Pascal, указывающее, что объявляемый элемент данных – массив.

Тип – тип элементов массива.

Компонент StringGrid (строковая таблица) находится на странице Additional палитры компонентов. Значок компонента имеет вид:

Для обращения к содержимому ячейки компонента StringGrid используется свойство Cells[№столбца, №строки], при чем индексы первых стоки и столбца имеют значения нулей.

Задание 1.

Составить программу расчета суммы элементов двух одномерных массивов, придерживаясь предложенной формы. Примечание – значения массивов Х и Y вносятся пользователем после запуска приложения.

Порядок выполнения

  1. Расположите на форме следующие компоненты: GroupBox1, на котором расположить StringGrid1; вне GroupBox1 – компоненты Button1, BitBtn1.

  2. Установите следующие свойства:

Для компонента GroupBox1 измените значение Caption на Таблица обработки данных

Для компонента StringGrid:

Свойство

Обозначение

Значение

Расположение компонента относительно другого компонента (на весь компонент)

Align

alClient

Имя компонента

Name

Tabl

Количество колонок таблицы

ColCount

4

Количество строк таблицы

RowCount

6

Количество зафиксированных слева колонок таблицы

FixedCols

1

Количество зафиксированных сверху строк таблицы

FixedRows

1

Признак допустимости редактирования содержимого ячеек таблицы

Options\goEditing

True

Ширина колонок таблицы

DefaultColWidth

65

Высота строк таблицы

DefaultRowHeight

14

Ширина линии, ограничивающих ячейки таблицы

GridLineWidth

1

  1. В разделе описания глобальных переменных допишите описание переменной I целого типа.

  2. Создаете обработчик события onActivate для Form

procedure TForm1.FormActivate(Sender: TObject);

begin

tabl.Cells[0,0]:='индекс';

tabl.Cells[1,0]:='Х';

tabl.Cells[2,0]:='Y';

tabl.Cells[3,0]:='Z';

for I:=1 to tabl.rowcount do

tabl.Cells[0,i]:=inttostr(i);

end;

  1. Создаете обработчик события onClick для Button1 для расчета суммы элементов массива z[i]

procedure TForm1. Button1Click (Sender: TObject);

var

x,y,z:array[1..5] of integer;

begin

for i:=1 to tabl.rowcount–1 do {обработать все строки для ввода элементов массивов X,Y}

begin

x[i]:=strToInt(tabl.cells[1,i]);

y[i]:=strToInt(tabl.cells[2,i]);

end;

for i:=1 to tabl.rowcount-1 do {обработать все строки для вычисления элементов массива Z}

begin

z[i]:=x[i]+y[i];

end;

for i:=1 to tabl.rowcount-1 do {вывод элементов массива}

tabl.Cells[3,i]:=inttostr(z[i]);

end;

Результат работы:

Задание 2. Олимпиада

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

Ниже приведены значения свойств компонента StringGrid которые необходимо установить для дальнейшей работы:

Свойство

Обозначение

Значение

Имя компонента

Name

Tabl

Количество колонок таблицы

ColCount

6

Количество строк таблицы

RowCount

12

Количество зафиксированных слева колонок таблицы

FixedCols

0

Количество зафиксированных сверху строк таблицы

FixedRows

1

Признак допустимости редактирования содержимого ячеек таблицы

Options\goEditing

True

Ширина колонок таблицы

DefaultColWidth

65

Высота строк таблицы

DefaultRowHeight

14

Ширина линии, ограничивающих ячейки таблицы

GridLineWidth

1

Порядок выполнения

  1. Создайте интерфейс Вашей программы подобно приведенному ниже, для чего поместите на форму следующие компоненты:

Tabl: TStringGrid;

Button1: TButton;

Label1: TLabel;

  1. Для кнопки (Button) с помощью страницы “События” (Events) окна инспектора объектов (Object Inspector) создайте обработчик события OnClick, а для самой формы (Form) – обработчик события OnActivate и внесите в эти обработчики код как показано ниже.

procedure TForm1.FormActivate(Sender: TObject);

begin

tabl.Cells[0,0]:='Страна';

tabl.Cells[1,0]:='Золотых';

tabl.Cells[2,0]:='Серебряных';

tabl.Cells[3,0]:='Бронзовых';

tabl.Cells[4,0]:='Всего';

tabl.Cells[5,0]:='Баллов';

tabl.Cells[0,1]:='Австрия';

tabl.Cells[0,2]:='Германия';

tabl.Cells[0,3]:='Италия';

tabl.Cells[0,4]:='Канада';

tabl.Cells[0,5]:='Нидерланды';

tabl.Cells[0,6]:='Норвегия';

tabl.Cells[0,7]:='Россия';

tabl.Cells[0,8]:='США';

tabl.Cells[0,9]:='Финляндия';

tabl.Cells[0,10]:='Швейцария';

tabl.Cells[0,11]:='Япония';

end;

procedure TForm1.Button1Click(Sender: TObject);

var

c,r:integer; { номер колонки и строки таблицы }

s:integer; { всего медалей у команды }

begin

for r:=1 to tabl.rowcount-1 do { обработать все строки }

begin

s:=0;

{ вычисляем общее кол-во медалей }

for c:=1 to 3 do

if tabl.cells[c,r] <> ''

then s:=s+StrToInt(tabl.cells[c,r])

else tabl.cells[c,r]:='0';

{ вывод результата }

tabl.cells[4,r]:=IntToStr(s);

end;

end;

Задание 3 (для самостоятельного выполнения).

В программе для задания 2 «Олимпиада» предусмотреть вычисление количества баллов, набранных спортсменами каждой страны, если каждая золотая медаль дает 7 очков, серебряная – 6 очков и бронзовая – 5 очков. Затем список команд упорядочить в соответствии с количеством набранных баллов.

Дополнительное задание (для самостоятельного индивидуального выполнения)

— взять у преподавателя

Содержание отчета:

  1. Постановка задачи

  2. Тексты процедур – обработчиков событий, разработанных в приложении Delphi

Контрольные вопросы:

  1. Для чего используется визуальный компонент StringGrid?

  2. На какие две части делится таблица? В чем их назначение?

  3. Как можно изменить размер фиксированной части таблицы?

  4. Что представляет собой свойство Cells компонента StringGrid?

  5. Что будет результатом выполнения следующего оператора

StringGrid1.Cells[3,4] := ‘Данные внесены’;

Литература:

  1. В.Попов. Паскаль и Дельфи.— СПб.: Питер, 2003.

  2. Фаронов В.В. Система программирования Delphi. – СПб.: БХВ-Петербург, 2003.