Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Inkompatible Typen (https://www.delphipraxis.net/91619-inkompatible-typen.html)

greenkohl23 7. Mai 2007 23:16


Inkompatible Typen
 
Hallo Leutz ich hoff ihr könnt mir helfen nach ner ganze weile Delphi am Stück seh ich den Fehler einfach nich.

Delphi-Quellcode:
Var ziehung,Tipp : Array[1..6] of Extended;
Anzahl,Nummern :Integer;
Zahl : extended;
richtig: Integer;
vorhanden : boolean;
Visible: Boolean;

begin
if not ((1<Tipp) and (Tipp>49)) then Kommentar.Caption:='ungültige Eingabe';
end;
hinter dem ersten Tipp sagt er schon nach der Klammer Inkompatible Typen woran liegts?

mfg greenkohl

[edit=SirThornberry]Code-Tags durch Delphitags ersetzt - Mfg, SirThornberry[/edit]

omata 7. Mai 2007 23:19

Re: Inkompatible Typen
 
Weil Tipp ein Array ist.

greenkohl23 7. Mai 2007 23:36

Re: Inkompatible Typen
 
das heißt was muss ich tun, damit ich es so ähnlich gestalten kann?

Luckie 7. Mai 2007 23:44

Re: Inkompatible Typen
 
Warum ist das Array überhaupt von Datentyp Extended?
Zitat:

Zitat von Lottofee
Die Gewinnzahlen von heute:
5 10 8,79 42 1,25 25,99

:shock:

Was willst du mit der Abfrage erreichen?

mojo777 7. Mai 2007 23:49

Re: Inkompatible Typen
 
Hi, also ganz eindeutig ist es nicht, was du da machen willst :)
sonst würde wohl auch der compiler es greifen... aber ich versuch mal:
Delphi-Quellcode:
var i,minWert, maxWert:Integer;
begin
minWert:=1;
maxWert:=49;
for i:=1 to Length(Tipp) do
  begin
  if Tipp[i-1]<minWert then minWert:=Tipp[i-1];
  if Tipp[i-1]>maxWert then maxWert:=Tipp[i-1];
  end;
if (minWert<1) or (maxWert>49) then showmessage('Ungüueltige Eingabe...');
end;
ok?

greenkohl23 8. Mai 2007 00:22

Re: Inkompatible Typen
 
ich poste euch einfach mal den kompletten quelltext.

Delphi-Quellcode:
unit Unit1;

interface

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

type
TForm1 = class(TForm)
       Label1: TLabel;
      Button1: TButton;
      zahl1: TEdit;
      zahl2: TEdit;
      zahl3: TEdit;
      zahl4: TEdit;
      zahl5: TEdit;
      zahl6: TEdit;
      Richtige: TEdit;
      Label2: TLabel;
      Label3: TLabel;
      Kommentar: TLabel;
      Tipp1: TEdit;
      Tipp2: TEdit;
      Tipp3: TEdit;
      Tipp4: TEdit;
      Tipp5: TEdit;
      Tipp6: TEdit;
      Neu: TButton;
    Label4: TLabel;

procedure Button1Click(Sender: TObject);
procedure Tipp1Change(Sender: TObject);
procedure Button2Click(Sender: TObject);
    procedure NeuClick(Sender: TObject);
private
{ Private-Deklarationen }
public
{ Public-Deklarationen }
end;

var
Form1: TForm1;

implementation
{$R *.DFM}

procedure TForm1.Button1Click(Sender: TObject);

Var ziehung,Tipp : Array[1..6] of Extended;
Anzahl,Nummern :Integer;
Zahl : extended;
richtig: Integer;
vorhanden : boolean;
Visible: Boolean;
i : integer;
minWert, maxWert:extended;

begin
minWert:=1;
maxWert:=49;
for i:=1 to Length(Tipp) do
  begin
  if Tipp[i-1]<minWert then minWert:=Tipp[i-1];
  if Tipp[i-1]>maxWert then maxWert:=Tipp[i-1];
  end;
if (minWert<1) or (maxWert>49) then showmessage('Ungüueltige Eingabe...') else
begin
ziehung[1]:= 1+random(49);
Anzahl:=2;
Repeat
Zahl:= 1+random(49);
Nummern:=1;
vorhanden:=false;
Repeat
If Zahl <> ziehung[Nummern] then
Nummern:=Nummern+1 else vorhanden:=true;
Until (Anzahl=Nummern) or vorhanden;
If not vorhanden then
Begin
ziehung[Anzahl]:=Zahl;
Anzahl:=Anzahl+1;
end;

Until Anzahl > 6;
zahl1.text:=Floattostr(ziehung[1]);
zahl2.text:=Floattostr(ziehung[2]);
zahl3.text:=Floattostr(ziehung[3]);
zahl4.text:=Floattostr(ziehung[4]);
zahl5.text:=Floattostr(ziehung[5]);
zahl6.text:=Floattostr(ziehung[6]);
Tipp[1]:=Strtofloat(Tipp1.text);
Tipp[2]:=Strtofloat(Tipp2.text);
Tipp[3]:=Strtofloat(Tipp3.text);
Tipp[4]:=Strtofloat(Tipp4.text);
Tipp[5]:=Strtofloat(Tipp5.text);
Tipp[6]:=Strtofloat(Tipp6.text);
richtig:=0;
For Nummern:=1 to 6 do
For Anzahl:=1 to 6 do
If ziehung[Nummern] = Tipp[Anzahl] then
richtig:=richtig + 1;
If richtig < 2 then Kommentar.caption:='Miserable Leistung';
If richtig = 2 then Kommentar.caption:='Naja wenigstens etwas!';
If richtig > 2 then Kommentar.caption:='Du kommst dem Ziel näher..';
If richtig > 4 then Kommentar.caption:='Ich denke das kann was werden bei dir!!!';
If richtig = 6 then Kommentar.caption:='Du hast alle übertroffen die Million is dein!!';
Richtige.text:=Floattostr(richtig);
Kommentar.Visible:=true;
end;
end;

procedure TForm1.Tipp1Change(Sender: TObject);
begin
Kommentar.Visible:=false;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
close
end;
procedure TForm1.NeuClick(Sender: TObject);
begin
zahl1.text:='';
zahl2.text:='';
zahl3.text:='';
zahl4.text:='';
zahl5.text:='';
zahl6.text:='';
Tipp1.text:='';
Tipp2.text:='';
Tipp3.text:='';
Tipp4.text:='';
Tipp5.text:='';
Tipp6.text:='';
Richtige.Text:='';
Kommentar.Visible:=false;
end;

end.
Das is ja schon mal ganz gut, nur das er jetzt auch richtige Werte als ungültige Eingabe erkennt und nicht weiter geht. Wo liegt jetzt der Fehler, denn Werte zwischen 1-49 sollte er als richtig erkenn und nich als falsch.

Bitte nochmals um eure Hilfe.

thx für die schnellen Postings

Danke für eure schnelle hilfe.

[edit=SirThornberry]code-tags durch delphi-tags ersetzt - Mfg, SirThornberry[/edit]

Luckie 8. Mai 2007 00:30

Re: Inkompatible Typen
 
Aber warum Lottozahlen Fließkommazahlen sind bleibt mir irgendwie verschlossen. Desweiteren solltest du deinen Quellcoe mal etwas besser formatieren, das kann ja keiner lesen.

greenkohl23 8. Mai 2007 00:35

Re: Inkompatible Typen
 
entschuldigung für die unordnung, aber wer kein plan hat macht es halt nach reihenfolge und so seh ich nun mal durch. Also bitte nich böse sein!

Mackhack 8. Mai 2007 03:28

Re: Inkompatible Typen
 
Zitat:

Zitat von greenkohl23
entschuldigung für die unordnung, aber wer kein plan hat macht es halt nach reihenfolge und so seh ich nun mal durch. Also bitte nich böse sein!

Aber hier hatteste n Plan oder nicht?

Delphi-Quellcode:
[...]
for i:=1 to Length(Tipp) do
  begin
  if Tipp[i-1]<minWert then minWert:=Tipp[i-1];
  if Tipp[i-1]>maxWert then maxWert:=Tipp[i-1];
  end;
if
[...]
Hier mal dein Code formatiert in Delphi Tags. Hoffe ich habe am Ende deiner langen Procedure nicht abgekackt da ich es in Notepad gemacht habe:

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
Var
  Ziehung, Tipp: Array[1..6] of Extended;
  Anzahl, Nummern: Integer;
  Zahl: Extended;
  Richtig: Integer;
  Vorhanden: Boolean;
  Visible: Boolean;
  I: Integer;
  MinWert, MaxWert: Extended;
begin
  MinWert:= 1;
  MaxWert:= 49;
  for I := 1 to Length(Tipp) do
  begin
    if ( Tipp[I - 1] < MinWert ) then
    begin
      MinWert := Tipp[I - 1];
      if ( Tipp[I - 1] > MaxWert ) then
      begin
        MaxWert := Tipp[I - 1];
      end;
      if ( (MinWert < 1) or (MaxWert > 49) ) then
      begin
        ShowMessage('Ungüueltige Eingabe...');
      end
      else
      begin
        Ziehung[1] := 1 + Random(49);
        Anzahl:=2;
        Repeat
          Zahl := 1 + Random(49);
          Nummern := 1;
          Vorhanden := False;
          Repeat
            if ( Zahl <> Ziehung[Nummern] ) then
            begin
              Nummern := Nummern + 1;
            end
            else
            begin
              Vorhanden := True;
            end;
          Until ( (Anzahl = Nummern) or Vorhanden );
        if ( not Vorhanden ) then
        begin
          Ziehung[Anzahl] := Zahl;
          Anzahl := Anzahl + 1;
        end;
      Until ( Anzahl > 6 );
      end;
    end;
    Zahl1.Text := FloatToStr(Ziehung[1]);
    Zahl2.Text := FloatToStr(Ziehung[2]);
    Zahl3.Text := FloatToStr(Ziehung[3]);
    Zahl4.Text := FloatToStr(Ziehung[4]);
    Zahl5.Text := FloatToStr(Ziehung[5]);
    Zahl6.Text := FloatToStr(Ziehung[6]);
    Tipp[1] := StrToFloat(Tipp1.Text);
    Tipp[2] := StrToFloat(Tipp2.Text);
    Tipp[3] := StrToFloat(Tipp3.Text);
    Tipp[4] := StrToFloat(Tipp4.Text);
    Tipp[5] := StrToFloat(Tipp5.Text);
    Tipp[6] := StrToFloat(Tipp6.Text);
    Richtig := 0;
    for Nummern := 1 to 6 do
    begin
      for Anzahl := 1 to 6 do
      begin
        if ( Ziehung[Nummern] = Tipp[Anzahl] ) then
        begin
          Richtig := Richtig + 1;
          if ( Richtig < 2 ) then
          begin
            Kommentar.Caption := 'Miserable Leistung';
          end;
          if ( Richtig = 2 ) then
          begin
            Kommentar.Caption := 'Naja wenigstens etwas!';
          end;
          if ( Richtig > 2 ) then
          begin
            Kommentar.Caption := 'Du kommst dem Ziel näher..';
          end;
          if ( Richtig > 4 ) then
          begin
            Kommentar.Caption := 'Ich denke das kann was werden bei dir!!!';
          end;
          if ( Richtig = 6 ) then
          begin
            Kommentar.Caption := 'Du hast alle übertroffen die Million is dein!!';
          end;
        end;
        Richtige.Text := FloatToStr(Richtig);
        Kommentar.Visible := True;
      end;
    end;
  end;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
  Close;
end;

procedure TForm1.NeuClick(Sender: TObject);
begin
  Zahl1.Text := '';
  Zahl2.Text := '';
  Zahl3.Text := '';
  Zahl4.Text := '';
  Zahl5.Text := '';
  Zahl6.Text := '';
  Tipp1.Text := '';
  Tipp2.Text := '';
  Tipp3.Text := '';
  Tipp4.Text := '';
  Tipp5.Text := '';
  Tipp6.Text := '';
  Richtige.Text := '';
  Kommentar.Visible := False;
end;

procedure TForm1.Tipp1Change(Sender: TObject);
begin
  Kommentar.Visible := False;
end;

end.

DP-Maintenance 8. Mai 2007 05:28

DP-Maintenance
 
Dieses Thema wurde von "Matze" von "Die Delphi-IDE" nach "Object-Pascal / Delphi-Language" verschoben.

Luckie 8. Mai 2007 09:24

Re: Inkompatible Typen
 
Zitat:

Zitat von Mackhack
Aber hier hatteste n Plan oder nicht?

Delphi-Quellcode:
[...]
for i:=1 to Length(Tipp) do
  begin
  if Tipp[i-1]<minWert then minWert:=Tipp[i-1];
  if Tipp[i-1]>maxWert then maxWert:=Tipp[i-1];
  end;
if
[...]

Nein, das war der Code aus dem Thread hier. ;)

Muetze1 8. Mai 2007 10:01

Re: Inkompatible Typen
 
Zitat:

Zitat von Luckie
Nein, das war der Code aus dem Thread hier. ;)

Ja, das ist ja der Plan, der ihm vorgelegt wurde. Nun muss er nur noch den Schatz bergen...

greenkohl23 8. Mai 2007 15:02

Re: Inkompatible Typen
 
Danke Mackhack für dein Posting, aber leider geht das so nich, denn ich bekomm 3 Fehler.

Nach dem then kommt die Meldung "erwartet aber THEN gefunden"
Code:
 begin
      MinWert := Tipp[I - 1];
      if ( Tipp[I - 1] > MaxWert then
Dann nach dem RICHTIG; kommt die Meldung "Inkompatible Typen:'Integer und procedure untyped pointer or untyped parameter'"

Code:
begin
          Richtig := Inc(Richtig);
Und der letzte Fehler ist, die bei der Procedure wird gesagt: Anweisung erwartet aber Procedure gefunden
Code:
procedure TForm1.Button2Click(Sender: TObject);
begin
  Close;
end;
danke für eure Mühen

Tormentor32 8. Mai 2007 15:05

Re: Inkompatible Typen
 
Delphi-Quellcode:
if ( Tipp[I - 1] > MaxWert) then
Hast die Klammer vergessen

Delphi-Quellcode:
inc(Richtig);
Reicht aus, ist ne Prozedur

Vor dem letzten fehlt wahrscheinlich irgendwo ein "end;"

SirThornberry 8. Mai 2007 15:12

Re: Inkompatible Typen
 
@greenkohl23: Könntest du künftig bitte die delphi-tags anstelle der code-tags verwenden wenn du delphi-quelltext postest? Das lässt sich einfach besser lesen. Danke :)

Mackhack 8. Mai 2007 15:17

Re: Inkompatible Typen
 
So hab den Code mal eben in Delphi ueberarbeitet.

Es kann zumindest compiliert werden.

greenkohl23 8. Mai 2007 15:36

Re: Inkompatible Typen
 
Hi, die oben genannten Probs sind nu alle erledigt aber ein altes Problem is immer noch vorhanden.

Zitat:

Das is ja schon mal ganz gut, nur das er jetzt auch richtige Werte als ungültige Eingabe erkennt und nicht weiter geht. Wo liegt jetzt der Fehler, denn Werte zwischen 1-49 sollte er als richtig erkenn und nich als falsch.
Und was kann ich tun, damit sich das wenigstens wieder ändert?

Hier nochmal das gesamte:
Delphi-Quellcode:
unit Unit1;

interface

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

type
TForm1 = class(TForm)
       Label1: TLabel;
      Button1: TButton;
      zahl1: TEdit;
      zahl2: TEdit;
      zahl3: TEdit;
      zahl4: TEdit;
      zahl5: TEdit;
      zahl6: TEdit;
      Richtige: TEdit;
      Label2: TLabel;
      Label3: TLabel;
      Kommentar: TLabel;
      Tipp1: TEdit;
      Tipp2: TEdit;
      Tipp3: TEdit;
      Tipp4: TEdit;
      Tipp5: TEdit;
      Tipp6: TEdit;
      Neu: TButton;
    Label4: TLabel;

procedure Button1Click(Sender: TObject);
procedure Tipp1Change(Sender: TObject);
procedure Button2Click(Sender: TObject);
    procedure NeuClick(Sender: TObject);
private
{ Private-Deklarationen }
public
{ Public-Deklarationen }
end;

var
Form1: TForm1;

implementation
{$R *.DFM}

procedure TForm1.Button1Click(Sender: TObject);
Var
  Ziehung, Tipp: Array[1..6] of Extended;
  Anzahl, Nummern: Integer;
  Zahl: Extended;
  Richtig: Integer;
  Vorhanden: Boolean;
  Visible: Boolean;
  I: Integer;
  MinWert, MaxWert: Extended;
begin
  MinWert:= 1;
  MaxWert:= 49;
  for I := 1 to Length(Tipp) do
  begin
    if ( Tipp[I - 1] < MinWert ) then
    begin
      MinWert := Tipp[I - 1];
      if ( Tipp[I - 1] > MaxWert) then
      begin
        MaxWert := Tipp[I - 1];
      end;
      if ( (MinWert < 1) or (MaxWert > 49) ) then
      begin
        ShowMessage('Ungültige Eingabe...');
      end
      else
      begin
        Ziehung[1] := 1 + Random(49);
        Anzahl:=2;
        Repeat
          Zahl := 1 + Random(49);
          Nummern := 1;
          Vorhanden := False;
          Repeat
            if ( Zahl <> Ziehung[Nummern] ) then
            begin
              Nummern := Nummern + 1;
            end
            else
            begin
              Vorhanden := True;
            end;
          Until ( (Anzahl = Nummern) or Vorhanden );
        if ( not Vorhanden ) then
        begin
          Ziehung[Anzahl] := Zahl;
          Anzahl := Anzahl + 1;
        end;
      Until ( Anzahl > 6 );
    Zahl1.Text := FloatToStr(Ziehung[1]);
    Zahl2.Text := FloatToStr(Ziehung[2]);
    Zahl3.Text := FloatToStr(Ziehung[3]);
    Zahl4.Text := FloatToStr(Ziehung[4]);
    Zahl5.Text := FloatToStr(Ziehung[5]);
    Zahl6.Text := FloatToStr(Ziehung[6]);
    Tipp[1] := StrToFloat(Tipp1.Text);
    Tipp[2] := StrToFloat(Tipp2.Text);
    Tipp[3] := StrToFloat(Tipp3.Text);
    Tipp[4] := StrToFloat(Tipp4.Text);
    Tipp[5] := StrToFloat(Tipp5.Text);
    Tipp[6] := StrToFloat(Tipp6.Text);
    Richtig := 0;
    for Nummern := 1 to 6 do
    begin
      for Anzahl := 1 to 6 do
      begin
        if ( Ziehung[Nummern] = Tipp[Anzahl] ) then
        begin
          Inc(Richtig);
          if ( Richtig < 2 ) then
          begin
            Kommentar.Caption := 'Miserable Leistung';
          end;
          if ( Richtig = 2 ) then
          begin
            Kommentar.Caption := 'Naja wenigstens etwas!';
          end;
          if ( Richtig > 2 ) then
          begin
            Kommentar.Caption := 'Du kommst dem Ziel näher..';
          end;
          if ( Richtig > 4 ) then
          begin
            Kommentar.Caption := 'Ich denke das kann was werden bei dir!!!';
          end;
          if ( Richtig = 6 ) then
          begin
            Kommentar.Caption := 'Du hast alle übertroffen die Million is dein!!';
          end;
        end;
      end;
      Richtige.Text := FloatToStr(Richtig);
      Kommentar.Visible := True;
    end;
  end;
  end;
  end;
  end;

procedure TForm1.Tipp1Change(Sender: TObject);
begin
  Kommentar.Visible := False;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
  Close;
end;

procedure TForm1.NeuClick(Sender: TObject);
begin
  Zahl1.Text := '';
  Zahl2.Text := '';
  Zahl3.Text := '';
  Zahl4.Text := '';
  Zahl5.Text := '';
  Zahl6.Text := '';
  Tipp1.Text := '';
  Tipp2.Text := '';
  Tipp3.Text := '';
  Tipp4.Text := '';
  Tipp5.Text := '';
  Tipp6.Text := '';
  Richtige.Text := '';
  Kommentar.Visible := False;
end;

end.

greenkohl23 8. Mai 2007 22:43

Re: Inkompatible Typen
 
na keiner mehr ne Idee?

Klaus01 9. Mai 2007 08:19

Re: Inkompatible Typen
 
Habe in Deinem Code mal etwas rumeditiert.

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
Var
  Ziehung, Tipp: Array[1..6] of Extended;
  Anzahl, Nummern: Integer;
  Zahl: Extended;
  Richtig: Integer;
  Vorhanden: Boolean;
  Visible: Boolean;
  I: Integer;
  MinWert, MaxWert: Extended;
begin
  MinWert:= 1;
  MaxWert:= 49;
  for I := 1 to Length(Tipp) do
  begin
    //if ( Tipp[I - 1] < MinWert ) then  Tipp[0] ist in Deinem Array nicht definiert
    if ((Tipp[i] < MinWert) and (Tipp[i] > MaxWert)) then // bewegt sich der Tipp ausserhalb der Grenzen
                                                           //(würde ich schon bei der Eingabe abfangen wollen
      begin
        ShowMessage('Ungültige Eingabe...');
        break;
      end
    else
      begin
        Ziehung[1] := 1 + Random(49);
        Anzahl:=2;
        Repeat
          Zahl := 1 + Random(49);
          Nummern := 1;
          Vorhanden := False;
          Repeat
            if ( Zahl <> Ziehung[Nummern] ) then
            begin
              Nummern := Nummern + 1;
            end
            else
            begin
              Vorhanden := True;
            end;
          Until ( (Anzahl = Nummern) or Vorhanden );
          if ( not Vorhanden ) then
            begin
              Ziehung[Anzahl] := Zahl;
              Anzahl := Anzahl + 1;
            end;
        Until ( Anzahl > 6 );
        Zahl1.Text := FloatToStr(Ziehung[1]);
        Zahl2.Text := FloatToStr(Ziehung[2]);
        Zahl3.Text := FloatToStr(Ziehung[3]);
        Zahl4.Text := FloatToStr(Ziehung[4]);
        Zahl5.Text := FloatToStr(Ziehung[5]);
        Zahl6.Text := FloatToStr(Ziehung[6]);
        Tipp[1] := StrToFloat(Tipp1.Text);
        Tipp[2] := StrToFloat(Tipp2.Text);
        Tipp[3] := StrToFloat(Tipp3.Text);
        Tipp[4] := StrToFloat(Tipp4.Text);
        Tipp[5] := StrToFloat(Tipp5.Text);
        Tipp[6] := StrToFloat(Tipp6.Text);
        Richtig := 0;
        for Nummern := 1 to 6 do
          begin
            for Anzahl := 1 to 6 do
              begin
                if ( Ziehung[Nummern] = Tipp[Anzahl] ) then
                Inc(Richtig);
              end;
            if ( Richtig < 2 ) then
            begin
              Kommentar.Caption := 'Miserable Leistung';
            end;
            if ( Richtig = 2 ) then
            begin
              Kommentar.Caption := 'Naja wenigstens etwas!';
            end;
            if ( Richtig > 2 ) then
            begin
              Kommentar.Caption := 'Du kommst dem Ziel näher..';
            end;
            if ( Richtig > 4 ) then
            begin
              Kommentar.Caption := 'Ich denke das kann was werden bei dir!!!';
            end;
            if ( Richtig = 6 ) then
            begin
              Kommentar.Caption := 'Du hast alle übertroffen die Million is dein!!';
            end;
          end;
      end;
      Richtige.Text := FloatToStr(Richtig);
      Kommentar.Visible := True;
    end;
  end;
end;
nicht getestet!!

Grüße
Klaus

greenkohl23 9. Mai 2007 14:11

Re: Inkompatible Typen
 
Danke für deinen Tipp, aber wenn ich das mache dann macht er einfach gar nix mehr. Vllt haste ja noch nen Tipp für mich freu mich über alles!!!

mfg greenkohl23

Luckie 9. Mai 2007 14:17

Re: Inkompatible Typen
 
Dann setz mal einen Breakpoint (F5) auf Zeile 12 und gehe in Einzelschritten (F7) durch den Code und guck was passiert.

Klaus01 9. Mai 2007 14:21

Re: Inkompatible Typen
 
Was meinst denn Du mit "macht gar nichts mehr"
Kommen auch keine MessageBoxen mit ungültiger Eingabe?

Ausserdem ist Dein Array Tipp in der Funktion nicht initialisiert worden.
Es stehen also zufällige Werte drin.
Falls Du die Initialisierung schon woanders im Code gemacht haben solltest
gilt das hier nicht, da das Array hier noch einmal lokal deklariert wurde.

Grüße
Klaus

greenkohl23 9. Mai 2007 14:29

Re: Inkompatible Typen
 
@ Klaus also der Quelltext is genau der der hier steht is nirgends was anderes definiert und mit gar nix, das hat sich geklärt, der ignoriert einfach die bedingung und macht so weiter. Also wenn ich 50 oder 0 eingebe ignoriert er die statt auszugeben ungültige eingabe.

Klaus01 9. Mai 2007 14:36

Re: Inkompatible Typen
 
Ja, aber wo gibst Du ein, und wo werden diese Daten in das Array Tipp gefüllt.
Weil in dieser Funktion passiert das nicht.
Da das Array aber lokal, also in dieser Funktion, deklariert wurde
muß die Eingabe hier passieren oder das Array Tipp sollte global in der
Form deklariert werden.

Ich hoffe Du verstehst was ich meine.
Und hast Du einmal den Tipp von Luckie befolgt?

Grüße
Klaus

greenkohl23 9. Mai 2007 14:42

Re: Inkompatible Typen
 
tut mir leid leutz das ich euch enttäuschen muss aber so viel plan von delphi hab ich noch nich, bin ja lern und wissbierig, aber ohne anleitung. Hoffe das kränkt euch jetz nich das ihr hier nem noob helft. Also das von Luckie versteh ich nich und deine aussage is mir halbklar.

Klaus01 9. Mai 2007 14:46

Re: Inkompatible Typen
 
z.B.
Delphi-Quellcode:
type
  TForm1 = class(TForm)
 [..]
 private
    Tipp : Array [1..6] of Extended;
    { Private declarations }
 public
    { Public declarations }
 end;
Und die Deklaration von Tipp aus der Funktion und aus anderen Funktonen wo sie eventuell noch deklariert wurde
rausschmeißen. Ein Deklaration reicht.

Grüße
Klaus

greenkohl23 9. Mai 2007 14:55

Re: Inkompatible Typen
 
ja aber eigentlich macht das jetz nich so den großen unterschied für das proggi oder, also ich versteh den nutzen und so aber in meinem fall dürfte es egal sein. Oder irre ich mich jetzt?

Mackhack 9. Mai 2007 15:06

Re: Inkompatible Typen
 
Zitat:

Zitat von greenkohl23
ja aber eigentlich macht das jetz nich so den großen unterschied für das proggi oder, also ich versteh den nutzen und so aber in meinem fall dürfte es egal sein. Oder irre ich mich jetzt?

Hm, Wenn du doch erst die Daten in einem Public Deklarierten Array speicherst und dann mit einem Lokalen Array gleichen Namens weiterarbeitest so hast du 2 verschiedene Arrays. Deshalb wohl die verwirrung und das ignorieren deiner Zahlen.

Klaus01 9. Mai 2007 15:13

Re: Inkompatible Typen
 
Es ist schon ein Unterschied wo eine Variable deklariert wird.

Wenn sie lokal in einer Funktion deklariert wurde ist sie nur in dieser Funktion gültig.

Delphi-Quellcode:
Function a:Integer;
var
  i:Integer
begin
   result:=i;
end;
Delphi-Quellcode:
Function b:String;
var
 i:Integer;
begin
   result:=IntToStr(i);
end;
Aufruf;
i:=3;
a;
b;

Wenn eine Variable mit gleichem Namen noch einmal in einer anderen Funktion deklariert
wurde. Haben diese nichts miteinander zutun.
Sie benutzen andere Speicherbereiche.

Wenn ich das jetzt aber so mache:
Delphi-Quellcode:
Function a:Integer;
begin
   result:=i;
end;
Delphi-Quellcode:
Function b:String;
begin
   result:=IntToStr(i);
end;
und i ist global deklariert

Aufruf;
i:=3;
a;
b;

Dann kommt bei allen Aufrufen 3 heraus.

Grüße
Klaus

greenkohl23 9. Mai 2007 15:40

Re: Inkompatible Typen
 
Danke das du das Ausführlich nochmal dargestellt hast find ich echt klasse von dir, obwohl mir vorher schon klar war wie du das meintest. Aber jetzt mal was ganz anderes was muss ich nu tun um das so zu testen wie Luckie das meinte denn mein proggi geht ja weiterhin nich also der test auf richtige werte.

Klaus01 9. Mai 2007 15:52

Re: Inkompatible Typen
 
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
Var
  Ziehung, Tipp: Array[1..6] of Extended;
  Anzahl, Nummern: Integer;
  Zahl: Extended;
  Richtig: Integer;
  Vorhanden: Boolean;
  Visible: Boolean;
  I: Integer;
  MinWert, MaxWert: Extended;
begin
  MinWert:= 1;  // Du gehst mit Deinem Cursor hierhin und drückst F5, die Zeile wird rot markiert
                 // Dann startest Du Dein Programm aus der IDE mit F9
                 // wenn Du dann den Button drückst hält der Programmcode hier an.
                 // mit F7 kannst Du dann im Code weiterwandern und sehen
                 // welcher Weg eingeschalgen wird
                 // willst Du den Inhalt von Variablen anschauen, dann markierst Du die variable
                 // und drückst dann Ctrl+F5 ein Wacthfenster geht auf.
  MaxWert:= 49;
  for I := 1 to Length(Tipp) do
  begin
    //if ( Tipp[I - 1] < MinWert ) then  Tipp[0] ist in Deinem Array nicht definiert
    if ((Tipp[i] < MinWert) and (Tipp[i] > MaxWert)) then // bewegt sich der Tipp ausserhalb der Grenzen
                                                           //(würde ich schon bei der Eingabe abfangen wollen
      begin
        ShowMessage('Ungültige Eingabe...');
        break;
      end
    else
Grüße
Klaus


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:28 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz