Skocz do zawartości
tw_psycho

If....

Rekomendowane odpowiedzi

witam,

Przy kompilacji zwraca mi blad:

[Error] Unit1.pas(31): Incompatible types

[Error] Unit1.pas(32): Incompatible types

[Fatal Error] Project2.dpr(5): Could not compile used unit 'Unit1.pas'

 

unit Unit1;interfaceuses  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,  Dialogs, StdCtrls;type  TForm1 = class(TForm)	Button1: TButton;	procedure Button1Click(Sender: TObject);  private	{ Private declarations }  public	{ Public declarations }  end;var  Form1: TForm1;implementation{$R *.dfm}procedure TForm1.Button1Click(Sender: TObject);var  x : Integer;begin  x := 10;  if x <> 100 or x < 100 then	if x < 70 and not x = 50 then	  if x = 10 then		showmessage('Tak to jest cyfra 10');end;end.

co jest zle?

Edytowane przez -Paluch-

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

a czy nie mógłbyś ruszyć głową trochę?

 

Jeśli juz tak trudno zajrzeć do helpa co znaczy ten błąd (F1 na errorze) to chociaż mogłeś wskazać która to jest linijka 31 i 32.. co ja mam liczyć teraz ręcznie? (pod warunkiem że wkleiłeś od początku)

 

Domyślam się 1 spojrzeniem iż chodzi o linijki:

if x <> 100 or x < 100 then	if x < 70 and not x = 50 then
a główny błąd polega na tym iż pascal inaczej rozumie sformułowania warunku jaki mu zadałeś przez wzgląd na to iż różne operatory mają różne priorytety wykonania.

 

Zatem najpierw wykona Ci się 100 or x co w rezultacie zwróci wartość typu boolean = true a następnie to sprawdzasz czy jest różne od x, który jest typu integer

czyli de facto robisz coś takiego:

if integer <> boolean

 

w praktyce, aby zmienić kolejnośc wykonywania operacji wykorzystuje się podobnie jak w matematyce, nawiasy ()

 

Napisz zatem kod następująco:

if (x <> 100) or (x < 100) then	if (x < 70) and not (x = 50) then
Edytowane przez PelzaK

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

aa teraz rozumiem...

tylko mnie zastanawia dlaczego przyklady z kursu sa niepoprawne... czy delphi 5 rozni sie tak bardzo od 7?

wybacz nieprecyzyjnosc, poczatkujacy jestem, bardzo poczatkujacy :-)

 

a teraz kolejny blad przy petli:

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

[Error] Unit1.pas(47): Declaration expected but end of file found

[Fatal Error] Project1.dpr(5): Could not compile used unit 'Unit1.pas'

 

unit Unit1;interfaceuses  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,  Dialogs, StdCtrls;type  TForm1 = class(TForm)	Memo: TMemo;	Button1: TButton;	procedure Button1Click(Sender: TObject);  private	{ Private declarations }  public	{ Public declarations }  end;var  Form1: TForm1;implementation{$R *.dfm}procedure TForm1.Button1Click(Sender: TObject);var  I : Integer;begin  for i := 5 downto 0 do  begin	Sleep(500);	Memo.Lines.Add(	'To zakonczenie programu pozostalo: ' + IntToStr (i));end;  Sleep(1000);  Close;end.

pluje sie o te end. na koncu... ale jak je wytne to tez mu nie pasuje...

Edytowane przez -Paluch-

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Jak się nie mysli to wywala błędy...

 

procedure TForm1.Button1Click(Sender: TObject);var  I : Integer;begin  for i := 5 downto 0 do  begin	Sleep(500);	Memo1.Lines.Add(	'To zakonczenie programu pozostalo: ' + IntToStr (i));end;  Sleep(1000);  Close;end;

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

musisz wiedzieć o jednej zasadniczej rzeczy dotyczącej błędów...

Nie zawsze błąd występuje w linii którą wywala kompilator w błędzie...

 

Głównie jest to przyczyna tego iż gdy zabierzesz np 1 nawias to kompilator od razu zaczyna całkiem inaczej rozumieć cały kod... wydaje mu się że kolejne instrukcje w nowych linijkach tak naprawdę sa instrukcjami w nawiasie... Mówię oczywiście abstraciach!ąc od konkretnego przykładu

 

U Ciebie..

[Error] Unit1.pas(40): ';' expected but '.' found - oznacza że w lini 40 kompilator oczekiwał znaku ';' ale znalazł '.'. Zazwyczaj teogo typu błąd oznacza tyle że wcześniej zapomniałeś zamknąc jakiś nawias, w tym przypadku nie zamknąłeś definicji procedury.

 

[Error] Unit1.pas(47): Declaration expected but end of file found - Następny błąd jest juz spowodowany wystąpieniem poprzedniego.... Zabrakło Ci zamknięcia bloku procedury zatem kompilator sie dziwi że plik mu się skończył

 

[Fatal Error] Project1.dpr(5): Could not compile used unit 'Unit1.pas' - no to już oczywiste.. skoro są błędy w składni to nie można skompilować całości...

Edytowane przez PelzaK

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Dołącz do dyskusji

Możesz dodać zawartość już teraz a zarejestrować się później. Jeśli posiadasz już konto, zaloguj się aby dodać zawartość za jego pomocą.

Gość
Dodaj odpowiedź do tematu...

×   Wklejono zawartość z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Odnośnik został automatycznie osadzony.   Przywróć wyświetlanie jako odnośnik

×   Przywrócono poprzednią zawartość.   Wyczyść edytor

×   Nie możesz bezpośrednio wkleić grafiki. Dodaj lub załącz grafiki z adresu URL.

Ładowanie


×
×
  • Dodaj nową pozycję...