Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Пособие по Delphi.doc
Скачиваний:
18
Добавлен:
22.08.2019
Размер:
3 Мб
Скачать
☆

Главное меню

Находится на вкладке Standard.

T MainMenu позволяет поместить главное меню в программу. При помещении MainMenu на форму это выглядит, как просто иконка. Иконки данного типа называют "невидимыми компонентами", поскольку они невидимы во время выполнения программы. Создание меню включает три шага: (1) помещение MainMenu на форму, (2) вызов Дизайнера Меню через свойство Items в Инспекторе Объектов, (3) определение пунктов меню в Дизайнере Меню.

Чтобы создать процедуру, обрабатывающую действия, связанные с выбранным пунктом меню, произвести два щелчка по пункту на форме и в редакторе кода будет подготовлена заготовка процедуры, подобная этой:

procedure TForm1.N1Click(Sender: TObject);

begin

end;

Использование стандартных диалогов

На странице Dialogs представлены компоненты для вызова стандартных диалогов Windows. Внешний вид диалогов зависит от используемой версии Windows. Объекты, представленные на данной странице невидимы во время выполнения и вызов диалогов происходит программно.

OpenDialogs находится на странице Dialogs (диалоги).

Позволяет выбрать файл из списка файлера (подобно тому, как открывается файл в Word с помощью команды Открыть. ). Одним из главных свойств компонента OpenDialogs ( кроме самого имени компонента) является свойство NameFile, которому присваивается имя выбранного из панели диалога файла. В программе для проверки — выбран файл или еще нет, используется функция Execute. Функция логическая. Принимает значение Истина, если файл выбран и Ложь в противном случае. Фрагмент программы для выбора файла из панели диалога может выглядеть так:

if not od1.Execute then Exit;

NameFile := od1.FileName;

В этом примере, стандартное имя компонента OpenDialogs1 в инспекторе объектов было заменено на od1, для краткости. Программисты очень часто заменяют стандартные имена компонентов на свои( свойство Name).

Компонент SaveDialog (находится также на странице Dialogs) используется для выбора имени файла, в котором будет сохранена информация из диалоговой панели. Обычно такая диалоговая панель вызывается командами FileSave(Сохранить) или FileSave As (Сохранить как). Если пользователь указал имя файла и нажал кнопку Ok, то оно сохраняется как значение свойства FileName. Использование данного компонента аналогично использованию компонента OpenDialogs. Например,

if not SaveDialog1.Execute then Exit;

NameFile:=SaveDialog1.FileName;

Организация вывода на принтер

Для вывода на принтер нужно воспользоваться рядом процедур, определенных в модуле Printers. Т.е. в разделе Uses модуля программы нужно обязательно подключить модуль Printers:

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics,

Controls, Forms, Grids, DateUtils, Printers;

Далее в программном модуле нужно ассоциировать значение тестовой переменной с принтером с помощью процедуры AssignPrn и открыть файл для записи. Например,

Var

TextToPrint: System.Text;

……………………….

AssignPrn(TextToPrint); //ассоциировать с принтером

Rewrite(TextToPrint); //открыть файл

После этого вызов стандартных процедур Write и Writeln приведет к выводу теста на устройство печати. Например, вывод содержимого компонента Memo на принтер можно осуществить с помощью следующих инструкций:

For Line:=0 to Memo1.Lines.Count-1 do

Writeln(TextToPrint, Memo1.Lines[Line]);

После того как вывод информации завершен, необходимо вызвать стандартную процедуру Close:

System.Close(TextToPrint);

Практика

Задача

Дана информация об индивидуальных домах в некотором регионе в виде: номер кадастрового дела, Фамилия И.О. собственника, адрес дома, общая площадь (кв.м), дата последней уплаты налога на недвижимость. Составить программу, которая: 1) находит собственников, не уплативших налог за предыдущий год; 2) выводит информацию о домах площадью более 100 кв.м. Предусмотреть возможности ввода исходных данных с клавиатуры и файла на диске. Вывод предусмотреть в двух вариантах: файл либо принтер.

Для решения задачи предлагается создать три окна

Компоненты

Имя

компонента

Свойства

компонентов

Значение

Назначение

Form1

Caption

Учет индивидуальных домов

Заголовок главной формы

Label1

Caption

Visible

Для перехода в новую ячейку таблицы использовать клавишу ENTER. При вводе данных в последнюю ячейку строки нажать ENTER и клавишу СТЕЛКА ВНИЗ для перехода в другую строку

False

Справочная информация для пользователя программы

Строка подсказки невидима

Form1.StringGrid1

ColCount

FixedCol

FixedRow

Options:

goFixedVertLine

goFixedHorzLine

goVertLine

goHorzLine

goEditing

goTabs

goAlwaysShowEditor

ScrollBars

6

1

1

True

True

True

True

True

True

True

ssBoth

Количество столбцов по умолчанию

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

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

Опции:

Разметка зафиксированных вертикальных линий

Разметка зафиксированных горизонтальных линий

Разметка вертикальных линий внутри таблицы

Разметка горизонтальных линий внутри таблицы

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

Разрешает использование клавиши Tab для перемещения в другую ячейку

Признак нахождения компонента в режиме редактирования

Выводятся обе полосы прокрутки

Form1.MainMenu

N1

N2

N3

N4

N5

N6

N7

N8

N10

N1001

N11

N1003

N9

N1002

Ввод данных

Клавиатура

Файл

Расчет

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

Файл

Принтер

Вывод

Найти собственников, не уплативших налог за предыдущие годы

Вывести информацию о домах, площадь которых превышает 100 кв. м

Список должников

Площадь больше 100 кв.м

Список должников

Площадь больше 100 кв.м

Названия пунктов меню

OpenDialogs1

Name

Od1

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

SaveDialog1

Name

SaveDialog1

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

Form2

Caption

Дома с площадью более 100 кв.м

Заголовок формы

Form2.StringGrid1

Свойства аналогичны свойствам Form1.StringGrid1 (см. выше)

Label1

Caption

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

Form2.Button1

Caption

Закрыть

Кнопка для закрытия окна “ Дома с площадью более 100 кв.м ”

Form3

Caption

Должники

Заголовок формы

Form3.StringGrid1

Свойства аналогичны свойствам Form1.StringGrid1 (см. выше)

Label1

Caption

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

Справочная информация для пользователя программы

Label2

Caption

Поле для вывода результата

Form3.Button1

Caption

Закрыть

Кнопка для закрытия окна “Должники”

Для наглядности приведем структуру, создаваемого главного меню:

Переменные и массивы

Обозначение

в программе

Содержание

Тип

L

количество домов с площадью более 100 кв.м

целый

M

количество должников

целый

Delo_N

массив номеров кадастровых дел

строковый длиной 4

Famil

массив собственников

индивидуальных домов

строковый длиной 20

Adres

массив адресов индивидуальных домов

строковый длиной 30

S

массив площадей индивидуальных домов

вещественный

D

массив дат последней уплаты налога на недвижимость

Объект типа дата

n

Счетчик объектов в файле или таблице

целый

F

Файловая переменная

текстовый

NameFile

Имя файла

строковый длиной 20

DA

День уплаты налога

Целый беззнаковый

M

Месяц уплаты налога

Целый беззнаковый

Y

Год уплаты налога

Целый беззнаковый

i

Счетчик строк, управляющая переменная в цикле

Целый

TextToPrint

Файловая переменная для вывода на принтер

Системный текс

Текст модуля

unit Unit1;

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, Menus, Grids, DateUtils, StdCtrls,Unit2,Unit3, Printers;

// подключаются модули, связанные с 2-ой и 3-ей формами,

// библиотека функций и процедур работы с принтером

type

TForm1 = class(TForm)

MainMenu1: TMainMenu;

N1: TMenuItem;

N2: TMenuItem;

N3: TMenuItem;

N4: TMenuItem;

N5: TMenuItem;

N6: TMenuItem;

N7: TMenuItem;

N8: TMenuItem;

N10: TMenuItem;

N1001: TMenuItem;

StringGrid1: TStringGrid;

od1: TOpenDialog;

SaveDialog1: TSaveDialog;

N9: TMenuItem;

N1002: TMenuItem;

N11: TMenuItem;

N1003: TMenuItem;

Label1: TLabel;

procedure N8Click(Sender: TObject);

procedure N2Click(Sender: TObject);

procedure N3Click(Sender: TObject);

procedure FormCreate(Sender: TObject);

procedure StringGrid1KeyDown(Sender: TObject; var Key: Word;

Shift: TShiftState);

procedure N10Click(Sender: TObject);

procedure N1001Click(Sender: TObject);

procedure N11Click(Sender: TObject);

procedure N1003Click(Sender: TObject);

procedure N9Click(Sender: TObject);

procedure N1002Click(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

L:Integer;//количество домов с площадью более 100 кв.м

M:Integer;//количество должников

Delo_N:Array[1..1000] of String[4];//массив номеров кадастровых дел

Famil :Array[1..1000] of String[20]; ];{массив собственников

индивидуальных домов}

Adres :Array[1..1000] of String[30];{массив адресов индивидуальных домов}

S:Array[1..1000] of Real;//массив площадей индивидуальных домов

D:Array[1..1000] of TDate;{массив дат последней уплаты налога на недвижимость}

end;

var

Form1: TForm1;

implementation

{$R *.dfm}

//процедура закрывает главное окно — ВЫХОД

procedure TForm1.N8Click(Sender: TObject);

begin

Form1.Close;

end;

//активизация ввода с клавиатуры

procedure TForm1.N2Click(Sender: TObject);

begin

N2.Checked := True;//ставится галочка напротив пункта Клавиатура

Label1.Visible:=True;// поле с подсказкой становится видимым

StringGrid1.SetFocus;//фокус переносится в таблицу StringGrid

StringGrid1.Options := StringGrid1.Options + [goEditing];

//в StringGrid добавляется свойство,

// разрешающее редактирование ячеек

end;

//процедура ввода исходных данных из файла на диске

procedure TForm1.N3Click(Sender: TObject);

Var

n:integer;// счетчик объектов в файле

F:TextFile;// файловая переменная текстового типа

NameFile:String[20];//имя файла

DA,M,Y:Word;{день, месяц, год последней уплаты

налога на недвижимость, в файле эти числа вводятся через пробел }

begin

N3.Checked:=True;//ставится галочка напротив пункта Файл

if not od1.Execute then Exit;//если в открывшемся списке

//не выбрано имя файла, то прекращается выполнение процедуры

NameFile := od1.FileName;{переменной имя_файла присваивается

имя, выбранное из списка}

AssignFile(F,NameFile);//процедура связывает файловую переменную

// и конкретный файл

Reset(F);// процедура открывает файл для чтения

//счетчик объектов инициализируется единицей

n:=1;

{пока не достигнут конец файла, из файла читаются построчно:

номер кадастрового дела, фамилия собственника, адрес дома, площадь, дата в виде трех чисел на одной строке. Данные одновременно выводятся в таблицу в главном диалоговом окне}

While Not(EoF(F)) Do // пока не достигнут конец файла делать

Begin

Readln(F,Delo_N[n]); // читается из файла номер кадастрового дела

StringGrid1.Cells[1,n]:=Delo_N[n]; {номер кадастрового дела выводится в таблицу на 1 форме}

Readln(F,Famil[n]); // читается из файла фамилия собственника

StringGrid1.Cells[2,n]:=Famil[n];// фамилия выводится в форму на экран

Readln(F,Adres[n]); // читается адрес

StringGrid1.Cells[3,n]:=Adres[n];// адрес выводится в форму на экран

Readln(F,S[n]);// читается площадь

StringGrid1.Cells[4,n]:=FloatToStr(S[n]); {площадь выводится в таблицу на экране}

Readln(F,DA,M,Y);D[n]:=EncodeDate(Y,M,DA);{преобразование трех чисел в объект типа дата – массив дат}

StringGrid1.Cells[5,n]:=DateToStr(D[n]);// дата выводится в таблицу

n:=n+1;// счетчик объектов увеличивается на 1

{если количество строк в таблице на форме меньше n, то ему присваивается значение счетчика объектов }

if StringGrid1.RowCount < n then

StringGrid1.RowCount := n;

End;

{после того как достигнут конец файла, файл закрывается}

CloseFile(F);

end;

{процедура выполняется при появлении диалогового окна (формы) на экране, связана с событием — создание формы}

procedure TForm1.FormCreate(Sender: TObject);

Var

n:Integer; // счетчик объектов в таблице

begin

// заполнение шапки таблицы нулевой строки

StringGrid1.Cells[0,0]:='Номер п/п';

StringGrid1.Cells[1,0]:='Номер кадастрового дела';

StringGrid1.Cells[2,0]:='Фамилия И.О. собственника';

StringGrid1.Cells[3,0]:='Адрес';

StringGrid1.Cells[4,0]:='Общая площадь (кв.м)';

StringGrid1.Cells[5,0]:='Дата последней уплаты налога на недвижимость';

// цикл нумерации строк таблицы

For n:=1 to 1000 Do

StringGrid1.Cells[0,n]:=IntToStr(n);

end;

{Процедура, связанная с событием — нажатие клавиши в ячейке таблицы.

Проверяется правильность нажатия клавиш при вводе — ENTER(для перехода в ячейку справа и последовательно клавиш ENTER и СТРЕЛКА ВНИЗ (для перехода на следующую строку).Здесь же происходит считывание данных из ячеек таблицы в массивы. Такая технология ввода позволила организовать ввод для заранее неизвестного количества данных.}

procedure TForm1.StringGrid1KeyDown(Sender: TObject; var Key: Word;

Shift: TShiftState);

Begin

// если нажата клавиша СТРЕЛКА ВНИЗ

if Key = VK_DOWN then begin

//то если текущий номер строки таблицы меньше предыдущего

//значения количества строк в таблице, тогда ВЫХОД

if StringGrid1.Row < pred(StringGrid1.RowCount) then Exit;

//количество строк в таблице увеличивается на единицу

StringGrid1.RowCount := StringGrid1.RowCount + 1;

StringGrid1.Col := 1; // переход в начало строки

//если в первую ячейку текущей строки ничего не введено,

//то добавленная строка убирается

if (Length(StringGrid1.Cells[1,StringGrid1.Row]) = 0) then begin

StringGrid1.RowCount:=pred(StringGrid1.RowCount);Exit;

end;

end;

//если нажата клавиша ENTER, то

if (Key = VK_RETURN) then begin

case StringGrid1.Col of

//если номер столбца таблицы равен 1 и если ячейка не пуста

1 : if (Length(StringGrid1.Cells[1,StringGrid1.Row]) > 0)

//тогда содержимое ячейки с индексом равным номеру текущей строки

// помещается в массив Номер кадастрового дела

then

Delo_N[StringGrid1.Row] := StringGrid1.Cells[1,StringGrid1.Row]

//иначе количеству строк в таблице

//присваивается предыдущее значение и выход, т.е. программа будет

//ждать заполнения первой колонки в этой строке

else begin

StringGrid1.RowCount:=pred(StringGrid1.RowCount);Exit;

end;

//если текущий номер колонки таблице равен 2, то

//в массив собственников под номером равным номеру текущей строки //таблицы помещается содержимое ячейки, стоящей на пересечении

//второго столбца и текущей строки

2 : Famil[StringGrid1.Row] := StringGrid1.Cells[2,StringGrid1.Row];

// аналогично предыдущему вводится адрес

3 : Adres[StringGrid1.Row] := StringGrid1.Cells[3,StringGrid1.Row];

//если четвертая колонка не пуста, то строка символов преобразуется

//в вещественное число и помещается в массив площадей домов

4 : if Length(StringGrid1.Cells[4,StringGrid1.Row]) > 0 then

S[StringGrid1.Row]:=StrToFloat(StringGrid1.Cells[4,StringGrid1.Row])

//иначе в массив вводится число 0.00

else

S[StringGrid1.Row] := 0.00;

//если пятая колонка не пуста, то строка символов преобразуется в дату

//и помещается в массив дат

5 : if Length(StringGrid1.Cells[5,StringGrid1.Row]) > 0 then

D[StringGrid1.Row] := StrToDate(StringGrid1.Cells[5,StringGrid1.Row])

//иначе в массив дат помещается 0

else

D[StringGrid1.Row] := 0;

end;

//если текущий номер колонки меньше 5, то он увеличивается на 1

if StringGrid1.Col < 5 then

StringGrid1.Col := StringGrid1.Col +1

end;

end;

{процедура, связанная с пунктом меню — Найти собственников, не уплативших налог за предыдущие годы}

procedure TForm1.N10Click(Sender: TObject);

Var

i,n:integer;

begin

// ставится галочка напротив пункта меню

// — Найти собственников, не уплативших налог за предыдущие годы

N10.Checked:=True;

//подписывается шапка таблицы

Form3.StringGrid1.Cells[0,0]:='Номер по п/п';

Form3.StringGrid1.Cells[1,0]:='Фамилия И.О. собственника';

Form3.StringGrid1.Cells[2,0]:='Дата последней уплаты налога на недвижимость';

i:=0;// — номер строки в таблице

{ В цикле последняя дата уплаты налога собственником дома сравнивается

с текущей датой, установленной на компьютере. Если разница превышает 1 год — собственник является должником. Фамилии должников выводятся в таблицу в третьей форме. Если дата неизвестна, то выводится сообщение: “нет сведений”}

For n := 1 to pred(StringGrid1.RowCount) Do

// функция YearsBetween(D1,D2) находит разницу между двумя датами

IF YearsBetween(Date,d[n]) >= 1 then Begin

Inc(i); // i:=i+1;

Form3.StringGrid1.Cells[0,i]:=IntToStr(i);

Form3.StringGrid1.Cells[1,i]:=Famil[n];

if D[n]=0 then Form3.StringGrid1.Cells[2,i]:='нет сведений'

else

Form3.StringGrid1.Cells[2,i]:=DateToStr(D[n]);

Form3.StringGrid1.RowCount:=Form3.StringGrid1.RowCount+1

end;

// вывод количества должников

M:=i;

Form3.Label2.Caption:='Всего: '+ IntToStr(M)+' должников';

//показать форму 3

Form3.Show;

end;

{процедура, связанная с пунктом меню — Вывести информацию о домах, площадь которых превышает 100 кв.м}

procedure TForm1.N1001Click(Sender: TObject);

Var n,i:Integer;

Begin

//поставить галочку напротив выбранного пункта меню

N1001.Checked:=True;

Form2.StringGrid1.Cells[0,0]:='Номер по п/п';

Form2.StringGrid1.Cells[1,0]:='Номер кадастрового дела';

Form2.StringGrid1.Cells[2,0]:='Фамилия И.О. собственника';

Form2.StringGrid1.Cells[3,0]:='Адрес';

Form2.StringGrid1.Cells[4,0]:='Общая площадь (кв.м)';

Form2.StringGrid1.Cells[5,0]:='Дата последней уплаты налога на недвижимость';

i:=0;

{ В цикле производится сравнение площадей всех домов со 100 кв.м. Если площадь дома превышает 100, то вся информация о нем выводится в таблицу на форме 2}

For n:=1 to pred(Form1.StringGrid1.RowCount) Do

IF S[n]>100 Then Begin

Inc(i); // i:=i+1;

Form2.StringGrid1.Cells[0,i]:=IntToStr(i);

Form2.StringGrid1.Cells[1,i]:=Delo_N[n];

Form2.StringGrid1.Cells[2,i]:=Famil[n];

Form2.StringGrid1.Cells[3,i]:=Adres[n];

Form2.StringGrid1.Cells[4,i]:=FloatToStrF(S[n],ffFixed,10,2)+' кв.м';

if D[n]=0 then Form2.StringGrid1.Cells[5,i]:='нет сведений'

else

Form2.StringGrid1.Cells[5,i]:=DateToStr(D[n]);

Form2.StringGrid1.RowCount:=Form2.StringGrid1.RowCount+1

end;

L:=i;

Form2.Label1.Caption:='Всего домов площадью более 100 кв.м:'+IntToStr(L);

Form2.Show;

end;

{процедура, связанная с пунктом меню — Вывод в файл — список должников}

procedure TForm1.N11Click(Sender: TObject);

Var f:TextFile;

NameFile:String;

i:Integer;

begin

N11.Checked:=True;

{если из панели диалога не выбрано или не задано имя файла сохранения, то выход. Т.е. панель диалога будет находится на экране, пока пользователь не задаст имя файла.}

if not SaveDialog1.Execute then Exit;

//переменной ИмяФайла присваивается имя файла,

//заданное в панели диалога

NameFile:=SaveDialog1.FileName;

//устанавливается физическая связь между файловой переменной

// и конкретным файлом на внешнем носителе

AssignFile(f,NameFile);

//открыть файл для записи

Rewrite(f);

//в следующем фрагменте программы информация о должниках

// из формы 3 записывается в файл

Writeln (f,'список должников:');

Writeln (f,'Номер п/п ','Фамилия И.О. собственника',

' Дата последней уплаты налога на недвижимость');

For i:=1 To M do

Writeln (f,Form3.StringGrid1.Cells[0,i]:4,Form3.StringGrid1.Cells[1,i]:30,' ',

Form3.StringGrid1.Cells[2,i]:30);

//закрытие файла

CloseFile(f);

end;

{процедура, связанная с пунктом меню — Вывод в файл — список домов с площадью более 100 кв.м}

procedure TForm1.N1003Click(Sender: TObject);

Var f:TextFile;

NameFile:String;

i:Integer;

begin

N1003.Checked:=True;

// если не задано имя файла в панели диалога,

//панель диалога остается на экране

if not SaveDialog1.Execute then Exit;

//переменной ИмяФайла присваивается имя файла,

//заданное в панели диалога

NameFile:=SaveDialog1.FileName;

//устанавливается физическая связь между файловой переменной

// и конкретным файлом на внешнем носителе

AssignFile(f,NameFile);

//открыть файл для записи

Rewrite(f);

//в следующем фрагменте программы информация о домах с площадью

// более 100 кв.м из формы 2 записывается в файл

Writeln (f,'Дома с площадью более 100 кв. м:');

Writeln (f,'Номер п/п ','Номер кадастрового дела ',

'Фамилия И.О. собственника ', ' Адрес ',

'Общая площадь (кв.м) ', 'Дата последней уплаты налога на недвижимость');

For i:=1 To L do

Writeln (f,Form2.StringGrid1.Cells[0,i]:4,Form2.StringGrid1.Cells[1,i]:20,' ',

Form2.StringGrid1.Cells[2,i]:30,' ',Form2.StringGrid1.Cells[3,i]:30,

Form2.StringGrid1.Cells[4,i]:16,' ',Form2.StringGrid1.Cells[5,i]:20 );

CloseFile(f);

end;

{процедура, связанная с пунктом меню — Вывод на принтер — список должников}

procedure TForm1.N9Click(Sender: TObject);

Var TextToPrint:System.Text;

i:integer;

begin

N9.Checked:=True;

//устанавливается физическая связь с печатающим устройством

AssignPrn(TextToPrint);

// открытие для вывода

Rewrite(TextToPrint);

// в следующем фрагменте осуществляется вывод списка должников

// из формы 3 на принтер

Writeln (TextToPrint,'список должников:');

Writeln (TextToPrint,'Номер п/п ','Фамилия И.О.',

' Дата последней уплаты ');

Writeln (TextToPrint,' ','собсвенника',

' налога на недвижимость ');

For i:=1 To M do

Writeln (TextToPrint,Form3.StringGrid1.Cells[0,i]:4,

Form3.StringGrid1.Cells[1,i]:30,' ',Form3.StringGrid1.Cells[2,i]:30);

System.Close(TextToPrint);

end;

{процедура, связанная с пунктом меню — Вывод на принтер— список домов с площадью более 100 кв.м}

procedure TForm1.N1002Click(Sender: TObject);

Var TextToPrint:System.Text;

i:integer;

begin

N1002.Checked:=True;

// ассоциация с принтером

AssignPrn(TextToPrint);

//открытие для вывода

Rewrite(TextToPrint);

// в следующем фрагменте осуществляется вывод списка

// домов с площадью более 100 кв.м из формы 2 на принтер

Writeln (TextToPrint,'Дома с площадью более 100 кв. м:');

Writeln (TextToPrint,'N п/п','Номер кад. дела ',

'Фамилия И.О.собств.',' Адрес ',

'Общ. площ.(кв.м)','Дата посл. Уплаты налога на недвижимость');

For i:=1 To L do

begin

Writeln (TextToPrint,Form2.StringGrid1.Cells[0,i]:4,

Form2.StringGrid1.Cells[1,i]:20,' ',Form2.StringGrid1.Cells[2,i]:20,' ',

Form2.StringGrid1.Cells[3,i]:40,Form2.StringGrid1.Cells[4,i]:16,' ',

Form2.StringGrid1.Cells[5,i]:20 );

end;

System.Close(TextToPrint);

end;

end.

{модуль Unit2 связан с формой Form2, куда выводится список домов с площадью превышающей 100 кв.м}

unit Unit2;

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, Grids, StdCtrls;

type

TForm2 = class(TForm)

StringGrid1: TStringGrid;

Button1: TButton;

Label1: TLabel;

procedure Button1Click(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var

Form2: TForm2;

implementation

{$R *.dfm}

procedure TForm2.Button1Click(Sender: TObject);

begin

Form2.Close

end;

end.

{модуль Unit3 связан с формой Form3, куда выводится список должников по уплате налога на недвижимость}

unit Unit3;

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, Grids;

type

TForm3 = class(TForm)

Label1: TLabel;

StringGrid1: TStringGrid;

Button1: TButton;

Label2: TLabel;

procedure Button1Click(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var

Form3: TForm3;

implementation

{$R *.dfm}

procedure TForm3.Button1Click(Sender: TObject);

begin

Form3.Close

end;

end.

Вид некоторых диалоговых окон во время работы программы

Файл с исходной информацией удобнее подготовить с помощью стандартной программы блокнот. Каждое поле записи набирается на отдельной строке. Десятичный разделитель — точка. Дата уплаты налога в файле набирается в виде трех чисел на одной строке через пробел. Для приведенного выше примера файл с исходными данными выглядит так:

Задачи для самостоятельного решения

№ 7.1 Подсчитать значение Q, вычисляемой по формуле:

N

Yi

i=1

Q =  ,

N!

где Yi — элементы массива Y с размерностью N. Массив Y ввести из файла на диске. Вывод обеспечить в трех вариантах:1)на экран; 2)на печатающее устройство; 3)в файл на диске.

№ 7.2 Дан массив X, содержащий вещественные числа. Найти и записать на место X(1) — наибольший элемент массива X, а на место X(N) — наименьший элемент массива (X1,X2,...,XN). Ввод исходного массива X осуществить из файла на диске. Вывод обеспечить в трех вариантах:1)на экран; 2)на печатающее устройство; 3)в файл на диске.

№ 7.3 Дан массив Q(N),состоящий из отрицательных и положительных чисел. Составить из Q два массива: A, содержащий только положительные числа; B, содержащий только отрицательные. Массив Q вводится из файла на диске. Вывести исходный массив и массивы, полученные в процессе преобразования. Вывод обеспечить в трех вариантах:1)на экран; 2)на печатающее устройство; 3)в файл на диске.

№ 7.4 Даны натуральное число N, действительные числа

X1,X2,..., Xn. Получить (1+r)/(1+s),где r — сумма всех тех членов последовательности X1,X2,...,Xn, которые не превосходят 1,a s — сумма членов, больших. Вывести сначала массив X. Затем r,s. Ввод исходных данных осуществить из файла на диске. Вывод — по желанию пользователя программы либо на экран, либо на печать или в файл на диске.

№ 7.5 Дана последовательность из N различных чисел. Найти сумму чисел этой последовательности, расположенных между максимальным и минимальным числами ( в сумму включить и оба этих числа). Последовательность ввести из файла на диске. Вывести исходную последовательность в виде таблицы с указанием порядкового номера числа в последовательности и самого числа и саму сумму чисел. Вывод предусмотреть в трех вариантах:1) в файл на диске; 2)на экран; 3) на печатающее устройство.

№ 7.6 Даны: n — целое число (n>=2),последовательности действительных чисел : a1,a2,...,an. Получить:

min(a1+a2,a2+a3,...,an-1+an);

max(a1,a1a2,a1a2a3,...,a1...an-1an).

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

№ 7.7 Дан файл f1, который содержит номера телефонов сотрудников учреждения: указывается фамилия сотрудника, его инициалы и номер телефона. Найти телефон сотрудника по его фамилии и инициалам. Вывод по желанию пользователя либо на экран, либо в файл на диске, либо на печать.

№ 7.8 Дан файл f, содержащий сведения о кубиках, размер каждого кубика (длина ребра в см), его цвет (красный, желтый, зеленый или синий) и материал (деревянный, металлический, картонный). Найти: а) количество кубиков каждого из перечисленных цветов и их суммарный объем;

б) количество деревянных кубиков с ребром 3 см и количество металлических кубиков с ребром, большим 5 см. Вывод по желанию пользователя либо на экран, либо в файл на диске, либо на печать.

№ 7.9 Сведения об автомобиле состоят из его марки, номера и фамилии владельца. Дан файл f, содержащий сведения о нескольких автомобилях. Найти:

а) фамилии владельцев и номера автомобилей данной марки;

б) количество автомобилей каждой марки. Вывод по желанию пользователя либо на экран, либо в файл на диске, либо на печать.

№ 7.10 Дан файл f, содержащий сведения о книгах. Сведения о каждой из книг — это фамилия автора, название и год издания.

а) Найти названия книг данного автора, изданных до 2002 года.

б) Определить, имеется ли книга с названием “Информатика”. Если да, то сообщить фамилию автора и год издания, Если таких книг несколько, то сообщить имеющиеся сведения обо всех этих книгах. Вывод по желанию пользователя либо на экран, либо в файл на диске, либо на печать.