- •1. Создание консольного приложения в среде Delphi
- •Var х,у,z:real;
- •Save changes to Unitl.Pas? (Сохранить изменения в Unitl.Pas?),
- •1. Из таблицы 3.1 взять условие задачи (вариант согласовать с преподавателем). Таблица 3.1
- •Var a1 :textfile; // a1 – текстовый файл
- •При открытии файла желательно использовать функцию
- •InitialDir типа String – определяет каталог, содержимое которого отображается при вызове окна диалога. Если каталог не задан, то отображается содержимое текущего каталога;
- •С войства компонентов
- •Контрольные вопросы
FileName типа String – указывает имя и полный путь файла, выбранного в диалоге. Имя файла отображается в строке редактирования с названием имя файла и является результатом диалога;
Title типа String – задает заголовок окна. Если свойство Title не установлено, то по умолчанию используется заголовок Open для OpenDialog и заголовок Save – для SaveDialog;
InitialDir типа String – определяет каталог, содержимое которого отображается при вызове окна диалога. Если каталог не задан, то отображается содержимое текущего каталога;
DefaultExt типа String – задает расширение, автоматически подставляемое к имени файла, если пользователем расширение имени не указано;
Options типа TOpenOptions – настройка параметров, управляющих внешним видом и функциональными возможностями диалога;
Filter типа String – задает маски имен файлов, отображаемых в раскрывающемся списке под названием Files of type. В окне диалога видны имена файлов, которые совпадают с указанной маской. По умолчанию значением Filter является пустая строка, что соответствует отображению имен файлов всех типов;
FilterIndex типа Integer – указывает, какая из масок фильтра отображается в списке. По умолчанию свойство FilterIndex имеет значение 1 и используется первая маска.
Фильтр – это последовательность значений, разделенных знаком |. Каждое значение состоит из описания и маски, также разделенных знаком |. Описание представляет собой обычный текст, поясняющий пользователю данную маску. Маска является шаблоном отображаемых файлов и состоит из имени и расширения. Если для одного описания приводится несколько масок, то они разделяются знаком ;. Фильтр обычно формируется при проектировании приложения. Редактор фильтра (Filter Editor) вызывается через свойство Filter Инспектора объектов.
Пример формирования фильтра с двумя масками – маской для текстовых файлов и маской для всех файлов:
OpenDialog1.Filter:='Текстовые файлы| *.txt;*.doс|Все файлы| *.*';
Так как в раскрывающемся списке диалога отображается только описание фильтра, то в описание целесообразно включить маску, например:
OpenDialog1.Filter:= 'Текстовые файлы *.txt;*.doc|*.txt;*.doc' + '|Все файлы *.*|*.*';
Для вызова любого стандартного диалога используется метод Execute тип Boolean. При закрытии диалога кнопкой Open или Save (Открыть или Сохранить) функция Execute возвращает значение True, а при отмене диалога – значение False. После закрытия стандартного диалога он через свои свойства возвращает значения, выбранные или установленные в процессе диалога.
Пример использования стандартного диалога OpenDialog:
procedure TForm1.Button2Click(Sender: TObject); {нажатие на кнопку Button2}
begin
if OpenDialog1.Execute then {при отмене диалога открытие файла не происходит}
Memo1.Lines.LoadFromFile(OpenDialog1.FileName);
end;
Пример сохранения графического образа в файл:
На форме Form1 расположено меню с двумя пунктами Save и SaveAs, компонент SaveDialog и компонент Image1 для хранения графического образа. Если вызывается пункт Save, то проверяется, был ли уже создан файл для данного графического образа. Если был создан, то образ сохраняется. Если файл не был создан, вызывается метод SaveAs, который открывает окно SaveDialog1 и запрашивает имя файла для графического образа, после этого управление передается методу Save.
var Form1: TForm1;
CurrentFile:String;
implementation
{$R *.DFM}
procedure TForm1.Save1Click (Sender: TObject)
begin
if CurrentFile <> ' ' then
Image1.Picture.SaveToFile(CurrentFile) {файл уже существует}
else SaveAs1Click(Sender);{иначе нужно ввести имя файла}
end;
ргосеdurе ТFоrm1.SaveAs1Click(Sender: TObject);
begin
if SaveDialog1.Execute then { Получить имя файла }
begin
СurrentFile := SaveDialog1.FileName;
{сохранить файл с именем, заданным пользователем}
Save1Click(Sender); {вызов метода сохранения файла}
end;
еnd;
Компоненты OpenPictureDialog и SavePictureDialog вызывают стандартные диалоги открытия и сохранения графических файлов. Эти стандартные диалоги отличаются от OpenDialog и SaveDialog видом окон и установленными значениями свойства Filter.
Задание
Составить программу с использованием текстовых файлов (задание согласовать с преподавателем).
Пример
Найти максимальный элемент матрицы.
Решение
Ввод/вывод элементов матрицы в файл осуществляется поэлементно для каждой строки. Для отображения элементов матрицы использован компонент StringGrid. Поиск максимального элемента матрицы осуществляется по алгоритму, показанному на рис.5.1. Внешний вид спроектированной формы показан на рис.5.2.
С
войства
компонентов, размещенных на форме
Object Form1: TForm1 Left = 239 Top = 107 Width = 456 Height = 378 Caption = ’Лабораторная работа' Color = clBtnFace Font.Charset = DEFAULT_CHARSET Font.Color = clWindowText Font.Height = -11 Font.Name = 'MS Sans Serif' Font.Style = [] OldCreateOrder = False PixelsPerInch = 96 TextHeight = 13 object Label1: TLabel Left = 16 Top = 16 Width = 48 Height = 13 Caption = 'Столбцов' object Label2: TLabel
|
TabOrder = 0 object X_Button: TButton Left = 248 Top = 16 Width = 73 Height = 33 Caption = 'Открыть' TabOrder = 1 OnClick = X_ButtonClick object Col_Edit: TEdit Left = 80 Top = 8 Width = 57 Height = 21 TabOrder = 2 Text = ‘8’ OnExit = Col_EditExit object Row_Edit: TEdit Left = 80 Top = 40 Width = 57 |
Left = 24 Top = 48 Width = 30 Height = 13 Caption = 'Строк' object Label3: TLabel Left = 9 Top = 99 Width = 171 Height = 13 Caption = 'Максимальный элемент таблицы' object X_StringGrid: TStringGrid Tag = 1 Left = 8 Top = 136 Width = 433 Height = 209 ColCount = 8 DefaultColWidth = 50 DefaultRowHeight = 23 FixedCols = 0 RowCount = 8 FixedRows = 0 Options = [goVertLine, goHorzLine, goDrawFocusSelected, goEditing, goTabs, goAlwaysShowEditor] ScrollBars = ssNone
object Button3: Tbutton Left = 344 Top = 96 Width = 89 Height = 25 Caption = 'Найти' TabOrder = 7 OnClick = Button3Click |
Height = 21 TabOrder = 3 Text = ‘8’ OnExit = Row_EditExit object Button1: TButton Left = 152 Top = 16 Width = 75 Height = 33 Caption = 'Сохранить' TabOrder = 4 OnClick = Button1Click object Button2: TButton Left = 336 Top = 16 Width = 73 Height = 33 Caption = 'Выход' TabOrder = 5 OnClick = Button2Click object Max_Edit: TEdit Left = 192 Top = 96 Width = 121 Height = 21 TabOrder = 6 Text = '0'
object X_OpenDialog: TOpenDialog Filter = '*.dat|*.dat' Left = 272 Top = 56 object X_SaveDialog: TSaveDialog Filter = '*.dat|*.dat' Left = 184 Top = 56 |
Текст программы
unit Lab_file;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, Grids;
type
TForm1 = class(TForm)
X_StringGrid: TStringGrid;
X_Button: TButton;
X_OpenDialog: TOpenDialog;
Col_Edit: TEdit;
Label1: TLabel;
Label2: TLabel;
Row_Edit: TEdit;
Button1: TButton;
X_SaveDialog: TSaveDialog;
Button2: TButton;
Max_Edit: TEdit;
Label3: TLabel;
Button3: TButton;
procedure X_ButtonClick(Sender: TObject);
procedure Row_EditExit(Sender: TObject);
procedure Col_EditExit(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
private
function Max:real;
public
{ Public declarations }
end;
var Form1: TForm1;
implementation
{$R *.DFM}
function TForm1.Max:real; // Процедура поиска // максимального элемента массива
var i,j,im,jm,p:integer;
m,n:real;
begin
im:=0;jm:=0;
with X_StringGrid do
begin
Val(Cells[im,jm],m,i);
for i:=0 to ColCount do
begin
for j:=0 to RowCount do
begin
Val(Cells[i,j],n,p);
if m<=n then
begin
m:=n;
im:=i;
jm:=j;
end;
end;
end;
end;
Max:=m;
end;
procedure TForm1.Row_EditExit(Sender: TObject);
//процедура изменения высоты строк
begin
with X_StringGrid do
begin
RowCount:=StrToInt(Row_Edit.Text);
DefaultRowHeight:=round(Height/(StrToInt(Row_Edit.Text)+1));
end;
end;
procedure TForm1.Col_EditExit(Sender: TObject);
//процедура изменения ширины столбцов
begin
with X_StringGrid do
begin
ColCount:=StrToInt(Col_Edit.Text);
DefaultColWidth:=round(Width/(StrToInt(Col_Edit.Text)+1));
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
// процедура записи массива в файл
var Fl:TextFile;
i,j:integer;
begin
if X_SaveDialog.Execute then
begin
AssignFile(fl,X_SaveDialog.FileName+'.dat');
Rewrite(fl);
with X_StringGrid do
for i:=0 to RowCount do
begin
for j:=0 to ColCount do
write(fl,Cells[j,i]+' ');
writeln(fl);
end;
CloseFile(fl);
end;
end;
procedure TForm1.X_ButtonClick(Sender: TObject);
// процедура чтения массива из файла
var Fl:TextFile;
i,j:integer;
s:char;
a:real;
begin
if X_OpenDialog.Execute then
begin
AssignFile(fl,X_OpenDialog.FileName);
Reset(fl);
j:=0;
while not(SeekEof(fl)) do
begin
i:=0;
while not(SeekEoln(fl)) do
begin
read(fl,a);
X_StringGrid.Cells[i,j]:=FloatToStr(a);
i:=i+1;
end;
readln(fl);
j:=j+1;
end;
CloseFile(fl);
Col_Edit.Text:=IntToStr(i);
Row_Edit.Text:=IntToStr(j);
Row_EditExit(Sender);
Col_EditExit(Sender);
end;
end;
procedure TForm1.Button2Click(Sender:
TObject);
// процедура выхода из программы
begin
Application.Terminate;
end;
procedure TForm1.Button3Click(Sender:
TObject);
// процедура на нажатие кнопки «Найти»
begin
Max_Edit.Text:=FloatToStrF(Max,ffGeneral,4,2);
end;
end.
Контрольные вопросы
Что такое файл и в каких случаях его удобно использовать?
Какие типы файлов и как они описываются в Object Pascal?
Описать способ ввода/вывода файловых данных?
Какие диалоги используются при работе с файлами?
Описать разработанную программу.
Лабораторная работа №17
ПОСТРОЕНИЕ И ПЕЧАТЬ ДИАГРАММ
Цель работы:
получение практических навыков в построении и печати диаграмм.
Общие сведения
Для построения диаграмм предназначен компонент TChart.
Компонент TChart представляет собой библиотеку процедур построения диаграмм, написанных с использованием VCL. Компонент TChart выведен из класса TPanel и поэтому наследует его свойства.
Для добавления диаграммы к приложению необходимо разместить компонент TChart на форму и при необходимости изменить размеры диаграммы. Диаграмму также можно добавить с помощью команды File | New (Файл | Создать) и пиктограммы TeeChart Wizard, расположенной во вкладке Business (Бизнес) диалогового окна New Application (Создать приложение).
Редактор диаграмм и рядов предоставляет доступ к большинству свойств диаграммы и ряда и имеет две основные вкладки: Chart (Диаграмма), которая предоставляет доступ к свойствам диаграмм и упрощает добавление ряда к диаграмме, и Series (Ряд), которая позволяет изменять свойства ряда.
При добавлении в диаграмму нового ряда происходит автоматическое заполнение этого ряда случайными данными (только во время разработки), что позволяет сразу увидеть результат изменения свойств диаграммы и ряда.
Метод Add() используется для добавления данных в диаграмму. При вызове этого метода в ряд данных добавляется только одно значение (точка), поэтому для добавления массива значений следует организовать цикл:
for i := 0 to TotalPointCount do
Series1.Add(SomeData[i], Strin [i+1], clTeeColor);
Первый аргумент метода Add() содержит координату Y добавляемого значения (в данном случае элемент массива); второй – подпись для соответствующей точки диаграммы, а третий – ее цвет (константа clTeeColor присваивает данному значению цвет, используемый по умолчанию).
Метод АddXY() используется для добавления данных в график. Форма этого метода совпадает с формой метода Аdd( ) за исключением дополнительного аргумента, который представляет собой массив значений X.
Пример проектирования диаграммы:
На форме Form1 размещены компоненты Chart и BitBtn1. Для Chart установлен ряд Series1.
procedure TForm1.BitBtn1Click(Sender: TObject);
const TotalPointCount=10;
XData:array [1..TotalPointCount] of real = (0,1,2,3,4,5,6,7,8,9);
YData:array [1..TotalPointCount] of real = (0,1,2,3,4,5,6,7,8,9);
Strin:array [1..TotalPointCount] of char = ('0','1','2','3','4','5','6','7','8','9');
var i :integer;
begin
for i := 1 to TotalPointCount do
Series1.AddXY(XData[i], YData[i], Strin [i+1], clTeeColor);
end;
Самый простой способ вывода диаграмм на печать – использовать метод Print формы, содержащей диаграмму. Однако качество воспроизведения диаграмм с его помощью неудовлетворительное.
В компоненте TChart предусмотрено несколько собственных методов печати, которые генерируют диаграммы гораздо более высокого качества, чем метод печати формы. Самым простым из них является метод Print.
Chart1.Print;
При выполнении этой строки программы диаграмма будет напечатана с использованием полных значений ширины и высоты печатной страницы при разрешении экрана, действующего по умолчанию. Однако печать при таком разрешении экрана часто не подходит для приложений, включающих диаграммы. Поэтому нужно изменить это разрешение, а следовательно, и качество печатаемых диаграмм. Компонент TChart имеет динамическое свойство PrintResolution, которое можно установить равным целому значению в диапазоне – 100 0, где 100 означает, что диаграмма печатается при максимальном разрешении принтера, а 0 – при установленном разрешении экрана.
Chart1.PrintResolution = PrintResScroll.Position;
Используя методы PrintPartial и PrintRect, можно также задать прямоугольник для диаграммы с целью ее масштабирования на печатной странице.
При проектировании диаграммы можно заранее определить принтер и осуществить его настройки и предварительный просмотр печатаемой диаграммы. Для этого в окне Edition Chart необходимо зайти на вкладку General и выбрать Print Preview.
Задание
Построить и распечатать график функции
№ |
f(x) |
Хнач |
Хкон |
№ |
f(x) |
Хнач |
Хкон |
№ |
f(x) |
Хнач |
Хкон |
№ |
f(x) |
Хнач |
Хкон |
1 |
cos(x) |
0 |
2 |
8 |
(2-x)/2 |
-3 |
2 |
15 |
2-x2 |
-2 |
2 |
22 |
x-cos(x) |
0 |
10 |
2 |
tg(x) |
-0,5 |
0,5 |
9 |
|x/3| |
-3 |
3 |
16 |
x*sin(x) |
1 |
4 |
23 |
ex/x |
10 |
20 |
3 |
ctg(x) |
0,5 |
1 |
10 |
1/x2 |
1 |
4 |
17 |
|cos(x)| |
-2 |
2 |
24 |
ln(x)*ex |
2 |
4 |
4 |
ln(x) |
1 |
10 |
11 |
sh(x) |
0 |
2 |
18 |
tg(x2) |
0,5 |
1,2 |
25 |
th(x) |
-3 |
3 |
5 |
x2 |
0 |
4 |
12 |
1/x3 |
0,5 |
3 |
19 |
ch(x) |
0 |
1 |
26 |
sin(x2) |
-1 |
1 |
6 |
1/x |
1 |
10 |
13 |
x |
0 |
4 |
20 |
1/sin(x) |
0,1 |
1 |
27 |
cth(x) |
1 |
10 |
7 |
x3 |
0 |
3 |
14 |
ex |
0 |
2 |
21 |
cos(x)/x |
1 |
20 |
28 |
x-sin(x) |
-1 |
1 |
Пример.
Построить график функции у=1/Sin(x).
Решение
После размещения компонентов форма имеет вид
