Error: Expected but found

Portál: amos.ukf.sk
Kurz: Programovanie 1
Kniha: Error: Expected but found
Vytlačil(a): Hosťovský používateľ
Dátum: sobota, 23 novembra 2024, 10:49

1. '=' expected but ':' found

Pôvodný zdrojový kód

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;

type
TForm1 = class(TForm)
Button1: TButton;
ListBox1: TListBox;
procedure Button1Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

type TVektor: array [1..3] of integer;

procedure TForm1.Button1Click(Sender: TObject);
var u, v: TVektor;
i: integer;

begin
ListBox1.Clear;

for i:= 1 to 3 do begin
u[i]= -100 + random(201);
v[i]:= -100 + random(201);
end;

ListBox1.Items.Add('vektor u');
for i:= 1 to 3 do
ListBox1.Items.Add(IntToStr(u[i]));

ListBox1.Items.Add('vektor v');
for i:= 1 to 3 do
ListBox1.Items.Add(IntToStr(v[i]));

ListBox1.Items.Add('skalárny súčin u.v');
for i:= 1 to 3 do
ListBox1.Items.Add(IntToStr(u[i]*v[i]));

end;

procedure TForm1.FormCreate(Sender: TObject);
begin
randomize;
end;

{

[Error] Unit1.pas(30): '=' expected but ':' found
[Error] Unit1.pas(40): ':=' expected but '=' found

--------------------------------------------------------------------------------

Očakávalo sa = ale našla sa :
Očakávalo sa := ale našlo sa =

PREČO?

Keď sme definovali nový typ v časti type, namiesto = sme napísali :
V príkaze priradenia sme namiesto := napísali len =

RIEŠENIE

Zápisy opravíme.

Upravený zdrojový kód

--------------------------------------------------------------------------------

type TVektor = array [1..3] of integer;

procedure TForm1.Button1Click(Sender: TObject);
var u, v: TVektor;
i: integer;

begin
ListBox1.Clear;

for i:= 1 to 3 do begin
u[i]:= -100 + random(201);
v[i]:= -100 + random(201);
end;

ListBox1.Items.Add('vektor u');
for i:= 1 to 3 do
ListBox1.Items.Add(IntToStr(u[i]));

ListBox1.Items.Add('vektor v');
for i:= 1 to 3 do
ListBox1.Items.Add(IntToStr(v[i]));

ListBox1.Items.Add('skalárny súčin u.v');
for i:= 1 to 3 do
ListBox1.Items.Add(IntToStr(u[i]*v[i]));

end;

--------------------------------------------------------------------------------

}

end.

Stiahnuť vzorový príklad (zdrojové kódy v Delphi)

2. ';' expected but '.' found

Pôvodný zdrojový kód

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;

type
TForm1 = class(TForm)
Button1: TButton;
Label1: TLabel;
Edit1: TEdit;
Button2: TButton;
Button3: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var n: integer;
begin
n:= StrToInt(Edit1.Text);
if n mod 2 = 0 then Label1.Caption:= 'Parne cislo'
else Label1.Caption:= 'Neparne cislo'
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
Label1.Caption:= 'Pocet cislic: ' + IntToStr(length(Edit1.Text));
end;

procedure TForm1.Button3Click(Sender: TObject);
var n, pocet: integer;
begin
n:= StrToInt(Edit1.Text);
pocet:= 0;
while n>0 do begin
if (n mod 10) mod 10 = 1 then inc(pocet);
n:= n div 10;

Label1.Caption:= 'Pocet jednotiek v cisle: ' + IntToStr(pocet);
end;

{

[Error] Unit1.pas(93): ';' expected but '.' found

--------------------------------------------------------------------------------

Očakávala sa ; ale našla sa .

PREČO?

Chybu spôsobilo chýbajúce end. Prekladač objavil chybu až pri záverečnom end
s bodkou. V tomto prípade je potrebné chybu hľadať v poslednej procedúre.

RIEŠENIE

Zistíme, ku ktorému begin chýba end a doplníme ho. V našom prípade ide o end
na konci tela cyklu while.

Upravený zdrojový kód

--------------------------------------------------------------------------------

procedure TForm1.Button3Click(Sender: TObject);
var n, pocet: integer;
begin
n:= StrToInt(Edit1.Text);
pocet:= 0;
while n>0 do begin
if (n mod 10) mod 10 = 1 then inc(pocet);
n:= n div 10;
end;
Label1.Caption:= 'Pocet jednotiek v cisle: ' + IntToStr(pocet);
end;

--------------------------------------------------------------------------------

}

end.

Stiahnuť vzorový príklad (zdrojové kódy v Delphi)

3. 'END' expected but 'PROCEDURE' found

Pôvodný zdrojový kód

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;

type
TForm1 = class(TForm)
Button1: TButton;
Label1: TLabel;
Edit1: TEdit;
Button2: TButton;
Button3: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var n: integer;
begin
n:= StrToInt(Edit1.Text);
if n mod 2 = 0 then Label1.Caption:= 'Parne cislo'
else Label1.Caption:= 'Neparne cislo'

procedure TForm1.Button2Click(Sender: TObject);
begin
Label1.Caption:= 'Pocet cislic: ' + IntToStr(length(Edit1.Text));
end

procedure TForm1.Button3Click(Sender: TObject);
var n, pocet: integer;
begin
n:= StrToInt(Edit1.Text);
pocet:= 0;
while n>0 do begin
if (n mod 10) mod 10 = 1 then inc(pocet);
n:= n div 10;
end;
Label1.Caption:= 'Pocet jednotiek v cisle: ' + IntToStr(pocet);
end;

{

[Error] Unit1.pas(40): 'END' expected but 'PROCEDURE' found
[Error] Unit1.pas(45): ';' expected but 'PROCEDURE' found

--------------------------------------------------------------------------------

Očakávala sa END ale našlo sa PROCEDURE
Očakávala sa ; ale našlo sa PROCEDURE

PREČO?

Prvú chybu spôsobilo chýbajúce end.

V tomto prípade je potrebné chybu hľadať niekde v programe PRED miestom,
kde bola objavená.

Druhú chybu spobila chýbajúca bodkočiarka.

RIEŠENIE

Zistíme, ku ktorému begin chýba end a doplníme ho. V našom prípade ide o end
na konci procedúry Button1Click.

Dopíšeme bodkočiarku za end procedúry Button2Click

Upravený zdrojový kód

--------------------------------------------------------------------------------

procedure TForm1.Button1Click(Sender: TObject);
var n: integer;
begin
n:= StrToInt(Edit1.Text);
if n mod 2 = 0 then Label1.Caption:= 'Parne cislo'
else Label1.Caption:= 'Neparne cislo'
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
Label1.Caption:= 'Pocet cislic: ' + IntToStr(length(Edit1.Text));
end;

procedure TForm1.Button3Click(Sender: TObject);
var n, pocet: integer;
begin
n:= StrToInt(Edit1.Text);
pocet:= 0;
while n>0 do begin
if (n mod 10) mod 10 = 1 then inc(pocet);
n:= n div 10;
end;
Label1.Caption:= 'Pocet jednotiek v cisle: ' + IntToStr(pocet);
end;

--------------------------------------------------------------------------------

}

end.

Stiahnuť vzorový príklad (zdrojové kódy v Delphi)

4. '.' expected but ';' found

Pôvodný zdrojový kód

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;

type
TForm1 = class(TForm)
Button1: TButton;
Label1: TLabel;
Edit1: TEdit;
Button2: TButton;
Button3: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var n: integer;
begin
n:= StrToInt(Edit1.Text);
if n mod 2 = 0 then begin
Label1.Caption:= 'Parne cislo'
end
else begin
Label1.Caption:= 'Neparne cislo'
end;
end;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
Label1.Caption:= 'Pocet cislic: ' + IntToStr(length(Edit1.Text));
end;

procedure TForm1.Button3Click(Sender: TObject);
var n, pocet: integer;
begin
n:= StrToInt(Edit1.Text);
pocet:= 0;
while n>0 do begin
if (n mod 10) mod 10 = 1 then inc(pocet);
n:= n div 10;
end;

Label1.Caption:= 'Pocet jednotiek v cisle: ' + IntToStr(pocet);
end;

{

[Error] Unit1.pas(43): '.' expected but ';' found

--------------------------------------------------------------------------------

Očakávala sa . ale našla ;

PREČO?

Chybu spôsobilo end, ktoré je pred miestom objavenia chyby navyše. Prekladač
očakával koniec unitu a teda end s bodkou, nie s bodkočiarkou.

RIEŠENIE

Zistíme, ktoré end je navyše a odstránime ho. V našom prípade ide o end
na konci procedúry Button1Click.

Upravený zdrojový kód

--------------------------------------------------------------------------------

procedure TForm1.Button1Click(Sender: TObject);
var n: integer;
begin
n:= StrToInt(Edit1.Text);
if n mod 2 = 0 then begin
Label1.Caption:= 'Parne cislo'
end
else begin
Label1.Caption:= 'Neparne cislo'
end;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
Label1.Caption:= 'Pocet cislic: ' + IntToStr(length(Edit1.Text));
end;

procedure TForm1.Button3Click(Sender: TObject);
var n, pocet: integer;
begin
n:= StrToInt(Edit1.Text);
pocet:= 0;
while n>0 do begin
if (n mod 10) mod 10 = 1 then inc(pocet);
n:= n div 10;
end;
Label1.Caption:= 'Pocet jednotiek v cisle: ' + IntToStr(pocet);
end;

--------------------------------------------------------------------------------

}

end.


Stiahnuť vzorový príklad (zdrojové kódy v Delphi)