
- •Д.С.Ситкин
- •Информатика.
- •Программированиевdelphi
- •Лабораторныйпрактикум
- •Содержание
- •Введение
- •Основныепонятияпрограммирования
- •Этапыпрограммирования
- •Средаdelphi.Созданиепростейшегопроекта
- •Формаиеёсвойства
- •Компонентыформыиихсвойства
- •КомпонентLabeledEdit
- •Событиеипроцедураобработкисобытия
- •Пример1.1
- •Компиляцияизапускпроектанаисполнение
- •Структураисохранениепроекта
- •Задание
- •Содержаниеотчёта
- •Контрольныевопросы
- •Линейныйалгоритм
- •Типыданных
- •Константыипеременные
- •Арифметическиеоперации
- •Правилазаписитиповыхдействий
- •Структурапроцедурыобработкисобытия
- •Пример2.1
- •Задание
- •Содержаниеотчёта
- •Контрольныевопросы
- •Подпрограммы
- •Классификацияиструктураподпрограмм
- •Механизмработыподпрограммыиобменапараметрами
- •Пример3.1
- •Задание
- •Содержаниеотчёта
- •Контрольныевопросы
- •Структурамодуля
- •Созданиеиподключениемодуля
- •Пример4.1
- •Условныйоператор.Неполнаяформа
- •Условныйоператор.Полнаяформа
- •IfусловиеthenоператорS1elseоператорS2
- •Пример5.1
- •Пример5.2
- •Операторвыбора
- •Пример5.3
- •Содержаниеотчёта
- •Контрольныевопросы
- •Контрольсинтаксисавводимыхданных
- •Задание
- •Содержаниеотчёта
- •Контрольныевопросы
- •Алгоритмыповторений
- •Операторцикласпредварительнымусловием
- •Пример7.1
- •Операторцикласпараметром(сосчётчиком)
- •Пример7.2
- •Пример7.3
- •Операторцикласпоследующимусловием
- •Пример7.4
- •Задание
- •Содержаниеотчёта
- •Контрольныевопросы
- •Массивы
- •Объявлениемассива
- •Обработкамассивов
- •Пример8.1
- •Динамическиемассивы
- •Подпрограммасоткрытымпараметром-массивом
- •Пример8.2
- •Целесообразностьвыделенияпамятиподмассивы
- •Контрольсинтаксисаэлементовмассива
- •Задание
- •Обработкамногомерныхмассивов
- •Пример9.1
- •КомпонентStringGrid
- •Пример9.2
- •Сортировкамассивов
- •Пример9.3
- •Задание
- •Содержаниеотчёта
- •Контрольныевопросы
- •Внешниефайлы
- •Физическиеилогическиефайлы
- •Классификациялогическихфайлов
- •Процедурыифункцииобработкифайлов
- •Пример 10.1
- •КомпонентыOpenDialog иSaveDialog
- •Пример 10.2
- •Пример 10.3
- •Задание
- •Содержаниеотчёта
- •Контрольныевопросы
- •Олабораторнойработе
- •Информатика. Программированиев delphi
Пример9.2
Разработаемпроектдляудвоенияэлементовглавнойдиагоналиитранспонированияквадратнойматрицызадаваемого размера.
Разобьём задачу на две части: ввод размера матрицы (компонентEdit1) с формированием в соответствии с ним таблицы для ввода зна-ченийэлементовмассива(событиеButton1Click)иегообработкусвы-водом результатов (событиеButton2Click). Разместим на форме компо-нентStringGrid, число фиксированных строк и столбцов назначим понулям. Для возможности ввода и редактирования значений элементовво время работы приложения установим значениеTrueсвойстваOp-tions.goEditing. НазначимзначенияFalseсвойствVisibleдляStringGridиEnabledдляButton2.Этозначит,чтопослезапускаприложения,табли-
цаStringGridна
форме будет визуальноотсутствовать,
а
кнопкаButton2недо-ступна.Этоисключитвозможностьвводаэлементовмассиваиегообра-ботки
до программного изменения
этихзначенийнаTrue.Произведёмихпо-
слевводапользователемдопустимого
размера матрицы вEdit1и щелчка поButton1.Нарис.9.4представленаблок-схемаалгоритмавыполненияпервойчастизадачи(событиеButton1Click).
Рис.9.5
Вовторойчасти(событиеBut-ton2Click)введённые в компонентStringGridэлементывконструкциивложенныхцикловсчитываютсявпамять после проверки синтаксисакаждогоэлементавовложенномцикле (рис. 9.5). Затем происходитудвоение элемента, если он лежитнаглавнойдиагонали,выводэле-мента,например,вкомпонентLabel2,длякоторогоустановимзначениеTrueсвойстваAutoSize,т.к. заранее размер матрицы неиз-вестен. После выхода из вложенно-го цикла, при переходе к следую-щейстроке,выполнимпереводстроки выводав компонентеLabel2длясохраненияматричнойструк-турыпредставлениярезультата.Поскольку значение переменнойn,содержащейразмерматрицы,ис-пользуется в обеих процедурах, еёследуетобъявитькакглобальную,т.е.внепроцедур.Нарис.9.6и9.7
представленыпримерыработыприложения.
IMPLEMENTATION
{$R*.dfm}
varn:integer;//объявленакакглобальная(внутримодуля)переменная
ProcedureTForm1.Button1Click(Sender:TObject);
varCod:integer;
Begin
Val(Edit1.Text, n, Cod); //проверка синт-са и вводnif(Cod < > 0)or(n<2)then//если ошибка, - тоbegin
Button2.Enabled:=False;//блокировкакнопки2
ShowMessage('ошибкаразмераматрицы');
Exit;//досрочноезавершениепроцедуры
end;
withStringGrid1do//операторприсоединения-
begin//вып-е неск. действий с одним компонентомRowCount:=n; //установлениечисластрокColCount:=n; //установлениечисластолбцовVisible:=True; //сделатьStringGrid1видимым
end;//конецдействий,выполняемыхскомпонентом
Button2.Enabled:=True;//активациякнопки2
End;//конецпервойпроцедуры
ProcedureTForm1.Button2Click(Sender:TObject);varx:array of array ofreal;i, j:byte;Cod:integer;Begin
Label2.Caption:='';//очисткаполявыводаприповт.щелчке
SetLength(x, n, n); //выделение памяти под матрицуfori:=0ton1do//внешний цикл (перебор строк)begin//началотелавнешнего цикла
forj:=0ton1do//вложенныйцикл(переборстолбцов)
begin//начало тела вложенного циклаVal(StringGrid1.Cells[i,j],x[i,j],Cod);//вводxijifCod<>0thenbegin//еслиошибкасинтаксиса,то
Рис.9.6
Рис.9.7
Label2.Caption:='';//очисткаполявывода
ShowMessage('ошибкасинтаксисавматрице');
SetLength(x,0,0); Exit;//высвоб.памятиивыход
end;//конецдействийдляслучаясинтакс.ошибки
ifi=jthenx[i,j]:=2*x[i,j];//удв-е элемента,еслионнаглавнойдиагон.
Label2.Caption:=Label2.Caption+#9+FloatToStr(x[i, j]); //выводxijend;//конецтелавложенногоциклаLabel2.Caption:=Label2.Caption+#13;//переводстрокивывода
end;//конецтелавнешнегоцикла
SetLength(x,0,0);//высвобождениепамятихраненияэлементовматрицы
End;END.//конецвторойпроцедурыи конецмодуляпроекта