- •Сборник практических работ
- •Практическая работа № 1 Управляющие структуры Delphi. Программирование линейных алгоритмов.
- •Усвоить применение компонентов Label, Edit, Button и BitBtn.
- •Получить практические навыки программирования линейных алгоритмов в Delphi.
- •Практическая работа № 2 Управляющие структуры Delphi. Программирование ветвящихся алгоритмов. Инструкция If
- •Изучить структуру простого проекта на языке Delphi.
- •Усвоить применение инструкции if.
- •Практическая работа № 3 Реализация ветвящихся алгоритмов для решения прикладных задач
- •Получить практические навыки работы с ветвящимися алгоритмами в Delphi.
- •Практическая работа № 4 Использование визуальных компонентов Delphi для организации структуры ветвления:
- •Получить практические навыки работы с ветвящимися алгоритмами в Delphi.
- •Усвоить применение компонента RadioButton.
- •Усвоить применение компонента RadioGroup.
- •Группа переключателей RadioGroup
- •0:MessageDlg('Внимание! Не выбран ни один цвет!',mtInformation,[mbOk],0);
- •Практическая работа № 5 Использование визуальных компонентов Delphi для работы со списками –
- •Получить практические навыки работы с ветвящимися алгоритмами в Delphi.
- •Усвоить применение компонента ListBox.
- •Усвоить применение компонента ComboBox.
- •Практическая работа № 6 Использование циклических структур в Delphi
- •Получить практические навыки работы с циклическими алгоритмами в Delphi.
- •Закрепить практические навыки применения компонентов ListBox, ComboBox.
- •Закрепить практические навыки применения компонентов RadioButton, RadioGroup.
- •Формат записи оператора Repeat…until:
- •Практическая работа № 7 Разработка простейшего приложения типа «Калькулятор»
- •Закрепить практические навыки применения компонентов страницы Standart.
- •Закрепить практические навыки написания обработчиков простейших событий.
- •Практическая работа № 8 Разработка приложения для обработки массива
- •Освоить работу с массивами.
- •Усвоить применение компонента StringGrid.
- •Практическая работа № 9 Разработка простейшего графического редактора
- •Порядок выполнения
- •Практическая работа № 10 Разработка приложений с использованием компонентов Shape и Image
- •Порядок выполнения
Практическая работа № 8 Разработка приложения для обработки массива
Цель работы:
Освоить работу с массивами.
Усвоить применение компонента StringGrid.
Краткие теоретические сведения
Исходные данные для решения многих задач удобно представляются в табличной форме. Колонки и строки таблицы, как правило, состоят из однородной информации. Поэтому в программе для хранения и обработки табличных данных имеет смысл использовать двумерные массивы. В общем-виде, описание двумерного массива выглядит так:
Имя : Array [НижняяГраницаИндекса1..ВерхняяГраницаИндекса1,
НижняяГраницаИндекса2..ВерхняяГраницаИндекса2] of Тип;
где
Имя – имя массива;
Array – зарезервированное слово языка Pascal, указывающее, что объявляемый элемент данных – массив.
Тип – тип элементов массива.
Компонент StringGrid (строковая таблица) находится на странице Additional палитры компонентов. Значок компонента имеет вид:
Для обращения к содержимому ячейки компонента StringGrid используется свойство Cells[№столбца, №строки], при чем индексы первых стоки и столбца имеют значения нулей.
Задание 1.
Составить программу расчета суммы элементов двух одномерных массивов, придерживаясь предложенной формы. Примечание – значения массивов Х и Y вносятся пользователем после запуска приложения.
Порядок выполнения
Расположите на форме следующие компоненты: GroupBox1, на котором расположить StringGrid1; вне GroupBox1 – компоненты Button1, BitBtn1.
Установите следующие свойства:
Для компонента GroupBox1 измените значение Caption на Таблица обработки данных
Для компонента StringGrid:
Свойство |
Обозначение |
Значение |
Расположение компонента относительно другого компонента (на весь компонент) |
Align |
alClient |
Имя компонента |
Name |
Tabl |
Количество колонок таблицы |
ColCount |
4 |
Количество строк таблицы |
RowCount |
6 |
Количество зафиксированных слева колонок таблицы |
FixedCols |
1 |
Количество зафиксированных сверху строк таблицы |
FixedRows |
1 |
Признак допустимости редактирования содержимого ячеек таблицы |
Options\goEditing |
True |
Ширина колонок таблицы |
DefaultColWidth |
65 |
Высота строк таблицы |
DefaultRowHeight |
14 |
Ширина линии, ограничивающих ячейки таблицы |
GridLineWidth |
1 |
В разделе описания глобальных переменных допишите описание переменной I целого типа.
Создаете обработчик события 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;
Создаете обработчик события 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 |
Порядок выполнения
Создайте интерфейс Вашей программы подобно приведенному ниже, для чего поместите на форму следующие компоненты:
Tabl: TStringGrid;
Button1: TButton;
Label1: TLabel;
Для кнопки (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 очков. Затем список команд упорядочить в соответствии с количеством набранных баллов.
Дополнительное задание (для самостоятельного индивидуального выполнения)
— взять у преподавателя
Содержание отчета:
Постановка задачи
Тексты процедур – обработчиков событий, разработанных в приложении Delphi
Контрольные вопросы:
Для чего используется визуальный компонент StringGrid?
На какие две части делится таблица? В чем их назначение?
Как можно изменить размер фиксированной части таблицы?
Что представляет собой свойство Cells компонента StringGrid?
Что будет результатом выполнения следующего оператора
StringGrid1.Cells[3,4] := ‘Данные внесены’;
Литература:
В.Попов. Паскаль и Дельфи.— СПб.: Питер, 2003.
Фаронов В.В. Система программирования Delphi. – СПб.: БХВ-Петербург, 2003.