Autor Beitrag
HarryIn
Hält's aus hier
Beiträge: 10



BeitragVerfasst: Sa 10.06.06 10:21 
Habe en Problem und find den Fehler einfach net! Das Programm wurde auf Delphi3 programmiert, hab den Text größtenteils übernommen.. Kanns dadran liegen? Außerdem wollte ich noch ne Meldung kommen lassen, wenn der User gewonnen hat. Wollte die Anzahl mit der Anzahl der Sternchen vergleichen, wenns passt kommt die Fehlermeldung! Naja wär schön wenn einer helfen könnte!!

MFG HarryIn



Folgender Text

ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
91:
92:
93:
94:
95:
96:
97:
98:
99:
100:
101:
102:
103:
104:
105:
106:
107:
108:
109:
110:
111:
112:
113:
114:
115:
116:
117:
118:
119:
120:
121:
122:
123:
124:
125:
126:
127:
128:
129:
130:
131:
132:
133:
134:
135:
136:
137:
138:
139:
140:
141:
142:
143:
144:
145:
146:
147:
148:
149:
150:
151:
152:
153:
154:
155:
156:
157:
158:
159:
160:
161:
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Edit1: TEdit;
    Edit2: TEdit;
    Button1: TButton;
    Button2: TButton;
    Label1: TLabel;
    Edit3: TEdit;
    Button3: TButton;
    ListBox1: TListBox;
    Edit4: TEdit;
    Edit5: TEdit;
    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}


var Mastermind:tZFeld; V:tZFeld; A:tBFeld; x,zahl:string;


procedure TForm1.Button1Click(Sender: TObject);
var anzahl,i: integer;
begin
  edit4.text:= inttostr(0);
  anzahl:= strtoint (edit1.text);
  erzeuge(anzahl,Mastermind);
  ausgabeausgefuellt(anzahl,x);
  form1.edit2.text:= x;
  for i:=1 to anzahl do
  listbox1.items.add (inttostr (Mastermind[i]));
end;


procedure TForm1.Button2Click(Sender: TObject);
var anzahl,z: integer;
begin
  edit4.text:= inttostr (strtoint (edit4.text)+1);
  anzahl:=strtoint (edit1.text);
  zahl:=edit3.text;
    if length (zahl) <> anzahl then
    form1.edit2.text:='Bitte Eingabe korrigieren!'
    else
     begin
      umwandel (anzahl,zahl,v);
      vergleich(anzahl,Mastermind,V,A);
      ausgebenvergleich(anzahl,A,X);
      form1.edit2.text:=x;
     

//      for z:=1 to length (edit2.text)
//      if anzahl= length(edit2.text) then
//      edit5.text:= 'Sie haben Gewonnen!';
    
      end;
end;


procedure TForm1.Button3Click(Sender: TObject);
begin
  close;
end;

end.



unit Unit2;

interface

type tBFeld = array[1..100] of string;
type tZFeld = array[1..100] of integer;
procedure erzeuge (anzahl:integer; var Mastermind:tZFeld);
procedure vergleich (anzahl: integer; Mastermind:tZFeld; V:tZFeld; var A:tBFeld);
procedure ausgebenvergleich (anzahl:integer; var A:tBfeld;var x: string);
procedure ausgabeausgefuellt (anzahl: integer; var x: string);
procedure umwandel (anzahl:integer; zahl: string; var V:TZFeld);


implementation

procedure erzeuge (anzahl:integer; var Mastermind:tZFeld);
var i: integer;
begin
  randomize;
  For i:=1 to anzahl do
   Mastermind[i]:=random (9);
end;


procedure umwandel (anzahl:integer; zahl: string; var V:TZFeld);
var i,x:integer;
begin
 for i:=1 to anzahl do
  val (zahl[i],V[i],x);
end;


procedure vergleich (anzahl: integer; Mastermind:tZFeld; V:tZFeld; var A:tBFeld);
var i,z: integer;
begin
  for i:=1 to anzahl do
   begin
     if Mastermind[i]=V[i] then
      A[i]:='*'
       else
        begin
        For z:=1 to anzahl do
         if Mastermind[z]=V[i] then
           A[i]:= '!';
        end;
   end;
end;


procedure ausgebenvergleich (anzahl:integer; var A:tBfeld;var x: string);
var i: integer;
begin
  x:='';
  for i:=1 to anzahl do
   x:= x+A[i];
end;


procedure ausgabeausgefuellt (anzahl: integer; var x: string);
var i: integer;
begin
  x:='';
  for i:=1 to anzahl do
   x:=X+'?';
end;


end.



Folgende Fehlermeldung kommt

[Error] Unit1.pas(38): Undeclared identifier: 'tBFeld'
[Error] Unit1.pas(38): Undeclared identifier: 'tZFeld'


Moderiert von user profile iconraziel: Highlight- durch Delphi-Tags ersetzt
fidionael
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 232

Win XP SP2, Ubuntu 6.06
Delphi 7 PE, Delphi 3 Prof
BeitragVerfasst: Sa 10.06.06 11:04 
Benutze bitte Delphi-Tags wenn du Code veröffentlichst, dann haben wir z. B. auch Zeilenangaben und Syntax-Highlighting, dein "Alles-Selber-Highlighten" ist da ein recht lausiger Ersatz :)

Zu deiner Frage: Was sollen denn auch tbFeld und tzFeld sein? Du kannst doch nicht einfach Variablen von irgendeinem Typ deklarieren, der vorher nie erwähnt wird?!

Um einen eigenen Typ zu erschaffen kannst du ihn als record oder class deklarieren. Records sind einfach zusammengesetzte Datentypen, Klassen sind schon etwas komplizierter. In jedem Fall scheinen da einige Grundkenntnisse zu fehlen, um das wasauchimmer du programmieren willst zu erreichen.

Mfg

Edit1: Wenn du Mastermind programmieren willst, wäre vielleicht auch dieser Thread ganz nützlich.
HarryIn Threadstarter
Hält's aus hier
Beiträge: 10



BeitragVerfasst: So 11.06.06 11:08 
Joa hab vergessen, die Unit2 mit in die Unit1 einzubeziehen... Programm klappt aber immer noch net. Müsste aber so eigentlich funtionieren. Hab Informatik erst seit nem guten halbe Jahr und bei den anderen Programmen sind mir zu viele Befehle dabei, die ich noch net kenn. Record und class sind mir auch noch unbekannt. Wenn vielleicht einer noch was weiß, wodrans noch liegen könnt und wie ich das mit der "Sie haben Gewonnen" Nachricht hinbekomme, bitte melden :-P

Mfg HarrIn
fidionael
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 232

Win XP SP2, Ubuntu 6.06
Delphi 7 PE, Delphi 3 Prof
BeitragVerfasst: So 11.06.06 12:09 
Okay, was hälst du denn davon, uns dann auch mal den Quelltext der Unit2 zu geben, damit wir sehen können, was denn nun deine Deklarierten Variablen bedeuten? Meine Kristallkugel ist nämlich leider gerade in Reparatur :)

Edit1:
Oh Entschuldigung, hab nicht gesehen, dass du es oben angehängt hast; ich schaue es mir dann jetzt mal an.

Edit2:
Häng doch mal bitte das komplette Projekt in einer Zip-Datei an, sonst versteh ich niemals, was du eigentlich wo tun willst und eine Beschreibung welcher Fehler denn nun aufrtitt, wäre auch nett.
fidionael
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 232

Win XP SP2, Ubuntu 6.06
Delphi 7 PE, Delphi 3 Prof
BeitragVerfasst: So 11.06.06 13:13 
Okay, ich denke ich habe deinen Quelltext jetzt verstanden. Was ich dir an dieser Stelle mal ganz eng ans Herz legen möchte, ist, zumindest wenn du weiterhin Hilfe im Delphi-Forum erwartest, deinen Quelltext zu kommentieren oder zumindest selbsterläuternde Variablennamen zu wählen.

Dein Quelltext nun funktionierend (allerdings in 1 Unit und deinen "Schließen"-Button habe ich mal rausgelassen):

ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
91:
92:
93:
94:
95:
96:
97:
98:
99:
100:
101:
102:
103:
104:
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    AnzahlEdit: TEdit;
    SpielStarenBtn: TButton;
    KorrekturEdit: TEdit;
    VersuchEdit: TEdit;
    VersuchBtn: TButton;
    AnzVersucheEdit: TEdit;
    GewonnenEdit: TEdit;
    procedure SpielStarenBtnClick(Sender: TObject);
    procedure VersuchBtnClick(Sender: TObject);
  private
    Anzahl: Integer;

    Mastermind, Versuch: Array[1..100] of Integer;
    Korrektur: Array[1..100] of String;
    KorrekturAusgabe: String;
    VersuchEingabe: String;

    procedure Erzeuge;
    procedure Umwandel;
    procedure Vergleich;
    procedure AusgabeVergleich;
    procedure AusgabeAusgefuellt;
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Erzeuge;
var i: Integer;
begin
  for i:=1 to Anzahl do Mastermind[i]:=Random(10);
end;

procedure TForm1.Umwandel;
var i: Integer;
begin
  for i:=1 to Anzahl do Versuch[i]:=StrToInt(VersuchEingabe[i]);
end;

procedure TForm1.Vergleich;
var i: Integer;
begin
  for i:=1 to Anzahl do
    if Mastermind[i] = Versuch[i] then Korrektur[i]:='*'
    else Korrektur[i]:='?';
end;

procedure TForm1.AusgabeVergleich;
var i: Integer;
begin
  KorrekturAusgabe:='';
  for i:=1 to Anzahl do KorrekturAusgabe:=KorrekturAusgabe+Korrektur[i];
end;

procedure TForm1.AusgabeAusgefuellt;
var i: Integer;
begin
  KorrekturAusgabe:='';
  for i:=1 to Anzahl do KorrekturAusgabe:=KorrekturAusgabe+'?';
end;

procedure TForm1.SpielStarenBtnClick(Sender: TObject);
begin
  AnzVersucheEdit.Text:='0';
  Anzahl:=StrToInt(AnzahlEdit.Text);
  Erzeuge;
  AusgabeAusgefuellt;
  KorrekturEdit.Text:=KorrekturAusgabe;
end;

procedure TForm1.VersuchBtnClick(Sender: TObject);
var i: Integer;
begin
  AnzVersucheEdit.Text:=IntToStr(StrToInt(AnzVersucheEdit.Text)+1);
  VersuchEingabe:=VersuchEdit.Text;
  Umwandel;
  Vergleich;
  AusgabeVergleich;
  KorrekturEdit.Text:=KorrekturAusgabe;

  i:=0;
  while (KorrekturAusgabe[i+1]='*') and (i<Anzahl) do
    inc(i);
  if i=Anzahl then GewonnenEdit.Text:='Sie haben gewonnen!';
end;

initialization
  Randomize;

end.


Edit1:
Damit du das Projekt, so wie ich es erstellt habe, einmal ausprobieren kannst, um zu gucken, ob ich deinen Quelltext tatsächlich so modifiziert habe, wie du es dir vorgestellt hast, hänge ich alles mal in einer Zip-Datei an.

Edit2:
Da das Problem ja gelöst ist und es sich um ein sehr spezifisches Projekt handelte, habe ich den Anhang hier wieder entfernt.
Einloggen, um Attachments anzusehen!


Zuletzt bearbeitet von fidionael am Mo 10.07.06 00:16, insgesamt 2-mal bearbeitet
HarryIn Threadstarter
Hält's aus hier
Beiträge: 10



BeitragVerfasst: So 11.06.06 19:09 
Vielen Dank, hat mir wirklich geholfen. Was ich nur jetzt noch wissen müsste ist der Befehl inc. Kenn den noch nicht und weiß seine Funtion nicht. Würde das mit dem 'Sie haben Gewonnen' auch noch irgendwie anders gehn oder müsste ich das mit dem inc machen??


P.S. werde mir deine Worte zu Herzen nehmen :-P

Mfg HarryIn
jakobwenzel
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1889
Erhaltene Danke: 1

XP home, ubuntu
BDS 2006 Prof
BeitragVerfasst: So 11.06.06 19:41 
inc(Variable) ist dasselbe wie
ausblenden Delphi-Quelltext
1:
variable:=variable+1;					

wobei das Inc schneller ausgeführt wird.

_________________
I thought what I'd do was, I'd pretend I was one of those deaf-mutes.
Mindforce
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 358

Win XP Pro / MCE, Win 98, Slax (Linux)
Delphi 07 PRO, Delphi 3+7 (mit Prdx)
BeitragVerfasst: So 11.06.06 19:53 
Hi,

ich weiss garnicht wie man Mastermind spielt.
Und da sind keine beschriftungen... Einen Bug habe ich auch festgestellt.

Gruss,

Mindforce
Einloggen, um Attachments anzusehen!
_________________
Our force; in mind.
fidionael
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 232

Win XP SP2, Ubuntu 6.06
Delphi 7 PE, Delphi 3 Prof
BeitragVerfasst: So 11.06.06 21:27 
Das Projekt das ich oben angehängt habe, soll lediglich user profile iconHarryIn helfen, der (wie ich zumindest sehr hoffe) weiß was er schreiben will, deswegen sind keine Beschriftungen vorhanden und wie man an seinem Post sieht, scheint das ja auch funktioniert zu haben.

Ich weiß, dass das Programm sehr unsicher geschrieben ist, es ist nur allzuleicht eine Fehlermeldung zu provozieren, da immer davon ausgegangen wird, dass der User richtige Eingaben macht. Die Eingaben vorher zu kontrollieren ist jedoch für den Veranschaulichungszweck meines Projektes eher hinderlich, da es vom eigentlichen Thema des Projektes ablenken würde.

Falls du eine stabile und vermutlich auch grafisch etwas ansprechendere Variante des Spiels spielen willst, schau dir doch bitte den Link etwas weiter oben an, oder guck alternativ auch auf meine Homepage.

An user profile iconHarryIn:
Ich bin froh wenn ich dir helfen konnte und noch viel froher, wenn ich dich dazu verleiten konnte, deinen Quelltext auch für andere etwas einsichtiger zu machen. Gerade wenn du über so kleine Projekte wie dieses hinaus gehst oder wenn du gar im Team entwickeln musst wird dies quasi lebenswichtig. Ich wünsche dir noch viel Spaß beim Programmieren und die Anmerkung von user profile iconMindforce solltest du dir in sofern auch zu Herzen nehmen, dass du niemals davon ausgehen darfst, dass der User korrekte Eingaben macht. Zur sauberen Programmierung gehört immer auch, dass selbst wenn der User es darauf anlegt, er dein Programm nicht zum Absturz bringen kann.