AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Anfänger sucht Hilfe bei ersten Programierschritten
Thema durchsuchen
Ansicht
Themen-Optionen

Anfänger sucht Hilfe bei ersten Programierschritten

Ein Thema von lun87 · begonnen am 15. Dez 2006 · letzter Beitrag vom 18. Dez 2006
Antwort Antwort
Seite 2 von 3     12 3      
lun87

Registriert seit: 19. Nov 2006
29 Beiträge
 
#11

Re: Anfänger sucht Hilfe bei ersten Programierschritten

  Alt 16. Dez 2006, 00:11
DAs ist ja cool, dass hier wirklich versucht wird mir zu helfen. Meist sagen dann die Leute also bitte das schaffste doch alleine oder so... aber das ist gut kleine tipps und der rest muss von selbst kommen. Thanks an alle auch wenn ich immer noch net weiss, wie ich ihm sage, wie er mehrere Versuche bekommt xD sry...-.- ist halb 2 nachts *ausrede* ^^


Delphi-Quellcode:
type
  TVersuchsZahl = array [0..4] of integer;
  TForm1 = class(TForm)
    ratebutton: TButton;
    ausgabeedt: TPanel;
    eingabeedt: TEdit;
    eingabezahlen: TPanel;
    Label1: TLabel;
    procedure ratebuttonClick(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  versuchszaehler : TVersuchsZahl;

implementation

{$R *.dfm}

procedure TForm1.ratebuttonClick(Sender: TObject);
var i, ratezahl, randomzahl, versuchszaehler : integer;

begin
  If (ratezahl = randomzahl) or (versuchszaehler = 4) then
    ratezahl[versuchszaehler] := ratezahl;
    inc(versuchszaehler);
    for versuchszaehler := 0 to 4 do ausgabeedt.Caption(inttostr(ratezahl[versuchszaehler]));
end;

procedure TForm1.FormCreate(Sender: TObject);
var i, ratezahl, versuchszaehler, randomzahl : integer;
begin
  ratezahl := eingabeedt.text;
  versuchszaehler := 0;
  Randomize;
  randomzahl := random(20)+1;
end;

end.


mein letzter Versuch bringt nichts mehr heute^^ Nacht Leute... Irgendwie verstehe ich da wat net... -.-


mfg
Lun87
  Mit Zitat antworten Zitat
Benutzerbild von Martin K
Martin K

Registriert seit: 20. Okt 2005
919 Beiträge
 
Turbo Delphi für Win32
 
#12

Re: Anfänger sucht Hilfe bei ersten Programierschritten

  Alt 16. Dez 2006, 00:33
Das was Maja geschreiben hat hab ich alles mehr oder weniger auch schon oben geschrieben.

Mein Tipp:
Les Dir morgen nochmal diesen kompletten Thread von ganz oben durch und versuche Deine Fehler / meine Vorschläge nachzuvollziehen.

Und begehe nicht den Fehler, dass Du versuchst, alles mit einer Schleife auf einmal machen zu wollen.
-> Bei jedem Rate-Versuch wird der Button erneut geklickt, also musst Du in der Prozedur zum ButtonClick praktisch einen Schleifendurchlauf simulieren.
Geh alle Schritte dann genau durch und gucke was passiert, entweder mit Blatt Papier oder zur Kontrolle dann mit F7.


Nebenbei noch:
Gewöhn Dir mal eine vernünftige Codeeinrückung an, dann wird vieles auch dentlicher, weil es übersichtlicher ist.

Mach Dir klar dass zu jedem end auch vorher ein begin gehört (okay, es gibt ein paar Ausnahmen - aber denen wirst Du erstmal nicht begegnen).

Mal ein Beispiel für sinvolle Einrückung:
Delphi-Quellcode:
procedure TForm1.ratebuttonClick(Sender: TObject);
var
  i: integer;
  ...
begin
  if (RateZahl = Zufallszahl) OR (Versuchzähler = 4) then
    for i := 0 to 4 do
      ShowMessage( IntToStr(Array[i]) );
end;
Somit wird deutlich zu welchem begin ein end gehört und was genau alles zu der IF-Abfrage bzw. zur FOR-Schleife gehört.
Du kannst Dir auch noch begin und end drum herum machen.
BEACHTE: Wenn einer Schleife / if-Abfrage eine Anweisung folgt, wird kein begin/end benötigt.
Wenn jedoch mehrere Anweisungen folgen, musst Du begin/end drum herum machen.
Die for-Schleife und die ShowMessage zählen in diesem Fall zu einer Anweisung, die zu der if-Abfrage gehört.
Das kannst Du Dir auch an der Anzahl der Semikolons ; verdeutlichen.

Wenn es für Dich übersichtlicher ist, kannst Du aber auch sowas schreiben - ist aber dasselbe wie der obige Code:
Delphi-Quellcode:
procedure TForm1.ratebuttonClick(Sender: TObject);
var
  i: integer;
  ...
begin
  if (RateZahl = Zufallszahl) OR (Versuchzähler = 4) then
  begin
    for i := 0 to 4 do
      ShowMessage( IntToStr(Array[i]) );
  end;
end;
Zu Majas Link:
Sorry, aber hier ist es imho nicht gut dargestellt, da das begin immer am Zeilenende steht. Darunter leidet m.E. die Übersichtlichkeit.
Gewöhn Dir besser an, dass begin und das entsprechende end dazu immer in gleicher Höhe stehen:
Delphi-Quellcode:
for i := 1 to 10 do
begin
  Anweisung1;
  Anweisung2;
  Anweisung3;
end;
BTW: ein repeat/until Block benötigt kein begin/end, da das repeat begin ersetzt und until ersetzt end.
Delphi-Quellcode:
repeat
  Anweisung1;
  Anweisung2;
  usw;
until x = y;
Mit den Menschen ist es wie mit Computern -
es gibt Nullen und Einsen.
  Mit Zitat antworten Zitat
Benutzerbild von xZise
xZise

Registriert seit: 3. Mär 2006
Ort: Waldbronn
4.303 Beiträge
 
Delphi 2009 Professional
 
#13

Re: Anfänger sucht Hilfe bei ersten Programierschritten

  Alt 16. Dez 2006, 10:05
Also ich versuchs auchnochmal

Was musst du beim Starten der Anwendung machen:
  • Eine Zufallszahl erstellen
    ---
    Die Belegunbg der Edits ist unnötig Das kannst du (in der VCL, womit du wahrscheinlich arbeitest) über den O(bject)I(nspector) machen (Zur "Desgintime", also während du das programmierst... Das gegenstück wäre zur "Laufzeit"... Also während das Programm läuft)

Was muss jetzt das "Spiel" machen:
  • Bei jeden Buttonklick auf korrektheit des Wertes überprüfen
  • Die Versuchsnummer um eins erhöhen
  • Ausgabe, ob korrekt oder nicht
  • Eingabeedit am besten leeren

Und das war alles...
Wenn wir uns das jetzt angucken, haben wir keine Schleifen...

Zu dem Code-Style:
- Einrücken
- keine Leerzeilen zwischen "procedure"/"function" und dem "begin"
- Wenn nur eine Anweisung folgt, dann kann man das "begin"/"end" lassen
- Alles zwischen "begin" und "end" auf gleicher Höhe, oder weiter eingerückt (je nach fall), aber nie auf gleicher Höhe mit begin/end
- (meine meinungAlles was fettgedurckt und blau ist, gehört klein
Fabian
Eigentlich hat MS Windows ab Vista den Hang zur Selbstzerstörung abgewöhnt – mkinzler
  Mit Zitat antworten Zitat
lun87

Registriert seit: 19. Nov 2006
29 Beiträge
 
#14

Re: Anfänger sucht Hilfe bei ersten Programierschritten

  Alt 16. Dez 2006, 10:22
Wieso die Edit brauche ich doch, damit der User seine Zahl eintragen kann?!?!?! Dasalles verstehe ich ja aber was ich nicht verstehe ist, nachdem ich eine Zahl eingetragen habe und er gesagt hat(der computer) die stimmt nicht mit randomzahl überein, soll der User eine NEUE Chance bekommen, folglich hat er die Möglichkeit WIEDER eine Zahl einzugeben. Das genau 5x... D.h.

randomzahl sei 5

User gibt 4 ein
4 <> 5 somit --> neuer versuch für user // Zahl 4 wird in einem array gespeichert

User gibt 3 ein // nun ist zahl 4 in Zahl[i] wobei i = Feld 0 ist und Zahl 3 in Zahl[i] wobei i jetzt i+1 ist also Feld 1
selbige wie oben

User gibt 5 ein
randomzahl nun = ratezahl ---> nun soll er alle Zahlen ausgeben die der User benutzt hat und die die richtige Lösung (jeweils in einem panel), also folglich ---> 4, 3, 5 vom User in einem Panel und 5 vom Computer(randomzahl) in einem Panel

Und genau dieses schaffe ich nicht... Jedes mal wenn ich ungleich einer zahl bin weiss ich nicht wie ich dem computer sage, speicher die zahl und lass ihn nochmal raten... dachte vll mit application.restart oder so +save erste zahl xD

Aber vll verstehe ich auch nicht was ihr mir klar machen wollt.

Naja ich danke euch jeden Fall setze mich mal weiter ran. Üben Üben Üben

Mfg
lun87
  Mit Zitat antworten Zitat
Benutzerbild von xZise
xZise

Registriert seit: 3. Mär 2006
Ort: Waldbronn
4.303 Beiträge
 
Delphi 2009 Professional
 
#15

Re: Anfänger sucht Hilfe bei ersten Programierschritten

  Alt 16. Dez 2006, 10:36
Ok:
Einen neuen Versuch machst du so:
Wenn auf den "Rate" Butzton geklickt wurde, dann überprüfst du die Zahl auf korrekt heit.
Wenn sie nicht korrekt ist, dann füg sie in das Array ein (die Stelle weißt du durch die Versuchnummer... z.B. wenn das der 1. Verushc ist, dann musst du das 1. Item im array nehmen). Und dann machst du "edit.text := ''", damit der Text daraus weg ist.

Ansonsten musst du da nicht soviel zurücksetzen....

Setz mal den Code hier rein, und sach wos hackt
Fabian
Eigentlich hat MS Windows ab Vista den Hang zur Selbstzerstörung abgewöhnt – mkinzler
  Mit Zitat antworten Zitat
lun87

Registriert seit: 19. Nov 2006
29 Beiträge
 
#16

Re: Anfänger sucht Hilfe bei ersten Programierschritten

  Alt 16. Dez 2006, 11:43
So siehts momentan aus:

Delphi-Quellcode:
unit Uzahlenraten;

interface

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

type
  TVersuchsZahl = array [0..4] of integer;
  TForm1 = class(TForm)
    ratebutton: TButton;
    ausgabeedt: TPanel;
    eingabeedt: TEdit;
    eingabezahlen: TPanel;
    Label1: TLabel;
    procedure ratebuttonClick(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  Zahl : TVersuchsZahl;

implementation

{$R *.dfm}


procedure TForm1.ratebuttonClick(Sender: TObject);
var i, ratezahl, randomzahl, versuchszaehler : integer;

begin
randomzahl := random(20)+1;
ratezahl := strtoint(eingabeedt.text);
  If (ratezahl = randomzahl) or (versuchszaehler = 4) then
    begin
    Zahl[i] := ratezahl; -----> Wie mache ich hier einen neustart, so dass der User mehrere Ratemöglichkeiten hat
    inc(i);
    end;
    for i := 0 to 4 do
    ShowMessage( IntToStr(Zahl[i]) ); ----> Hier soll er alle Zahlen die geraten worden sind ausgegben werden.
end;

procedure TForm1.FormCreate(Sender: TObject);
var i, ratezahl, versuchszaehler, randomzahl : integer;
begin
  i := 0;
  Randomize;
end;

end.

mfg
lun87
  Mit Zitat antworten Zitat
Benutzerbild von xZise
xZise

Registriert seit: 3. Mär 2006
Ort: Waldbronn
4.303 Beiträge
 
Delphi 2009 Professional
 
#17

Re: Anfänger sucht Hilfe bei ersten Programierschritten

  Alt 16. Dez 2006, 12:03
Es bringt hier nichts so viele lokle Variablen zu erstellen, weil sobald der Code von "RateButtonClick" fertig ist, sind die daten im Nirvana.

Also wir machen das so:
Wir haben 2 Buttons, ein Edit, ein Panel!

Die Buttons haben folgende Funktionen:
rb - RateButton - Überprüft, ob richtig geraten (Standardmäßig deaktiviert)
ngb - NewGameButton - Erstellt eine neue Zufallszahl

das Edit:
re - RateEdit - Darin wird die geratene Zahl eingegeben (Standardmäßig deaktiviert)

das panel:
ep - EreignisPanel - Darin wird das ergbnis ("Korrekt"/"Falsch") und die Bisher geratenen Zahlen ausgegeben!

Das zur GUI.
Dann die Variablen:
Erstelle 2 globale Variablen:
grz - geratene Zahlen - Das ist ein array wo die geratenen Zahlen drinn stehen
vnr - Versuchnummer - Das ist eine Zahl, in der die akt. Chance gepsichert ist
zerz - Zuerratene Zahl - Darin speicherst du die Zuffalszahl

Dann mache folgendes:
Wenn die Form erstellt wird:
Führe "Randomize" aus.

Jetzt muss der Benutzer auf ngb klicken:
- Setze die Anzahl der bisherigen Versuche auf 0
- aktivier rb und re
- Leere das array und re
- erstelle eine Zahl zwischen X und Y und speichere sie in zerz

Und jetzt kann der Benutzer raten indem er sein ergebnis in re eingibt und auf rb klickt:
- Überprüfe ob die Zahl richtig ist
- füge in das array die Zahl aus re ein
- Leere re
- Schreibe in ep, ob das ergebnis richtig war, und was er schon geraten hatte

So... Ansich ist das eigentlich "Pseudocode", also nicht mehr sehr schwer... Und ich verstehe nicht, was du ständig mit "Application.New/Restart" willst. Du musst nichts neustarten... Du musst nur die Änderungen rückgänigmachen (also z.B. das Edit leeren...)
Und mit Leeren meine ich, den Inhalt leeren, und nicht die Komponente "wegschmeißen"! (z.B. re.text := '')

An sich dürften 2 forschleifen vorkommen... Und informiere dich vorher, wie for-schleifen funktionieren! (Hilfe z.B.)

PS: Dein Code ist ansich schon richtig, nur eben nicht komplett richtig umgesetzt.

PPS: Ich werde dir nicht sagen, wie man in einem Array etwas schreibst, weil es mindestens schoneinmal hier gesagt wurde!
Fabian
Eigentlich hat MS Windows ab Vista den Hang zur Selbstzerstörung abgewöhnt – mkinzler
  Mit Zitat antworten Zitat
lun87

Registriert seit: 19. Nov 2006
29 Beiträge
 
#18

Re: Anfänger sucht Hilfe bei ersten Programierschritten

  Alt 16. Dez 2006, 13:41
Ich will doch gar keine neue Zufallszahl xD ICh will eine einzige Zufallszahl und der Anwender soll 5 Versuche haben diese ZUfallszahl herauszufinden... DAnach sollen alle seine Versuchszahlen ausgegeben werden und die gesucht Zahl auch
DAher ein button, 2 panels und ne edit xD oder funzt das allet net? oO

Ich werd mal die Zufallszahl global als Variable speichern bzw in ein Array packen, so dass sie über die 5 VErsuche erhalten bleibt und nicht im Nirvana landet^^


Mfg
Lun87
  Mit Zitat antworten Zitat
lun87

Registriert seit: 19. Nov 2006
29 Beiträge
 
#19

Re: Anfänger sucht Hilfe bei ersten Programierschritten

  Alt 17. Dez 2006, 14:13
Nabend Hab ein wenig an meinem Prog gefummelt. Er compiliert schon mal, aber das mit dem array klappt net und das er die einzelnen Zahlen speichert funktioniert glaube ich auch nicht. Naja werde weiter probieren und schauen, vll hat jemand noch ne idee. Ansonsten schönen Advent noch

Delphi-Quellcode:
unit Uzahlenraten;

interface

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

type
  TVersuchsZahl = array [0..4] of integer;
  TForm1 = class(TForm)
    ratebutton: TButton;
    ausgabeedt: TPanel;
    eingabeedt: TEdit;
    eingabezahlen: TPanel;
    Label1: TLabel;
    procedure ratebuttonClick(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  VersuchsZahl : TVersuchsZahl;

implementation

{$R *.dfm}

procedure TForm1.ratebuttonClick(Sender: TObject);
var i, ratezahl, randomzahl, versuchszaehler : integer;
begin
randomzahl := random(1)+1;
ratezahl := strtoint(eingabeedt.text);
  If (ratezahl = randomzahl) or (versuchszaehler = 4) then
    begin
      VersuchsZahl[i] := ratezahl;
      inc(i);
    for i := 0 to 4 do
      eingabezahlen.Caption := IntToStr(VersuchsZahl[i]);
      ausgabeedt.Caption := IntToStr(randomzahl);
    end
    else
      showmessage ('Neuer Versuch bitte!');
      eingabeedt.text := '';
end;

procedure TForm1.FormCreate(Sender: TObject);
var i, ratezahl, versuchszaehler, randomzahl : integer;
begin
  i := 0;
  Randomize;
end;

end.
mfg
Lun87
  Mit Zitat antworten Zitat
Klaus01

Registriert seit: 30. Nov 2005
Ort: München
5.755 Beiträge
 
Delphi 10.4 Sydney
 
#20

Re: Anfänger sucht Hilfe bei ersten Programierschritten

  Alt 17. Dez 2006, 14:33
Delphi-Quellcode:
type
  TVersuchsZahl = array [0..4] of integer;
  TForm1 = class(TForm)
    ratebutton: TButton;
    ausgabeedt: TPanel;
    eingabeedt: TEdit;
    eingabezahlen: TPanel;
    Label1: TLabel;
    procedure ratebuttonClick(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
    versuchszaehler: Integer;
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  VersuchsZahl : TVersuchsZahl;

implementation

{$R *.dfm}

procedure TForm1.ratebuttonClick(Sender: TObject);
var i, ratezahl, randomzahl, : integer; // Versuchzaehler als private Variable deklariert
begin
randomzahl := random(1)+1; // hier vielleicht mal den Bereich erhöhen random(1)
                                                          // bringt nicht allzuviele unterschiedliche Werte
ratezahl := strtoint(eingabeedt.text);
inc(versuchszaehler); // Du solltest dann versuchszaehler mit 0
                                                     // initialisieren
VersuchsZahl[i] := ratezahl;

  If (ratezahl = randomzahl) or (versuchszaehler = 4) then
    begin
      for i := 0 to 4 do
        begin
          eingabezahlen.Caption := IntToStr(VersuchsZahl[i]);
          ausgabeedt.Caption := IntToStr(randomzahl);
        end
    else
      showmessage ('Neuer Versuch bitte!');
      eingabeedt.text := '';

end;

Grüße
Klaus
Klaus
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 3     12 3      


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 07:48 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