AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi Funktion für Galgenraten will nicht Funktionieren :(
Thema durchsuchen
Ansicht
Themen-Optionen

Funktion für Galgenraten will nicht Funktionieren :(

Ein Thema von fabiO · begonnen am 21. Dez 2004 · letzter Beitrag vom 21. Dez 2004
Antwort Antwort
Seite 1 von 2  1 2      
fabiO

Registriert seit: 5. Dez 2004
Ort: Jena
41 Beiträge
 
Delphi 6 Personal
 
#1

Funktion für Galgenraten will nicht Funktionieren :(

  Alt 21. Dez 2004, 14:31
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...

Delphi-Quellcode:
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.
Hoffe ma ich habs irgendwie verständlich rübergebracht was ich machen will, pls help me

Gruss fabiO
  Mit Zitat antworten Zitat
Benutzerbild von Steve
Steve

Registriert seit: 2. Mär 2004
Ort: Würzburg
730 Beiträge
 
Delphi 2006 Personal
 
#2

Re: Funktion für Galgenraten will nicht Funktionieren :(

  Alt 21. Dez 2004, 14:39
Hi,

Schau Dir doch mal die Funtkion Delphi-Referenz durchsuchenPos an.

Außerdem deklarierst Du Deine Variablen innerhalb der Funktion, statt sie als Parameter zu übergeben: Function CheckBuchstabe(CONST aBuchstabe : Char; CONST aString : String) : Boolean; Was aber wiederum inhaltlich genau POS entsprechen würde -g-

PS: Pos unterscheidet Groß-/Kleinschreibung!

Gruß
Stephan
Stephan B.
Wer andern eine Grube gräbt ist Bauarbeiter!
Wer im Glashaus sitzt, sollte sich lieber im Dunkeln ausziehen!
Außerdem dieser Satz kein Verb...
  Mit Zitat antworten Zitat
Benutzerbild von sakura
sakura

Registriert seit: 10. Jun 2002
Ort: Unterhaching
11.412 Beiträge
 
Delphi 12 Athens
 
#3

Re: Funktion für Galgenraten will nicht Funktionieren :(

  Alt 21. Dez 2004, 14:40
Zitat von fabiO:
komme aber nicht weiter, weil er immer wieder Fehler ausgibt, und ich keine ahnung hab, wie ich diese behebe...
Nenne uns doch mal die Fehler, welche Du erhälst

......
Daniel Lizbeth
Ich bin nicht zurück, ich tue nur so
  Mit Zitat antworten Zitat
Benutzerbild von Pr0g
Pr0g

Registriert seit: 21. Mai 2004
809 Beiträge
 
Delphi 7 Personal
 
#4

Re: Funktion für Galgenraten will nicht Funktionieren :(

  Alt 21. Dez 2004, 14:45
Ein paar Verbesserungen für deinen Code, falls du zu einem Punkt fragen hast, dann kann man dir bestimmt auch ein Beispiel geben:
  • Pack die globalen Variablen in den "private"-Bereich der Form und fülle sie im onCreate mit Werten.
  • Statt "Variable := Variable + 1;" zum erhöhen, nimm besser immer "Inc(Variable)". Das gleiche gilt für Minus, dort würdest du "Dec" nehmen.
  • Du willst deiner Funktion "buchstabe" zwar im Code den Buchstaben in der Variable "a" als Parameter übergeben, hast aber in der Funktion selber keine Parameter angegeben.
  • Die Funktion "buchstabe" könntest du vereinfachen:
    Delphi-Quellcode:
    Function buchstabe(const AChar: Char) : Boolean;
    begin
      Result := (Pos(AChar, Wort[i]) > 0);
    end;
  • Was ist Wort[i]? Du hast zwar zwei Variablen "wort" und "wort1", aber du müsstest ein Array anlegen, um dort per Index auf ein Element zugreifen zu können.
  • Du hast nirgendwo die Variable "i" deklariert, welche du aber für den Zugriff auf "Wort[i]" nutzen wolltest.
  • Du brauchst eine Booleanvariable nicht auf "True" oder "False" zu prüfen, hier ein Beispiel:
    Delphi-Quellcode:
    //statt
    if Variable = True then
    //schreibe
    if Variable then

    //statt
    if Variable = False then
    //schreibe
    if not Variable then
  • Du willst wohl mit "a := Lowercase(Edit1.Text)[1];" das erste Zeichen aus dem Edit auslesen. Dazu müsstest du den Text aber erst in einem String speichern, denn erst dann kannst du per Index auf ein Zeichen zugreifen.
  • Nim statt OnActive der Form OnCreate.

MfG Pr0g

Edit: hab wohl ein bisschen lange mit dem Schreiben gebraucht
  Mit Zitat antworten Zitat
fabiO

Registriert seit: 5. Dez 2004
Ort: Jena
41 Beiträge
 
Delphi 6 Personal
 
#5

Re: Funktion für Galgenraten will nicht Funktionieren :(

  Alt 21. Dez 2004, 14:52
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:
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;
den fehler den er mir ausgibt is nach wie folgt der hier:

Code:
[Fehler] Unit1.pas(60): Nicht genügend wirkliche Parameter
Was mir delphi damit sagen will versteh ich nich so recht weshalb ich auch nicht weiß, wie ich es lösen soll...

Sorry wenn ich bissl schwer bin, bin aber noch totaler anfänger

Gruss fabiO
  Mit Zitat antworten Zitat
Benutzerbild von Steve
Steve

Registriert seit: 2. Mär 2004
Ort: Würzburg
730 Beiträge
 
Delphi 2006 Personal
 
#6

Re: Funktion für Galgenraten will nicht Funktionieren :(

  Alt 21. Dez 2004, 14:52
Hi,

nur noch ein paar Kommentare zum Code:
  • Deine Funktion "buchstabe" kann nix sinnvolles zurückgeben (nicht initialisierte lokale Variablen, s.o.)
  • Jedesmal, wenn das Fenster aktiviert wird, werden die Werte (Versuche, Fehler, Label1.Caption) zurückgesetzt. Um das zu vermeiden kannste den FormActivate-Code ins OnCreate Deines Forms packen.
  • Innerhalb von Button1Click möchtest Du der Funktion "Buchstabe" einen Parameter übergeben, obwohl "Buchstabe" keine Parameter hat/erwartet (s.o.)
  • Du möchtest in Button1Click auf Wort1[i] zugreifen, obwohl hier kein i deklariert ist geschweige denn einen Wert hätte.
  • Du zählst "versuche" doppelt hoch.
  • Statt if buchstabe(a) .. doppelt aufzurufen, kannst Du auch einfach den else-Teil der Bedingung nutzen.
  • Um alle Fundstellen eines Buchstaben innerhalb eines Strings zu finden, ist auch PosEx hilfreich (ab D6 glaub ich)

Gruß
Stephan

edit: laaaaaahm bin

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

PS: Jupp, du hast Pos vollkommen richtig verstenden
Stephan B.
Wer andern eine Grube gräbt ist Bauarbeiter!
Wer im Glashaus sitzt, sollte sich lieber im Dunkeln ausziehen!
Außerdem dieser Satz kein Verb...
  Mit Zitat antworten Zitat
Benutzerbild von Pr0g
Pr0g

Registriert seit: 21. Mai 2004
809 Beiträge
 
Delphi 7 Personal
 
#7

Re: Funktion für Galgenraten will nicht Funktionieren :(

  Alt 21. Dez 2004, 14:55
Warum machst du es nicht so:
Delphi-Quellcode:
Function CheckBuchstabe(CONST aBuchstabe : Char; CONST aString : String) : Boolean;
begin
  Result := (Pos(aBuchstabe, aString) > 0);
end;
Edit: Eine Klammer vergessen.
  Mit Zitat antworten Zitat
fabiO

Registriert seit: 5. Dez 2004
Ort: Jena
41 Beiträge
 
Delphi 6 Personal
 
#8

Re: Funktion für Galgenraten will nicht Funktionieren :(

  Alt 21. Dez 2004, 15:06
Jo ok so langsam blick ich durch...

Das mit dem Wort[i] war aus meiner alten For Schleife

Delphi-Quellcode:
For i := 1 to length(Wort) do
          if Wort[i] = a
            then Wort1[i] =: a;
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 ?

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;
  Mit Zitat antworten Zitat
Benutzerbild von Ultimator
Ultimator

Registriert seit: 17. Feb 2004
Ort: Coburg
1.860 Beiträge
 
FreePascal / Lazarus
 
#9

Re: Funktion für Galgenraten will nicht Funktionieren :(

  Alt 21. Dez 2004, 15:10
Zitat:
aber es geht trotzdem nicht
Und wie immer die obligatorische Frage:
[Obligator]
Was geht nicht?
[/Obligator]



Bekomst du eine Fehlermeldung (wenn ja: Was steht drin?), ne Zugriffsverletzung, passiert was falsches, passiert überhaupt irgendwas, etc. pp.?
Julian J. Pracht
  Mit Zitat antworten Zitat
fabiO

Registriert seit: 5. Dez 2004
Ort: Jena
41 Beiträge
 
Delphi 6 Personal
 
#10

Re: Funktion für Galgenraten will nicht Funktionieren :(

  Alt 21. Dez 2004, 15:16
Jo es kommt ne fehlermeldung, die vorher auch kam:

Code:
[Fehler] Unit1.pas(60): Nicht genügend wirkliche Parameter
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:47 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