Разветвляющиеся процессы обработки данных, страница 5

    { 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.

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

1.  Какие действия позволяет запланировать условный оператор if в полной форме?

2.  Какие действия позволяет запланировать условный оператор if в сокращенной форме?

3.  От чего зависит выбор варианта в условном операторе if?

4.  Какое выражение можно записать в качестве условия выбора?

5.  Сколько операторов можно записать после зарезервированного слова then?

6.  Сколько операторов можно записать после зарезервированного слова else?

7.  Назначение оператора case?

8.  Какие действия позволяет запланировать оператор варианта case?

9.  От чего зависит выбор варианта в операторе варианта case?

10. Какое выражение можно записать в качестве селектора в операторе варианта case?

11. Какого типа должны быть константы выбора в операторе варианта case?

12. Обязательна ли else ветвь в операторе варианта case?

13. Сколько операторов может быть в else ветви оператора варианта case?

14. Является ли структура ifthen простой программой?

15. Какие действия по обработке данных позволяет организовать структура ifthen?

16. Является ли структура ifthen элементарной программой?

17. Какой оператор Паскаля позволяет реализовать программы с управляющей структурой типа структура ifthen?

18. Что такое then-часть?

19. Что такое if-тест?

20. Когда выполняется then-часть?

21. Является ли структура case простой программой?

22. Является ли структура case элементарной программой?

23. Какой оператор Паскаля позволяет реализовать программы с управляющей структурой типа структура case?

24. Что такое case-часть?

25. Что такое case-тест?

26. Что такое case-список?

27. Когда выполняется case-часть?

28. Когда выполняется else-часть?

29. Какие действия по обработке данных можно организовать с помощью структуры case?

Источники дополнительных сведений

·  А.И. Марченко. Программирование на языке Object Pascal 2.0. - К.: Юниор, 1998. - 304 с., ил.

·  Кэнту М. Delphi 5 для профессионалов. – СПб.: Питер, 2001. – 944 с.: ил.

·  П. Дарахвелидзе, Е. Марков. Программирование в Delphi 4. - СПб.:БХВ - Санкт-Петербург,1999.-864 с., ил.

·  Петр Дарахвелидзе, Евгений Марков. Delphi - среда визуального программирования. СПб.: BHV - Санкт-Петербург, 1996. - 352 с.

·  Джон  Матчо, Дэвид Р. Фолкнер. Delphi. М.: Бином. 1995. -464 с.

·  Джеф Дантеман, Джим Мишел, Дон Тейлор. Программирование в среде Delphi. - К.: НИПФ «ДиаСофтЛтд», 1995. - 608 с.**