![]() |
Funktion für Galgenraten will nicht Funktionieren :(
Hi,
Ich hab seit diesem Jahr Informatik in der Schule, wo wir gerade Delphi behandeln, und hab ne Hausaufgabe aufbekommen mit der ich nich ganz klar komme :( Ich soll ein Spiel programmieren, Galgenraten... Mein Problem liegt darin, das ich gerne ein Funktion schreiben würde, die prüft, ob der Buchstabe bestandteil des zu erratenen Wortes ist... Bisher hab ich das hier zusammengebracht, komme aber nicht weiter, weil er immer wieder Fehler ausgibt, und ich keine ahnung hab, wie ich diese behebe... :cry:
Delphi-Quellcode:
Hoffe ma ich habs irgendwie verständlich rübergebracht was ich machen will, pls help me :hi:
unit Unit1;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) Label1: TLabel; Edit1: TEdit; Button1: TButton; Label2: TLabel; Label3: TLabel; Label4: TLabel; Label5: TLabel; procedure FormActivate(Sender: TObject); procedure Button1Click(Sender: TObject); private { Private-Deklarationen } public { Public-Deklarationen } end; var Form1 : TForm1; Wort : String = 'penispumpe'; Wort1 : String = '**********'; versuche, fehler : Integer; implementation {$R *.dfm} Function buchstabe : Boolean; var a : Char; Wort : String; i : Integer; begin buchstabe := false; For i := 1 to length(Wort) do if Wort[i] = a then buchstabe := true; end; procedure TForm1.FormActivate(Sender: TObject); begin Label1.Caption := Wort1; versuche := 0; fehler := 0; end; procedure TForm1.Button1Click(Sender: TObject); var a : Char; begin versuche := versuche+1; // immer wenn der User auf den Button klickt, wird ein Versuch dazu addiert! a := Lowercase(Edit1.Text)[1]; // Alle Buchstaben in kleinbuchstaben umwandeln if buchstabe(a) = true then // ist der buchstabe bestandteil des wortes, wird er anstelle des sterns angezeigt ! begin Wort1[i] := a; versuche := versuche+1; end; if buchstabe(a) = false then // ist der buchstabe kein bestandteil des wortes, wird der stern angezeigt und ein fehler hinzuaddiert ! begin Showmessage ('Sorry, der Buchstabe kommt nicht vor!'); fehler := fehler+1; end; Label1.Caption := Wort1; Label4.Caption := IntToStr(versuche); Label5.Caption := IntToStr(fehler); end; end. Gruss fabiO |
Re: Funktion für Galgenraten will nicht Funktionieren :(
Hi,
Schau Dir doch mal die Funtkion ![]() Außerdem deklarierst Du Deine Variablen innerhalb der Funktion, statt sie als Parameter zu übergeben:
Delphi-Quellcode:
Was aber wiederum inhaltlich genau POS entsprechen würde -g-
Function CheckBuchstabe(CONST aBuchstabe : Char; CONST aString : String) : Boolean;
PS: Pos unterscheidet Groß-/Kleinschreibung! Gruß Stephan :dance: :xmas: |
Re: Funktion für Galgenraten will nicht Funktionieren :(
Zitat:
...:cat:... |
Re: Funktion für Galgenraten will nicht Funktionieren :(
Ein paar Verbesserungen für deinen Code, falls du zu einem Punkt fragen hast, dann kann man dir bestimmt auch ein Beispiel geben:
MfG Pr0g Edit: hab wohl ein bisschen lange mit dem Schreiben gebraucht ;) |
Re: Funktion für Galgenraten will nicht Funktionieren :(
Ok, hab mir das mit Pos Funktion durchgelesen
Mit der kann man also in einem string nach einem Teilstring suchen und sich dann die stelle ausgeben lassen, wo der Teilstring im String vorkommt, und wenn er nicht vorkommt gibt er 0 aus.. richtig ? :) Hab das was du gepostet hast mal eingefügt, und mein code sieht nun so aus:
Delphi-Quellcode:
den fehler den er mir ausgibt is nach wie folgt der hier:
Function CheckBuchstabe(CONST aBuchstabe : Char; CONST aString : String) : Boolean;
var i : Integer; begin CheckBuchstabe := false; For i := 1 to length(aString) do if aString[i] = aBuchstabe then CheckBuchstabe := true; end; procedure TForm1.FormActivate(Sender: TObject); begin Label1.Caption := aString1; versuche := 0; fehler := 0; end; procedure TForm1.Button1Click(Sender: TObject); var a : Char; i : Integer; begin versuche := versuche+1; a := Lowercase(Edit1.Text)[1]; if CheckBuchstabe(a) = true then begin aString1[i] := a; versuche := versuche+1; end; if CheckBuchstabe(a) = false then begin Showmessage ('Sorry, der Buchstabe kommt nicht vor!'); fehler := fehler+1; end; Label4.Caption := IntToStr(versuche); Label5.Caption := IntToStr(fehler); Label1.Caption := aString1; end;
Code:
Was mir delphi damit sagen will versteh ich nich so recht weshalb ich auch nicht weiß, wie ich es lösen soll...
[Fehler] Unit1.pas(60): Nicht genügend wirkliche Parameter
Sorry wenn ich bissl schwer bin, bin aber noch totaler anfänger :( Gruss fabiO |
Re: Funktion für Galgenraten will nicht Funktionieren :(
Hi,
nur noch ein paar Kommentare zum Code:
Gruß Stephan :dance: :xmas: edit: laaaaaahm bin :D Der Fehler "Nicht genügend Parameter" kommt wohl daher, dass Du "Bachstabe(a)" aufrufst, also einen Parameter übergibst, wo 2 erwartet werden. Lies Dir am bestem mal die Hinweise von Pr0g und mir durch, um ein bissl mehr Verständnis für den Code zu entwickeln ;9 Gruß Stephan :dance: :xmas: PS: Jupp, du hast Pos vollkommen richtig verstenden :zwinker: |
Re: Funktion für Galgenraten will nicht Funktionieren :(
Warum machst du es nicht so:
Delphi-Quellcode:
Edit: Eine Klammer vergessen.
Function CheckBuchstabe(CONST aBuchstabe : Char; CONST aString : String) : Boolean;
begin Result := (Pos(aBuchstabe, aString) > 0); end; |
Re: Funktion für Galgenraten will nicht Funktionieren :(
Jo ok so langsam blick ich durch...
Das mit dem Wort[i] war aus meiner alten For Schleife
Delphi-Quellcode:
Aber irgendwie gehört das ja jetzt gar net mehr rein, aber wie kann ich delphi dann sagen, das ich genau diesen buchstaben austauschen möchte ?
For i := 1 to length(Wort) do
if Wort[i] = a then Wort1[i] =: a; Hab den Code nach deinen Hinweisen ausgebessert, also Inc(Zahl) etc gemacht und die variablen ins private getan, aber es geht trotzdem nicht :( Ich weiss ich bin ein hoffnungsloser fall, aber ich steig da nich so richtig durch, wie ich nun die funktion mit meiner prozedur verbinden kann ?
Delphi-Quellcode:
Function CheckBuchstabe(CONST aBuchstabe : Char; CONST aString : String) : Boolean;
begin Result := (Pos(aBuchstabe, aString) > 0); end; procedure TForm1.FormCreate(Sender: TObject); begin aString := 'penispumpe'; aString1 := '**********'; versuche := 0; fehler := 0; Label1.Caption := aString1; end; procedure TForm1.Button1Click(Sender: TObject); var aBuchstabe : Char; i : Integer; begin Inc(versuche); aBuchstabe := Lowercase(Edit1.Text)[1]; if CheckBuchstabe(aBuchstabe) then begin aString1[i] := aBuchstabe; Inc(versuche); end else begin Showmessage ('Sorry, der Buchstabe kommt nicht vor!'); Inc(fehler); end; Label4.Caption := IntToStr(versuche); Label5.Caption := IntToStr(fehler); Label1.Caption := aString1; end; |
Re: Funktion für Galgenraten will nicht Funktionieren :(
Zitat:
[Obligator] Was geht nicht? ;-) [/Obligator] :mrgreen: Bekomst du eine Fehlermeldung (wenn ja: Was steht drin?), ne Zugriffsverletzung, passiert was falsches, passiert überhaupt irgendwas, etc. pp.? |
Re: Funktion für Galgenraten will nicht Funktionieren :(
Jo es kommt ne fehlermeldung, die vorher auch kam:
Code:
:(
[Fehler] Unit1.pas(60): Nicht genügend wirkliche Parameter
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:23 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz