Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь FAQ Написать работу КАТЕГОРИИ: АрхеологияБиология Генетика География Информатика История Логика Маркетинг Математика Менеджмент Механика Педагогика Религия Социология Технологии Физика Философия Финансы Химия Экология ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Использование динамических переменныхСодержание книги
Поиск на нашем сайте
Указатели являются эффективным средством построения списков. Списком называется упорядоченная структура, каждый элемент которой содержит ссылку, связывающую его со следующим элементом. Для организации списков используются записи, состоящие из двух смысловых частей: основной и дополнительной. Основная часть содержит подлежащую обработке информацию, в дополнительной части находится указатель на следующую запись списка. Начало списка указывается в переменной, которая всегда присутствует в программе обработки списков. Если в списке нет элементов, т.е. список пустой, значение этой переменной равно Nil. Если список не заполнен, последний элемент содержит в дополнительной части значение Nil. Наибольшее распространение получили два вида списков – стеки и очереди. Стек – это список с одной точкой доступа к его элементам, которая называется вершиной стека. Добавить или убавить элемент можно только через его вершину. Принцип работы стека: «последний пришел – первый вышел». Основные операции над стеком: формирование стека, добавление, удаление и просмотр элементов стека. Для их демонстрации используем следующее описание: type pSt=^zap; zap=record inf:integer; adr:pSt; end; var pVer, pTek, nVer:pSt; elSt:integer; Формирование и добавление элементов в стек procedure TForm1.BitBtn1Click(Sender: TObject); Begin pVer:= nil; new(pTek); elSt:=StrToInt(Edit1.Text); pTek^.inf:=elSt; pTek^.adr:=pVer; pVer:=pTek; Edit1.Text:=''; Edit1.SetFocus; end; Удаление элемента из стека procedure TForm1.BitBtn3Click(Sender: TObject); Begin pVer:=pTek^.adr; Dispose(pTek); pTek:=pVer; end; Просмотр элементов стека procedure TForm1.BitBtn4Click(Sender: TObject); Begin pTek:=pVer; while pTek<> nil do Begin Memo1.Lines.Add(#9+IntToStr(pTek^.inf)); pTek:=pTek^.adr; end; Пример создания приложения Использование динамических массивов Задание. Создать приложение для вычисления наименьшего и наибольшего из всех значений элементов целочисленной матрицы A[m,n]. Значения m и n задаются пользователем на панели интерфейса, а элементы матрицы А генерируются при помощи датчика случайных чисел и размещаются в памяти динамически. Сохранение проекта Для нового проекта создайте новую папку, например, X: \ 35эи \ LAB11_M. Сохраните проект File | Save Project As… Сначала сохраните модуль под именем UnDinMas, затем файл проекта под именем Pr_DinMas. Размещение компонентов на Форме Один из возможных вариантов панели интерфейса создаваемого приложения показан на рисунке 11.1. Разместим на форме компоненты Label, SpinEdit, BitBtn и Stringgrid. Рис.11.1. Размещение компонентов на форме Установите для компонентов SpinEdit1 и SpinEdit2 значения свойств: MinValue=2, MaxValue=10. В тех случаях, когда объем выводимой информации превышает размер поля компонента Stringgrid1, целесообразно снабдить его линейками прокрутки для этого в свойстве ScrollBars установим значение ssBoth. Создание процедуры обработки событий FormCreate И BitBtn1Click Двойным нажатием клавиши «мыши» на Форме и кнопке BitBtn создайте соответствующие процедуры обработки событий. Пользуясь текстом модуля UnDinMas, наберите операторы этих процедур. Создать процедуру, которая будет выделять заданным цветом границы ячеек с наименьшим и наибольшим значениями в компоненте StringGrid. Для создания такой процедуры сделайте активным компонент StringGrid и на странице Events (события) Инспектора Объектов дважды щелкните «мышью» в правой части события OnDrawCell. В ответ Delphi создаст обработчик этого события – процедуру procedure TForm1.StringGrid1DrawCell и установит курсор между операторами begin и end этой процедуры. Используя текст модуля UnDinMas, наберите операторы процедуры TForm1.StringGrid1DrawCell. Текст модуля UnDinMas unit UnDinMas; Interface Uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, Spin, Buttons, Grids;
Type TForm1 = class(TForm) Label1: TLabel; Label2: TLabel; Label3: TLabel; Label4: TLabel; Label5: TLabel; Label6: TLabel; Label7: TLabel; Label8: TLabel; Label9: TLabel; StringGrid1: TStringGrid; BitBtn1: TBitBtn; SpinEdit1: TSpinEdit; SpinEdit2: TSpinEdit; BitBtn2: TBitBtn; procedure FormCreate(Sender: TObject); procedure SpinEdit1Change(Sender: TObject); procedure SpinEdit2Change(Sender: TObject); procedure BitBtn1Click(Sender: TObject); procedure StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer; Rect: TRect; State: TGridDrawState); Private { Private declarations } Public { Public declarations } end;
Var Form1: TForm1;
Implementation
{$R *.dfm} Type Mas = array [1..1] of integer; pMas = array [1..1] of ^mas; Var pA: ^pMas; m,n,max,min: integer;
procedure TForm1.FormCreate(Sender: TObject); Begin SpinEdit1.Text:='6'; // начальное значение m SpinEdit2.Text:='8'; // начальное значение n m:=6; n:=8; StringGrid1.RowCount:=m; // количество строк StringGrid1.ColCount:=n; // количество столбцов end;
procedure TForm1.SpinEdit1Change(Sender: TObject); Begin m:=StrToInt(SpinEdit1.Text); StringGrid1.RowCount:=m; end;
procedure TForm1.SpinEdit2Change(Sender: TObject); Begin n:=StrToInt(SpinEdit2.Text); StringGrid1.ColCount:=n; end;
procedure TForm1.BitBtn1Click(Sender: TObject); label 1; Var i,j,k,l,r,p: integer; Begin Randomize; // инициализация датчика случайных чисел GetMem(pA,4*m); for i:=1 to m do begin // формирование i-й строки массива GetMem(pA^[i],SizeOf(integer)*n); for j:=1 to n do Begin 1: r:=Random(1000); // генерирование случайного числа for k:=1 to i do Begin if k=i then p:=j-1 else p:=n; for l:=1 to p do if r=pA^[k]^[l] then goto 1; //если число есть в массиве, //тогда сгенерировать новое число end; pA^[i]^[j]:=r; // случайное число занести в массив end; end; for i:=1 to m do for j:=1 to n do StringGrid1.Cells[j-1,i-1]:=IntToStr(pA^[i]^[j]); max:=pA^[1]^[1]; min:=max; for i:=1 to m do for j:=1 to n do if max<pA^[i]^[j] then max:=pA^[i]^[j] else if min>pA^[i]^[j] then min:=pA^[i]^[j]; Label8.Caption:=IntToStr(min); Label9.Caption:=IntToStr(max); end;
procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer; Rect: TRect; State: TGridDrawState); Begin with StringGrid1.Canvas do if StringGrid1.Cells[ACol,ARow]=IntToStr(min) then Begin Brush.Color:=clGreen; FrameRect(Rect); End else if StringGrid1.Cells[ACol,ARow]=IntToStr(max) then Begin Brush.Color:=clRed; FrameRect(Rect) End end;
end. Пример создания приложения
|
||||
Последнее изменение этой страницы: 2016-12-16; просмотров: 291; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 18.217.104.36 (0.006 с.) |