- •27 Тема 2. Разветвляющиеся под. Информатика и программирование Тема 2. Разветвляющиеся под Новосибирск 13 ноября 2020 г.
- •Линия потока (линия передачи управления)
- •Процесс (функциональный узел)
- •Решение (предикатный узел)
- •Узел Модификация
- •Узел слияния
- •Узел Пуск - останов
- •Разветвляющийся процесс обработки данных
- •Тестирование программы.
- •Структурные операторы
- •Условные операторы
- •Условный оператор if
- •Структура ifthen
- •Структура ifthenelse
- •Синтаксическая диаграмма оператора if
- •Вложенные операторы if
- •Оператор варианта case
- •Структура case
- •Синтаксическая диаграмма оператора варианта case
- •Примеры приложений под Windows, реализующие разветвляющиеся процессы обработки данных, использующих операторы case, if.
- •Контрольные вопросы
- •Источники дополнительных сведений
Синтаксическая диаграмма оператора варианта 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.