Скачать 43.19 Kb.
|
Лабораторная работа №6 Лабораторная работа №6. Работа с двумерными массивами в среде Delphi Двумерные массивы удобно вводить через компонент StringGrid, который находится на вкладке Additional (Дополнительная). Основные свойства этого компонента перечислены в лабораторной работе №5. В отличии от работы с одномерными массивами надо указывать количество строк и столбцов (RowCount, ColCount). Обращение к ячейке осуществляется следующим образом: StringGrid1.Cells[столбец,строка]. Внимание: На первом месте всегда номер столбца. Выводить элементы массива можно в компонент StringGrid или на форму через метку Label. Рассмотрим ввод и вывод элементов массива на конкретных задачах. Задача №1. Найти в целочисленном массиве минимальный и максимальный элементы и поменять их местами. В ![]() вод элементов массива осуществляется через StringGrid, а вывод результатов на форму через Label (см. рис.1). На форме помещены три кнопки: Вычислить, Сброс, Выход. StringGrid1 ![]() Label1 ![]() Label2 ![]() Label3 ![]() Label5 ![]() Label6 ![]() Label7 Label8 ![]() ![]() ![]() ![]() ![]() Button1 Button2 Button3 Рис. 1. При нажатии кнопки Вычислить активизируется следующая процедура: procedure TForm1.Button1Click(Sender: TObject); var a:array[1..5,1..5] of integer; max,min,i,j,maxi,maxj,mini,minj:integer; begin for j:=1 to 5 do begin for i:=1 to 5 do begin a[i,j]:=strtoint(StringGrid1.Cells[i-1,j-1]); label5.Caption:=Label5.Caption+inttostr(a[i,j])+' '; end; label5.Caption:=Label5.Caption+#13; end; max:=a[1,1]; maxi:=1; maxj:=1; min:=max; mini:=1; minj:=1; for j:=1 to 5 do for i:=1 to 5 do begin if a[i,j]>max then begin max:=a[i,j]; maxi:=i; maxj:=j end; if a[i,j] mini:=i; minj:=j; end; end; a[maxi,maxj]:=min; Label7.Caption:='max='+inttostr(max); a[mini,minj]:=max; Label8.Caption:='min='+inttostr(min); for j:=1 to 5 do begin for i:=1 to 5 do label6.Caption:=Label6.Caption+inttostr(a[i,j])+' '; label6.Caption:=Label6.Caption+#13; end; end; Текст процедуры обработки события KeyPress приведен ниже. Процедура осуществляет контроль вводимых данных, разрешая вводить в ячейку таблицы только цифры. Перемещение курсора в нужную ячейку таблицы осуществляется по нажатию клавиши Enter. Свойства Col и Row содержат соответственно номера колонки и строки таблицы, в которой находится курсор. Надо учитывать, что колонки и строки нумеруются с нуля. procedure TForm1.StringGrid1KeyPress(Sender: TObject; var Key: Char); begin case key of #8,'0'..'9':; #13: begin if stringGrid1.Col< stringGrid1.ColCount-1 then stringGrid1.Col:=stringGrid1.Col+1 {переход на следующую колонку} else begin if stringGrid1.Row< stringGrid1.RowCount-1 then begin stringGrid1.col:=0; stringGrid1.Row:=stringGrid1.Row+1 {переход на следующую строку} end; end; end; else key:=Chr(0); end; end; При нажатии кнопки Сброс происходит очистка полей ввода-вывода: procedure TForm1.Button2Click(Sender: TObject); var i,j:integer; begin for j:=1 to 5 do for i:=1 to 5 do StringGrid1.Cells[i-1,j-1]:=''; label5.Caption:=''; label6.Caption:=''; label7.Caption:=''; label8.Caption:=''; stringGrid1.col:=0; {установка курсора в позицию 0,0 таблицы} stringGrid1.row:=0; end; При нажатии кнопки Выход происходит закрытие приложения. См. предыдущие работы. Задача №2: В целочисленной квадратной матрице (массиве) найти максимальный элемент среди элементов, лежащих на главной диагонали и ниже ее. В этой задаче элементы массива вводятся через генератор случайных чисел, а вывод осуществляется в компонент StringGrid. Вид формы см. на рис.2. ![]() Label1 ![]() StringGrid ![]() Label2 Label3 ![]() ![]() ![]() ![]() ![]() Button1 Button2 Button3 Рис. 2. При нажатии кнопки Вычислить активизируется следующая процедура: procedure TForm1.Button1Click(Sender: TObject); var a:array[1..5,1..5] of integer; max,min,i,j,maxi,maxj,mini,minj:integer; begin randomize; {активизация генератора случайных чисел} for j:=1 to 5 do for i:=1 to 5 do begin a[i,j]:=random(50); {заполнение массива} StringGrid1.Cells[i-1,j-1]:=inttostr(a[i,j]); {вывод элементов массива в таблицу StringGrid} end; max:=a[1,1]; maxi:=1; maxj:=1; for j:=1 to 5 do for i:=1 to j do begin if a[i,j]>max then begin max:=a[i,j]; maxi:=i; maxj:=j end; end; Label2.Caption:='max='+inttostr(max); {вывод найденного значения} Label3.Caption:='i='+inttostr(maxj)+' j='+inttostr(maxi); end; При нажатии клавиши Сброс происходит очистка полей вывода: procedure TForm1.Button2Click(Sender: TObject); var i,j:integer; begin for j:=1 to 5 do for i:=1 to 5 do StringGrid1.Cells[i-1,j-1]:=''; label2.Caption:=''; label3.Caption:=''; stringGrid1.col:=0; stringGrid1.row:=0; end; Реакция на нажатие клавиши Выход аналогична рассмотренной ранее. В заключении можно сказать, что обработка двумерных массивов Delphi осуществляется так же как и в языке Pascal. Отличие заключается только в формах ввода-вывода элементов массива. Надо помнить, что в Delphi:
. |
![]() | Лабораторная работа Установка и настройка 6 Лабораторная работа Демонстрационный проект 7 Упражнение 1: Работа с основной схемой проекта 7 Упражнение 2: Работа со схемой «Резервуарный парк» Разработка систем диспетчерского контроля и управления с использованием Infinityscada 4 | ![]() | Лабораторная работа. Получение и свойства оксидов, гидроксидов и солей Лабораторная работа. Ряд напряжений металлов. Гальванические элементы. Электролиз юююююю |
![]() | Тематическое планирование биология, 6 класс Морфология листа (лабораторная работа) 12. Строение растительного организма. Клетки и ткани 13. Типы растительных тканей (Лабораторная... | ![]() | Лабораторная работа №1 (одномерные массивы) 27 Лабораторная работа №6 (статические массивы, знакомство с графическим режимом. Возможно будет изменена) 49 |
![]() | Лабораторная работа №5. Эксперимент лабораторная работа №6 Раздел II. Эмпирические исследования познавательных процессов. Ощущения и восприятие лабораторные работы №7-9: Методика «Специфика восприятия» Цель: Выявление типов поведения студентов (коллег) в дискуссии (наблюдение по схеме Р. Бейлза) | ![]() | Лабораторная работа №1 Изучение автоматической телеграфной станции ат-пс-пд лабораторная работа №2 Изучение телеграфного коммутационного сервера «Вектор-2000» Рецензент – зам начальника Гомельской дистанции сигнализации и связи Белорусской железной дороги В. И. Прокопюк |
![]() | Лабораторная работа Правила работы с вычислительной установки Лабораторная работа Работа с клавиатурой Лабораторный практикум по информатике представляет собой учебно-практическое издание для студентов педагогического вуза непрофильных... | ![]() | Лабораторная работа по курсу «Физические основы микроэлектроники» Нижний Новгород, 2005 Операционный усилитель: Лабораторная работа по курсу «Микроэлектроника» / Сост. Н. В. Федосеева, С. М. Планкина. – Н. Новгород, ннгу,... |
![]() | Лабораторная работа №1 Лабораторная работа №1 1 В качестве примера рассматривается деятельность вымышленной компании «Computer Word». Компания занимается в основном сборкой и продажей... | ![]() | Лабораторная работа выполняется в дисплейном классе. Результат представляет собой работающую программу, которая может анализировать любые тексты и сообщать об ошибках программирования Данная лабораторная работа рассчитана на 4 аудиторных часа и ещё 4 часа самостоятельной работы для изучения литературы и оформление... |