Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
методическое пособие для самостоятельных работ.doc
Скачиваний:
22
Добавлен:
16.11.2019
Размер:
2.89 Mб
Скачать

Var I,j,k :shortint; p,q :real;

begin

{Начинается защищенная часть,}{ при выполнении возможны исключительные ситуации}

try

i:=StrToInt(s1);

j:=StrToInt(s2);

p:=StrToFloat(s3);

k:=i*j*100;

r:=sqrt(i*j);

q:=p/i;

except {Обработка исключительных ситуаций}

on EInvalidOp do ShowMessage ('Недопустимая операция');

on ERangeError do

ShowMessage ('Значение за пределами допустимых границ');

on EConvertError do ShowMessage(’Исходные данные не возможно преобразовать в числа');

on EZeroDivide do begin

ShowMessage('Деление на нуль');

q:=0;

end;

else ShowMessage ('Не удалось определить причину преры- вания');

end;

end; end.

В приведенном примере показано программирование реакций на различные исключительные ситуации. В большинстве случаев мы ограничились выводом сообщения о ней, но в принципе возможно и преодоление ее последствий, например, присвоением значения по умолчанию (q:=0;).

Контрольные вопросы

  1. Что такое «Событийно-управляемая программа»?

  2. Что понимается под визуальным программированием?

  3. Из каких частей состоит экран инструментальной системы Delphi?

  4. Разъясните суть тестирования и отладки.

  5. Какие средства имеются в Delphi для проведения тестирования и отладки?

Примеры составления программ

  1. Пример эллиптического главного окна

unit Unit1;

interface

uses

Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,

StdCtrls, Buttons;

type

TForm1 = class(TForm)

BitBtn1: TBitBtn;

Label1: TLabel;

procedure BitBtn1Click(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var

Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.BitBtn1Click(Sender: TObject);

begin

Close

end;

end.

  1. Демонстрация режима заполнения многоугольников

unit Unit1;

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, StdCtrls, Buttons, ExtCtrls;

type

TForm1 = class(TForm)

PaintBox1: TPaintBox;

PaintBox2: TPaintBox;

BitBtn1: TBitBtn;

procedure BitBtn1Click(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var

Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.BitBtn1Click(Sender: TObject);

var

Rgn1, Rgn2: Cardinal;

const

Points: array [1..5, 1..2] of Integer =

((91, 0), (160, 183), (0, 70), (183, 70), (23, 183));

begin

Rgn1 := CreatePolygonRgn(Points, 5, Alternate);

Rgn2 := CreatePolygonRgn(Points, 5, Winding);

with PaintBox1.Canvas do

begin

Brush.Color := clBlack;

FillRgn(Handle, Rgn1, Brush.Handle);

end;

with PaintBox2.Canvas do

begin

Brush.Color := clBlack;

FillRgn(Handle, Rgn2, Brush.Handle);

end;

end;

end.

  1. Сортировка символов в Win32 и Win16

unit Unit1;

interface

uses

Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,

StdCtrls, Buttons, ExtCtrls;

type

TfmExample = class(TForm)

Panel1: TPanel;

bbRun: TBitBtn;

bbClose: TBitBtn;

lbOutput: TLabel;

mmOutput: TMemo;

Panel2: TPanel;

Label1: TLabel;

Label2: TLabel;

procedure bbRunClick(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var

fmExample: TfmExample;

implementation

{$R *.DFM}

procedure TfmExample.bbRunClick(Sender: TObject);

var

k: Byte;

List1, List2: TStringList;

S: String;

begin

// Создаем два списка

List1 := TStringList.Create;

List1.Sorted := True;

List2 := TStringList.Create;

// Цикл наполнения списков монотонно возрастающими кодами

for k := 32 to 255 do

begin

S := IntToStr(k); // Код символа

if k<100 then

S := '0' + S;// Двузначное число дополняем ведущим нулем

// Формируем строку List1 из символа + табуляция + код символа

List1.Add(Char(k) + #9 + S);

// Формируем строку List2 из кода + табуляция + символ

List2.Add(S + #9 + Char(k));

end;

// Объединяем оба списка

List1.Sorted := False; // Отключаем сортировку List1

for k := 0 to List1.Count-1 do

List1[k] := #9 + List1[k] + #9#127#9 + List2[k];

// Переносим результат в mmOutput

mmOutput.Lines.Assign(List1);

// Уничтожаем List1 и List2

List1.Free;

List2.Free;

end;

end.

  1. Преобразование компонента в текст с помощью потока

unit Unit1;

interface

uses

Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,

StdCtrls, Buttons, ExtCtrls;

type

TfmExample = class(TForm)

Panel1: TPanel;

bbRun: TBitBtn;

bbClose: TBitBtn;

edInput: TEdit;

lbOutput: TLabel;

mmOutput: TMemo;

procedure bbRunClick(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var

fmExample: TfmExample;

implementation

{$R *.DFM}

procedure TfmExample.bbRunClick(Sender: TObject);

var

MemoryStream: TMemoryStream;

StringStream: TStringStream;

k: Integer;

begin

for k := 0 to ComponentCount-1 do

begin

MemoryStream := TMemoryStream.Create;

MemoryStream.WriteComponent(Components[k]);

MemoryStream.Seek(0,0);

StringStream := TStringStream.Create('');

ObjectBinaryToText(MemoryStream, StringStream);

MemoryStream.Free;

StringStream.Seek(0,0);

mmOutput.Lines.Add(StringStream.ReadString(Length(StringStream.DataString)));

StringStream.Free;

end;

end;

end.

  1. Копирование файлов

unit Unit1;

interface

uses

Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,

StdCtrls, ExtDlgs;

type

TForm1 = class(TForm)

OpenDialog1: TOpenDialog;

Button1: TButton;

SaveDialog1: TSaveDialog;

procedure Button1Click(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var

Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.Button1Click(Sender: TObject);

var

Source, Destiny: TFileStream;

begin

if OpenDialog1.Execute and SaveDialog1.Execute then

begin

Source := TFileStream.Create(OpenDialog1.FileName, fmOpenRead);

Destiny := TFileStream.Create(SaveDialog1.FileName, fmCreate);

Destiny.CopyFrom(Source,0);

Source.Free;

Destiny.Free

end;

end;

end.

  1. Демонстрация использования компонентов Windows Shell

unit UExplorer;

interface

uses

Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,

ComCtrls, ShellCtrls, StdCtrls, ExtCtrls, ToolWin, Menus;

type

TForm1 = class(TForm)

Panel1: TPanel;

Panel2: TPanel;

Panel3: TPanel;

Splitter1: TSplitter;

ShellComboBox1: TShellComboBox;

ShellTreeView1: TShellTreeView;

ShellListView1: TShellListView;

StatusBar1: TStatusBar;

procedure ShellTreeView1Change(Sender: TObject; Node: TTreeNode);

procedure FormActivate(Sender: TObject);

private

{ Private declarations }

Panel: TStatusPanel;

public

{ Public declarations }

end;

var

Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.ShellTreeView1Change(Sender: TObject; Node: TTreeNode);

begin

if Tag=1 then

Panel.Text := Node.Text

end;

procedure TForm1.FormActivate(Sender: TObject);

begin

Panel := StatusBar1.Panels.Add;

Tag := 1

end;

end.

Задания для самостоятельного выполнения

  1. Из текстового файла D:\SV\T1.TXT считать текст. Найти самое длинное слово текста и количество букв в этом слове. Результат вывести в компонент LABEL1.

  2. Из текстового файла D:\SV\M1.TXT считать матрицу 5х5. Поместить ее в компонент STRINGGRID1. Найти среднее арифметическое матрицы и вывести в компонент LABEL1.

  3. Из текстового файла D:\SV\T1.TXT считать текст. Найти в тексте слова с количеством букв, равным числу N, введенному в поле EDIT1. Сформировать из них строку и вывести ее в компонент LABEL1.

  4. Из текстового файла D:\SV\M1.TXT считать матрицу 5х5 в компонент STRINGGRID1. Найти максимальные элементы по каждой строке матрицы и вывести их в компонент LABEL1 с пояснением.

  5. Ввести текст в компонент MEMO1. Найти в тексте слова с четным количеством букв, сформировать из них строку ST1 и записать в файл D:\SV\T1.TXT, и с нечетным количеством букв, сформировать из них строку ST2 и записать в файл D:\SV\T2.TXT. Ввести значения матрицы 5х5 в компонент STRINGGRID1. Найти максимальные элементы каждого столбца матрицы. Вывести их в компонент LABEL1 с пояснениями, сформировать из них одномерный массив и записать его в файл D:\SV\M1.TXT. Из текстового файла D:\SV\T1.TXT считать текст. Найти в нем слова, состоящие из пяти букв и сформировать из них строку ST1. Вывести результат в компонент LABEL1.

  6. Ввести значения матрицы 5х5 в компонент STRINGGRID1. Найти сумму элементов главной S1 и побочной S2 диагоналей. Результат вывести в компонент LABEL1 с пояснениями.

  7. Из текстового файла D:\SV\T1.TXT считать текст. Найти все слова, начинающиеся со слога, заданного в поле компонента EDIT1. Сформировать из этих слов строку ST и вывести ее в компонент LABEL1.

  8. Из текстового файла D:\SV\M1.TXT считать матрицу 5х5. Умножить ее на число, введенное в поле компонента EDIT1, и вывести полученную матрицу в компонент STRINGGRID1.