Розширений ввід та вивід

ред.

Як вже згадувалося, в мові Паскаль є дві функції для вводу: read та readln. Різниця між ними полягає, насамперед, у тому, що read читає символи, які треба ввести (наприклад, якщо вводиться ціле число - цифри), доки не зустріне "неправильний" символ, а решту лишає для наступного вводу; readln же читає символи до кінця рядку і викидає "зайві". Так, фрагмент коду (змінні a та b - цілі)

readln(a);
readln(b);
writeln(a,' ',b);

на ввід

1 2↵ Enter

3 4↵ Enter

виведе "1 3"; а фрагмент

read(a);
read(b);
writeln(a,' ',b);

на той самий ввід виведе "1 2"!

Зауважимо, що другий код еквівалентний коду

read(a, b);
writeln(a,' ',b);

unit Kv_r;

interface

uses

 Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
 Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls;

type

 TForm1 = class(TForm)
   ln_a: TEdit;
   ln_b: TEdit;
   ln_c: TEdit;
   L_a: TLabel;
   L_b: TLabel;
   L_c: TLabel;
   L_X1: TLabel;
   L_X2: TLabel;
   B_Rozv: TButton;
   B_End: TButton;
   procedure B_EndClick(Sender: TObject);
   procedure B_RozvClick(Sender: TObject);
 private
 public
 end;

var

 Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.B_EndClick(Sender: TObject); begin

Close

end;

procedure TForm1.B_RozvClick(Sender: TObject);

 Var a,b,c,x,x1,x2,D :Real;
begin
 a := StrToFloat(ln_a.Text);
 b := StrToFloat(ln_b.Text);
 c := StrToFloat(ln_c.Text);
If a = 0 then
 If b = 0 then
  Begin
   L_X1.Caption := ;
   L_X2.Caption := ;
   ShowMessage ('Рівняння не сумісне'); Halt
  end else
  Begin
   x1 := - c / b;
   L_X1.Caption := 'x=' + FloatToStr(x1);
   L_X2.Caption := ;
   ShowMessage ('Рівняння не квадратне'); Halt
  end else
 Begin
  D := sqr(b) - 4*a*c; // обчислення дискримінанту
 If D < 0 then // якщо дискримінант від'ємний, то вивести повідомлення
  Begin
   L_X1.Caption := ;
   L_X2.Caption := ;
   ShowMessage ('Рівняння не має дійсних розвязків');
halt
  end
 else
  Begin
   x := - b /(2 * a);
   If D = 0 then
    Begin
     L_X1.Caption := 'x1= x2= ' + FloatToStr(x);
     L_X2.Caption := ;
     ShowMessage ('Рівняння має два однакові розв'язки');
HaltЖирний текст
    end;
   x2 := Sqrt (D) /(2 * a);
   x1 := x2 + x;
   x2 := x - x2;

{Виводимо результати на поле форми, перетворивши їхні значення з формату дійсних чисел у символьне представлення процедурою FloatToStr}

   L_X1.Caption := 'x1=' + FloatToStr(x1);
   L_X2.Caption := 'x2=' + FloatToStr(x2);
  end
end;

end;

end.

Завдання

ред.