Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Problem: Array-Typ erforderlich (https://www.delphipraxis.net/110377-problem-array-typ-erforderlich.html)

Arrayuser 17. Mär 2008 10:39


Problem: Array-Typ erforderlich
 
Hallo,
hab hier ein programm geschriben, aber nur mit zwei fehlern bitte helft mir

hier ist das Programm:

Delphi-Quellcode:
 unit Unit1;

 interface

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

 type
  TForm1 = class(TForm)
    StringGrid1: TStringGrid;
     Label1: TLabel;
    Button1: TButton;
    Button2: TButton;
    Button3: TButton;
    Edit1: TEdit;
    Edit2: TEdit;
    Label2: TLabel;
    Label3: TLabel;
    procedure FormCreate(Sender: TObject);
    procedure Edit2Change(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

 var
  Form1: TForm1;
  zufall : array[0..9] of integer;

 implementation

 {$R *.dfm}

 procedure TForm1.FormCreate(Sender: TObject);
 var a,b : integer;
     zufall : array[1..10]of integer;
 begin
 randomize;
 a:=1;
 for a:=1 to 10 do
 begin
 StringGrid1.Cells[a-1,0]:=inttostr(a);
 b:=random(0-99);
 zufall[a,0]:=b; (Fehler hier!)
 end;
 edit1.Text:='?';
 edit2.Text:='?';
 end;

 procedure TForm1.Edit2Change(Sender: TObject);
 var  a,b : integer;
      c : array[0..9] of integer;
 begin
 Edit1.Text:=inttostr(a);
 strtoint(a):=b;
 c[a,0]:=Edit2.Text;( Fehler hier!)
 end;

 end.
hab die fehlerstellen in Klammern angegeben.

DeddyH 17. Mär 2008 10:42

Re: Problem: Array-Typ erforderlich
 
Du versuchst, 2-dimensionale Werte in einem eindimensionalen Array zu speichern.

mkinzler 17. Mär 2008 10:43

Re: Problem: Array-Typ erforderlich
 
Der Fehler lieg wohl eher eine Zeile vorher:
Statt
Delphi-Quellcode:
strtoint(a):=b;
sollte es wohl
Delphi-Quellcode:
b := strtoint(a);
heißen

Arrayuser 17. Mär 2008 10:46

Re: Problem: Array-Typ erforderlich
 
ich verstehe den ersten fehler nicht , wenn ich den erst verstehe kann ich den zweiten schon irgendwie selber beheben.

Arrayuser 17. Mär 2008 10:47

Re: Problem: Array-Typ erforderlich
 
Delphi-Quellcode:
procedure TForm1.Edit2Change(Sender: TObject);
var  a,b : integer;
      c : array[0..9] of integer;
begin
Edit1.Text:=inttostr(a);
b:=strtoint(a);
c[b,0]:=Edit2.Text;
end;
hab den zweiten so umgearbeitet geht aber trotzdemm nicht

Die Muhkuh 17. Mär 2008 10:49

Re: Problem: Array-Typ erforderlich
 
Weil c ein Eindimensionales Array ist und Du aber, wie Detlef schon sagte, auf eine zweite Dimension greifst. Versuch es mal so:

Delphi-Quellcode:
procedure TForm1.Edit2Change(Sender: TObject);
var  a,b : integer;
      c : array[0..9] of integer;
begin
Edit1.Text:=inttostr(a);
b:=strtoint(a);
c[b]:=Edit2.Text;
end;
Desweiteren hast Du einmal eine globale Variable (Pfui!), die Zufall heißt und einmal eine gleichnamige lokale Variable. Ist nicht gerade ideal ;)

Arrayuser 17. Mär 2008 10:50

Re: Problem: Array-Typ erforderlich
 
AHH danke DaddyH! jetzt verstehe ich meinen fehler.

SirThornberry 17. Mär 2008 10:52

Re: Problem: Array-Typ erforderlich
 
hier stimmt doch irgendwas überhaupt nicht:
Delphi-Quellcode:
Edit1.Text:=inttostr(a);
b:=strtoint(a);
a ist undefiniert und somit würde in Edit1.Text was undefineirtes stehen.
die zweite zeile geht nicht weil a ein ordinaler Typ ist und kein String (strtoint erwartet aber einen string und keinen ordinalen wert)

Arrayuser 17. Mär 2008 10:53

Re: Problem: Array-Typ erforderlich
 
Jetzt habe ich eine Frage :)
kann ich bei diesen Programm auf die globale Variable zufall verzichten, oder ist sie unbedingt nötig?

Arrayuser 17. Mär 2008 10:59

Re: Problem: Array-Typ erforderlich
 
Delphi-Quellcode:
procedure TForm1.Edit2Change(Sender: TObject);
var  a : string;
      b : integer;
      c : array[0..9] of integer;
begin
Edit1.Text:=a;
b:=strtoint(a);
c[b]:=Edit2.Text;  (fehler)
end;
wieso ist b jetzt Tcaption und nicht integer?

verstehe ich gar nicht

SirThornberry 17. Mär 2008 11:00

Re: Problem: Array-Typ erforderlich
 
Am besten verrätst du uns was das Ziel des Codes sein soll. Denn so wie er jetzt ist macht er keinen Sinn außer das dein Prozessor etwas zu tun hat :-)
Delphi-Quellcode:
Edit1.Text:=a; //a ist undefiniert - dank des compilers der den string initialisiert ist a '' und somit steht dann in Edit1 nichts
b:=strtoint(a); //hier kracht es später weil '' keine gültige zahl ist
c[b]:=Edit2.Text; //Edit2.Text ist ein String, dein Array hingegen vom Typ Integer. Ein String ist was anderes als ein Integer und somit geht die Zuweisung nicht

Arrayuser 17. Mär 2008 11:03

Re: Problem: Array-Typ erforderlich
 
Ok

Das programm soll beim start zufallszahlen von 0 biss 99 speichern.
Und zwei editfelder dienen dazu, dass ich in einen die nummer des zufallszahls eingebe und das andere editfeld mir diese zufallzahl selbst zeigt.

hoffe es ist verständlich

Arrayuser 17. Mär 2008 11:26

Re: Problem: Array-Typ erforderlich
 
hab das jetzt so gemacht:
Delphi-Quellcode:
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    StringGrid1: TStringGrid;
    Label1: TLabel;
    Button1: TButton;
    Button2: TButton;
    Button3: TButton;
    Edit1: TEdit;
    Edit2: TEdit;
    Label2: TLabel;
    Label3: TLabel;
    procedure FormCreate(Sender: TObject);
    procedure Edit2Change(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
var a,b : integer;
     zufall : array[1..10]of integer;
begin
randomize;
a:=1;
for a:=1 to 10 do
begin
StringGrid1.Cells[a-1,0]:=inttostr(a);
b:=random(100);
zufall[a]:=b;
end;
edit1.Text:='?';
edit2.Text:='?'; //Fehlermelding: Im Project Project1.exe ist eine Exception der Klasse EConverError aufgetreten. Meldung "?' ist kein gültiger Integerwert'. Wieso? vorher ging es doch alles, die ' ' stehen doch da!
end;

procedure TForm1.Edit2Change(Sender: TObject);
var  a : string;
      b,d : integer;
      c : array[0..9] of integer;
begin
a:=Edit1.Text;
b:=strtoint(a);
c[b]:=d;
Edit2.Text:=inttostr(d);
end;

end.

Aurelius 17. Mär 2008 11:30

Re: Problem: Array-Typ erforderlich
 
Die Fehlermeldung wird eher im OnChange des Edit2 kommen ;)
Delphi-Quellcode:
a:=Edit1.Text;
b:=strtoint(a);
Wenn a ein '?' ist kann es nat. nicht in integer umgewandelt werden ;)

Arrayuser 17. Mär 2008 11:33

Re: Problem: Array-Typ erforderlich
 
Delphi-Quellcode:
procedure TForm1.Edit1Change(Sender: TObject);
var  a : string;
      b,d : integer;
      c : array[0..9] of integer;
begin
a:=Edit1.Text;
b:=strtoint(a);
c[b]:=d;
Edit2.Text:=inttostr(d);
end;
das soll doch nur beim OnChange gehen

Delphi-Quellcode:
edit1.Text:='?';
edit2.Text:='?';
ist bei FormCreate

oder hab cih da was falsch gemacht?

mkinzler 17. Mär 2008 11:35

Re: Problem: Array-Typ erforderlich
 
Entweder die Konvertierung in try..except einschließen oder TryStrToInt() verwenden

Arrayuser 17. Mär 2008 11:45

Re: Problem: Array-Typ erforderlich
 
In der Schule ging irgendwie alles, zuhause geht aber nie was :(

Arrayuser 17. Mär 2008 11:50

Re: Problem: Array-Typ erforderlich
 
Wo soll ich TryStrToInt() einsetzen?

mkinzler 17. Mär 2008 11:54

Re: Problem: Array-Typ erforderlich
 
Delphi-Quellcode:
if not TryStrToInt(a,b) then //Hier auf Fehler reagieren

Arrayuser 17. Mär 2008 12:01

Re: Problem: Array-Typ erforderlich
 
das bringt mich leider nicht weiter.

DeddyH 17. Mär 2008 12:02

Re: Problem: Array-Typ erforderlich
 
Zitat:

Zitat von Arrayuser
das bringt mich leider nicht weiter.

Wieso nicht?

Arrayuser 17. Mär 2008 12:04

Re: Problem: Array-Typ erforderlich
 
hmm ok nachdem ich die delphi hielfe 10 durchgelesen habe, habe ichs verstanden, der fehler ist weg, aber es kommt der falsche ergebnis in edit1 raus.

SirThornberry 17. Mär 2008 12:04

Re: Problem: Array-Typ erforderlich
 
Zitat:

Zitat von Arrayuser
das bringt mich leider nicht weiter.

Diese Aussage bringt uns auch nicht weiter :wink: Beschreibe genau woran es hängt und was du nicht verstehst nur dann können wir dir auch helfen.

Arrayuser 17. Mär 2008 12:09

Re: Problem: Array-Typ erforderlich
 
Delphi-Quellcode:
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    StringGrid1: TStringGrid;
    Label1: TLabel;
    Button1: TButton;
    Button2: TButton;
    Button3: TButton;
    Edit1: TEdit;
    Edit2: TEdit;
    Label2: TLabel;
    Label3: TLabel;
    procedure FormCreate(Sender: TObject);
    procedure Edit2Change(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
var a,b : integer;
     zufall : array[1..10]of integer;
begin
randomize;
a:=1;
for a:=1 to 10 do
begin
StringGrid1.Cells[a-1,0]:=inttostr(a);
b:=random(100);
zufall[a]:=b;
end;
edit1.Text:='?';
edit2.Text:='?';
end;

procedure TForm1.Edit2Change(Sender: TObject);
var  a : string;
      b,d : integer;
      c : array[0..9] of integer;
begin

a:=Edit2.Text;
{b:=StrToInt(a);}
if not TryStrToInt(a,b) then
c[b]:=d;
Edit1.Text:=inttostr(d);
end;

end.
das programm läuft ohne fehler aber es erzäugt keine zufallszahlen beim start es wird immer die gleich zahl in edit1 ausgegeben. und zwar 4369708

mkinzler 17. Mär 2008 12:12

Re: Problem: Array-Typ erforderlich
 
Lass mal
Delphi-Quellcode:
randomize;
weg

Arrayuser 17. Mär 2008 12:15

Re: Problem: Array-Typ erforderlich
 
hilft nicht. das problem ist das schon beim start in edit1 4369708 steht und nicht '?'

SirThornberry 17. Mär 2008 12:20

Re: Problem: Array-Typ erforderlich
 
das ist doch klar. Dadurch das du Edit2.Text ein Fragezeichen zuweist wird das OnChange ausgelöst

Arrayuser 17. Mär 2008 12:25

Re: Problem: Array-Typ erforderlich
 
ich hab das mit '?' weggelassen dann steht zwar beim start 4369708 nicht aber beim esten verändern on edit2 obwohl da die zahl von 0-99 stehen soll. ist mit meinem randim etwas falsch? auserdem endert sich edit1 nur bei erstem verändern von edit2 bei 2,3 verändern passiert wieder nichts.

SirThornberry 17. Mär 2008 12:33

Re: Problem: Array-Typ erforderlich
 
gehe doch einfach mal zeile für Zeile von Edit2Change durch. Dann wirst du den Grund sehen. Der Inhalt der Funktion entbehrt jeglicher Logik. Schaue einfach mal in die Hilfe was genau die entsprechenden Funktionen machen und zurück geben welche du verwendest.

dominikkv 17. Mär 2008 12:35

Re: Problem: Array-Typ erforderlich
 
Hmm hast du überhaupt ne Ahnung was du da machst?
Fällt dir hier was auf:
Delphi-Quellcode:
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    StringGrid1: TStringGrid;
    Label1: TLabel;
    Button1: TButton;
    Button2: TButton;
    Button3: TButton;
    Edit1: TEdit;
    Edit2: TEdit;
    Label2: TLabel;
    Label3: TLabel;
    procedure FormCreate(Sender: TObject);
    procedure Edit2Change(Sender: TObject);
  private
    { Private-Deklarationen } 
  public
    { Public-Deklarationen } 
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm} 

procedure TForm1.FormCreate(Sender: TObject);
var a: integer;
begin
  randomize;
  for a := 1 to 10 do
    begin
      StringGrid1.Cells[a-1,0] := inttostr(a);
    end;
  edit1.Text:='?';
  edit2.Text:='?';
end;

procedure TForm1.Edit2Change(Sender: TObject);
var d : integer;
begin
  Edit1.Text:=inttostr(d);
end;

end.
Das ist genau das gleiche was du hast.

Arrayuser 17. Mär 2008 12:51

Re: Problem: Array-Typ erforderlich
 
o.O und was sol dein program machen? nur den stringrid bennen?

Arrayuser 17. Mär 2008 12:52

Re: Problem: Array-Typ erforderlich
 
Delphi-Quellcode:
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    StringGrid1: TStringGrid;
    Label1: TLabel;
    Button1: TButton;
    Button2: TButton;
    Button3: TButton;
    Edit1: TEdit;
    Edit2: TEdit;
    Label2: TLabel;
    Label3: TLabel;
    procedure FormCreate(Sender: TObject);
    procedure Edit1Change(Sender: TObject);
   
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;
  zufall : array[0..9]of integer;
implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
var a,b : integer;

begin
randomize;
a:=1;
for a:=1 to 10 do
begin
StringGrid1.Cells[a-1,0]:=inttostr(a);
b:=random(100);
zufall[a-1]:=b;
end;
{edit1.Text:='?';
edit2.Text:='?';}
end;



procedure TForm1.Edit1Change(Sender: TObject);
var a : string;
    b : integer;
begin
a:=Edit1.Text;
b:=zufall[strtoint(a)];
Edit2.Text:=inttostr(b);

end;

end.
habs endlich danke and alle die soviel Geduld mit mir hatten =)

mkinzler 17. Mär 2008 12:54

Re: Problem: Array-Typ erforderlich
 
Du solltest aber trotzdem mit möglichen Falscheingaben des Anwenders rechnen

Arrayuser 17. Mär 2008 12:55

Re: Problem: Array-Typ erforderlich
 
ja ich weiß wenn eine zahl höher als 10 ind edit1 eingegeb wird kommt ein fehler

mkinzler 17. Mär 2008 12:56

Re: Problem: Array-Typ erforderlich
 
Auch wenn er nichts eingibt oder was anderes als Zahlen.

dominikkv 17. Mär 2008 13:08

Re: Problem: Array-Typ erforderlich
 
Zitat:

Zitat von Arrayuser
o.O und was sol dein program machen? nur den stringrid bennen?

Naja, wie gesagt, dein Programm macht nix anderes^^
Ich hab nur die unnötigen Zeilen rausgestrichen :zwinker:

Hier mal ein Vorschlag (mit Gültigkeitsabfrage xD)
Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
var a : integer;
begin
  randomize;
  for a := 1 to 10 do
    begin
      StringGrid1.Cells[a-1,0] := inttostr(a);
      zufall[a-1] := random(100);
    end;
end;

procedure TForm1.Edit1Change(Sender: TObject);
var b : integer;
begin
  if TryStrToInt(Edit1.Text, b) and (b in [1..10]) then
    begin
      Edit2.Text := IntToStr(zufall[b]);
    end else begin
      showmessage('Böse! Gib gefälligst eine gültige Zahl ein!');
    end;
end;
edit: Die Zeile muss so heißen:
Delphi-Quellcode:
if TryStrToInt(Edit1.Text, b) and (b in [0..9]) then

Arrayuser 17. Mär 2008 13:16

Re: Problem: Array-Typ erforderlich
 
Ja Dominik es geht habs nur bisl modifiziert
Delphi-Quellcode:
begin
if TryStrToInt(Edit1.Text, b) and (b in [0..9]) then
    begin
      Edit2.Text := IntToStr(zufall[b]);
    end else begin
      Edit1.Text:='';
      Edit2.Text:='?';
    end;
end;
aber ich habs etwas anders versucht ging aber nicht und zwar :

Delphi-Quellcode:
var a : string;
    b,c : integer;

begin
a:=Edit1.Text;
c:=strtoint(a);
If 1<=c<=10 then // hier kamm der fehler
begin
Edit2.Text:='?';
Edit1.Text:='';
end
else
begin
b:=zufall[strtoint(a)];
Edit2.Text:=inttostr(b);
end;
end;

Klaus01 17. Mär 2008 13:29

Re: Problem: Array-Typ erforderlich
 
Delphi-Quellcode:
var a : string;
    b,c : integer;

begin
  a:=Edit1.Text;
  c:=strtoint(a); // und hier knallt es, wenn a keine Zahl ist!
  If (1<=c) and (c<=10) then // hier kommt er nicht mehr
    begin
      Edit2.Text:='?';
      Edit1.Text:='';
   end
  else
    begin
      b:=zufall[strtoint(a)];
      Edit2.Text:=inttostr(b);
    end;
end;

SirThornberry 17. Mär 2008 13:30

Re: Problem: Array-Typ erforderlich
 
dafür kommt ein fehler wenn im Edit keine gültige zahl steht :-D

mkinzler 17. Mär 2008 13:44

Re: Problem: Array-Typ erforderlich
 
Irgendwie scheint er uns nicht zu vertrauen bzw. versteht unseren und wohl seinen eigene Code nicht. :gruebel:


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:02 Uhr.
Seite 1 von 2  1 2      

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