Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Lekcija_2._RPOD.doc
Скачиваний:
7
Добавлен:
07.05.2019
Размер:
1.67 Mб
Скачать

Синтаксическая диаграмма оператора варианта case

Примеры приложений под Windows, реализующие разветвляющиеся процессы обработки данных, использующих операторы case, if.

Пример 1. Приложение под Windows для вычисления площади треугольника

//-----------------------------------------------------

program PGeron;

uses

Forms,

UGeron in 'UGeron.pas' {Form1};

{$R *.res}

begin

Application.Initialize;

Application.CreateForm(TForm1, Form1);

Application.Run;

end.

//-----------------------------------------------------

unit UGeron;

interface

uses

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

Dialogs, StdCtrls;

type

TForm1 = class(TForm)

Edit1: TEdit;//сторона треугольника a

Label1: TLabel;

Edit2: TEdit;//сторона треугольника b

Label2: TLabel;

Label3: TLabel;

Edit3: TEdit;//сторона треугольника c

Label4: TLabel;

Edit4: TEdit;//площадь треугольника s

Button1: TButton;//оператор if

Button2: TButton;//оператор case

procedure Button1Click(Sender: TObject);

procedure Edit1Exit(Sender: TObject);

procedure Edit2Exit(Sender: TObject);

procedure Edit3Exit(Sender: TObject);

procedure Button2Click(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var

Form1: TForm1;

implementation

{$R *.dfm}

var

a,b,c: Real;

procedure TForm1.Button1Click(Sender: TObject);

var

p,s: Real;

m: String;

Issides: boolean;//стороны треугольника

begin

Issides:= (c< (a + b)) and (a< (c + b)) and (b < (c+a));

if Issides

then//a,b,c - стороны треугольника

begin

p:= (a + b + c)/2;

s:= SQRT(p*(p - a)*(p - b)*(p - c));

m:= FloatToStr(s);

end

else m:= 'a,b,c - не стороны треугольника';

Edit4.Text:= m;

end;

procedure TForm1.Edit1Exit(Sender: TObject);

begin

try

a:= StrToFloat(Edit1.Text);

if a<0 then

begin

ShowMessage('Не длина');

Edit1.SetFocus;

end;

except

on EConvertError do

begin

ShowMessage('Не длина');

Edit1.Clear;

Edit1.SetFocus;

end;

end;

end;

procedure TForm1.Edit2Exit(Sender: TObject);

begin

try

b:= StrToFloat(Edit2.Text);

if b<0 then

begin

ShowMessage('Не длина');

Edit2.SetFocus;

end;

except

on EConvertError do

begin

ShowMessage('Не длина');

Edit2.Clear;

Edit2.SetFocus;

end;

end;

end;

procedure TForm1.Edit3Exit(Sender: TObject);

begin

try

c:= StrToFloat(Edit3.Text);

if c<0 then

begin

ShowMessage('Не длина');

Edit3.SetFocus;

end;

except

on EConvertError do

begin

ShowMessage('Не длина');

Edit3.Clear;

Edit3.SetFocus;

end;

end;

end;

procedure TForm1.Button2Click(Sender: TObject);

var

p,s: Real;

m: String;

Issides: boolean;//стороны треугольника

begin

Issides:= (c< (a + b)) and (a< (c + b)) and (b < (c+a));

case Issides of

true:

begin

p:= (a + b + c)/2;

s:= SQRT(p*(p - a)*(p - b)*(p - c));

m:= FloatToStr(s);

end

else m:= 'a,b,c - не стороны треугольника'

end;

Edit4.Text:= m;

end;

end.

Пример 2. Оператор варианта case.

В приведённом ниже примере приложение определяет принадлежность введённого с клавиатуры символа одному из заданных подмножеств набора символов ASCII.

unit UCase;

interface

uses

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

Dialogs, StdCtrls;

type

TForm1 = class(TForm)

Edit1: TEdit;//Символ

Label1: TLabel;

Edit2: TEdit;//Принадлежность

Label2: TLabel;

Button1: TButton;//Вычислить

Button2: TButton;//Выход

procedure Button2Click(Sender: TObject);

procedure Edit1KeyPress(Sender: TObject; var Key: Char);

private

{ Private declarations }

public

{ Public declarations }

end;

var

Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button2Click(Sender: TObject);

begin

Application.Terminate;

end;

procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);

var s: String;

begin

Edit1.Clear;

case Key of

#0..#31:begin s:='Управляющие символы'; Edit1.Text := IntToStr(Ord(Key)) end;

#32:begin s:= 'пробел';Edit1.Text := IntToStr(Ord(Key)) end;

'0'..'9':s:='Арабские цифры';

'A'..'Z':s:='Прописные латинские буквы';

'a'..'z':s:='Строчные латинские буквы';

'Ё','А'..'Я','ё','а'..'я':s:='Прописные буквы кириллицы';

else s:='Другой символ'

end;

Edit2.Text:= s;//Вывод результата

Edit1.SetFocus;

end;

end.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]