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 1 von 3  1 23      
lun87

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

Anfänger sucht Hilfe bei ersten Programierschritten

  Alt 15. Dez 2006, 22:56
Hallo miteinander,

Ich wollte mir mal ein eigenes Programm überlegen und da ich noch recht neu in der Programmiersprache bin, habe ja schon das eine oder andere Thema hier verfasst, wollte ich euch fragen, ob mir wer ein paar Tipps bei meinem Prog geben könnte und vielleicht sogar ein paar Anfängerhilfen.

Danke euch! Hier mein soweit nicht funkionsfähiges Prog:

Delphi-Quellcode:
procedure TForm1.ratebuttonClick(Sender: TObject);
var eingabezahl : array [0..4] of integer;
    zufallszahl, i, ratezahl : integer;
begin
i := 0;
zufallszahl := 0;
Randomize;


repeat
 zufallszahl := random(20);
 ratezahl := strtoint (eingabeedt.Text);
If ratezahl = zufallszahl then
  For i := 1 to i do
    eingabezahl[i] := ratezahl;
    inc(i)

    else
      showmessage('Falsche Zahl gleich nochmal!');

until (zufallszahl = ratezahl)



For i := 1 to i do

    eingabezahlen.Caption := inttostr(eingabezahl[i]);
    inc(i);
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  eingabeedt.text := '';
  showmessage('Im folgenden hast du 5 Versuche die gesuchte Zahl zu finden. Sie liegt zwischen 1 und 20!');
end;

end.
Das Prog soll folgendes leisten:
1. Eine Zufallszahl wird generiert.
2. Die Zufallszahl wird mit der Zahl des Anwenders verglichen (5 Versuche hat man!)
3. Wenn er richtig geraten hat, soll er die Zahl in einem Array speichern und in dem einen Panel ausgeben und eine Antwort im anderen Panel.
3. Wenn nicht soll er die geratene Zahl im Array speichern und nun soll der Anwender eine neue Chance bekommen. Meine Frage nun:
Wie sage ich, dass er eine 2. Chance bekommt, ohne dabei meinen ersten Wert zu verlieren? Sollen zum Schluss alle geratenen Zahlen ausgegeben werden.
4. Wie kann ich im Formcreate, es so machen das ERST das Formular erscheint und dann meine showmessage ? Mitm Delay vll?

Vielen Dank an Euch für die Hilfe. Vielleicht habt ihr die eine oder andere Idee wie man so als Anfänger an sowas rangeht und sich in Delphi reinfindet.

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
 
#2

Re: Anfänger sucht Hilfe bei ersten Programierschritten

  Alt 15. Dez 2006, 23:18
Guck Dir mal die Syntax für eine FOR-Schleife an:

Beispiel:
Delphi-Quellcode:
For i := 1 to 20 do
  Anweisung;
Die For-Schleife wird genau 20mal durchlaufen, wobei i beim ersten Durchlauf den Wert 1 hat, beim zweiten 2, usw. bis 20.
i wird also vom Startwert 1 aus so oft erhöht, bis es den Wert 20 hat.

Eine Schleife mit Endwert i wobei i auch die Zählvariable ist wie in Deinem Code, ist also falsch.

In Deinem Fall soll wohl das Array durchlaufen werden, also soll i die Werte von 0 bis 4 annehmen.
Überlege Dir selbst, wie Du dann mein Beispiel abändern musst.

Ein Inc(i) ist hier fehl am Platz, da i automatisch beim nächsten Durchlauf um 1 erhöht wird.


Wenn in der Schleife mehrere Anweisungen stehen sollen, musst Du einen begin/end-Block um die Anweisungen machen.

Beispiel:
Delphi-Quellcode:
For i := 1 to 20 do
begin
  Anweisung1;
  Anweisung2;
  usw.
end;
Wenn nur eine Anweisung in der Schleife steht, kannst Du auf begin/end verzichten.



zufallszahl := 0; (am Anfang)
Diesen Wert von zufallszahl verwendest Du nirgends, Du kannst diese Zeile also streichen.
Dasselbe gilt für die Anweisung
i := 0;

[Edit:]
Das Auslesen der ratezahl aus eingabeedt.Text und die ganze IF-Abfrage sollten wohl in die For-Schleife mit rein, da ratezahl sonst den Wert innerhalb der For-Schleife nie ändert.

Zitat von lun87:
Die Zufallszahl wird mit der Zahl des Anwenders verglichen (5 Versuche hat man!)
Dann würde ich allerdings keine For-Schleife verwenden, sondern NUR die repeat/until-Schleife (For-Schleife weglassen).
Die repeat/until-Schleife wird dann verlassen, wenn entweder zufallszahl = ratezahl ist oder der Anwender 5mal geraten hat, also i = 4 ist.
In diesem Fall musst Du dann doch i initialisieren (auf den Startwert 0 setzen, wie es in Deinem Code oben ist) und in der repeat/until-Schleife muss i um 1 erhöht werden, also Inc(i) so wie es war

(sorry dass ich es erst anders geschrieben hatte, aber mir war nicht so ganz klar, was Du mit der For-Schleife bezwecken willst.
Also im Prinzip müsste es klappen, wenn Du die Zeile mit der For-Schleife einfach streichst.)
Mit den Menschen ist es wie mit Computern -
es gibt Nullen und Einsen.
  Mit Zitat antworten Zitat
lun87

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

Re: Anfänger sucht Hilfe bei ersten Programierschritten

  Alt 15. Dez 2006, 23:31
Gut das hat geklappt danke. Nun bleiben mir aber noch 2 unerklärliche Fragen:
1. Wie lasse ich ihn den zweiten Versuch machen? Application.new oder sowas? Wobei er aber den Wert des ersten Males behalten soll!
2. Wie rufe ich ERST das Formular auf und dann die showmessage?

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
 
#4

Re: Anfänger sucht Hilfe bei ersten Programierschritten

  Alt 15. Dez 2006, 23:45
Schau Dir erstmal meinen Nachtrag im obigen Beitrag an.

Für den zweiten Versuch müsstest Du praktisch warten, bis der Benutzer was neues eingegeben hat.
In diesem Fall müsstest Du es wohl doch komplett anders machen.
Das array müsste global gespeichert werden und auch die Zählvariable i, damit man weiß, beim wie vielten Versuch er ist.
Bei FormCreate müsstest Du erstmal i auf 0 setzen.

Beim Klick auf den Button müsstest Du dann erst überprüfen, was hat der Benutzer eingegeben, ist es die richtige Zahl oder hat er seine 5 Versuche erreicht (IF-Abfrage).
Anhand dieser Abfrage legst Du dann fest ob er nochmal raten darf oder nicht.

[Edit:]
und Du kannst auch entscheiden, was Du machst, wenn er keine Versuche mehr hat und richtig geraten hat bzw. nicht richtig geraten hat.

Inc(i) muss natürlich auch noch rein, da ja wieder ein Versuch dazu kommt.

Zitat von lun87:
Wie rufe ich ERST das Formular auf und dann die showmessage?
FormCreate wird aufgerufen BEVOR das Formular sichtbar wird.
Was soll das für einen Sinn haben, gleich beim Starten des Programms eine ShowMessage zu bekommen?
Mit den Menschen ist es wie mit Computern -
es gibt Nullen und Einsen.
  Mit Zitat antworten Zitat
Benutzerbild von Martin K
Martin K

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

Re: Anfänger sucht Hilfe bei ersten Programierschritten

  Alt 15. Dez 2006, 23:59
Nochwas ist mir grade aufgefallen:
Zitat von lun87:
showmessage('Im folgenden hast du 5 Versuche die gesuchte Zahl zu finden. Sie liegt zwischen 1 und 20!'); zufallszahl := random(20);
Vorsicht!
random(20); erzeugt eine Zahl zwischen 0 und 19

Du musst also noch 1 dazu addieren:
zufallszahl := random(20) + 1;
Tipp:
Anstatt eingabeedt.text := ''; in FormCreate zu sezten kannst Du auch einfach im ObjektInspektor bei eingabeedit die Eingenschaft Text auf den gewünschten Wert setzen.
Mit den Menschen ist es wie mit Computern -
es gibt Nullen und Einsen.
  Mit Zitat antworten Zitat
lun87

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

Re: Anfänger sucht Hilfe bei ersten Programierschritten

  Alt 16. Dez 2006, 00:08
Gut habs jez auf das hier reduziert:

Delphi-Quellcode:
type
  TZahl = 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 : TZahl;

implementation

{$R *.dfm}

procedure TForm1.ratebuttonClick(Sender: TObject);
var i , eingabezahl, ratezahl: integer;
begin
 i := 0;

repeat
   If i = 4 then
     showmessage('Tja war wohl nichts!')
   else
    eingabezahl := strtoint(eingabeedt.text);
    Zahl[i] := eingabezahl; -----> neue Chance einen neuen WErt einzugeben, dabei soll alter Wert aber behalten werden !!!
    inc(i);

until (eingabezahl = ratezahl) or (i = 4);

end;

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

end.


Ich muss ihm doch jetzt noch sagen, dass er in der repeat schleife dem benutzer immer wieder die chance gibt eine neue zahl einzugeben? wie mache ich das ? vielmehr wie sage ich ihm behalte die erste zahl gib ihm ne neue chance ?

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
 
#7

Re: Anfänger sucht Hilfe bei ersten Programierschritten

  Alt 16. Dez 2006, 00:15
Lass doch die repeat/until-Schleife weg und mache es wie ich oben geschrieben habe.
Wenn Du ne Frage hast oder was nicht verstehst, von dem was ich geschrieben habe, frag einfach nach.

BTW:
Delphi-Quellcode:
For i := 0 to 4 do
ausgabeedt.caption := inttostr(Zahl[i]);
Überlege Dir mal, warum in diesem Fall in ausgabeedt.caption nur der letzte Eintrag aus dem Zahlen-Array steht.
Gehe mal jeden Schritt der Schleife durch, evtl. auf einem Blatt Papier.

[Edit:]
Zitat:
Zahl[i] := eingabezahl; -----> neue Chance einen neuen WErt einzugeben, dabei soll alter Wert aber
i wird doch immer erhöht, also steht der alte Wert an einer niedrigeren Stelle im Array.

Mal Dir doch mal sowas auf ein Papier oder so:
Code:
array-index Wert
(für i)
-----------------------
0            // Eingabe beim ersten Versuch
1            // Eingabe 2. Versuch
2            ....
3
4
[edit=Christian Seehase]Delphi- und Quote-Tags korrgiert. Mfg, Christian Seehase[/edit]
Mit den Menschen ist es wie mit Computern -
es gibt Nullen und Einsen.
  Mit Zitat antworten Zitat
Benutzerbild von Martin K
Martin K

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

Re: Anfänger sucht Hilfe bei ersten Programierschritten

  Alt 16. Dez 2006, 00:22
Sorry, ich hab hier keine Ahnung was grad mit der DP abgeht, die Zahl hinter [/quote] kam automatisch, die hab ich nich hingemacht.
Kam auch nach dem Editieren wieder...
Mit den Menschen ist es wie mit Computern -
es gibt Nullen und Einsen.
  Mit Zitat antworten Zitat
lun87

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

Re: Anfänger sucht Hilfe bei ersten Programierschritten

  Alt 16. Dez 2006, 00:28
Danke Dir aber ich check das nicht mehr jetzt...-.- Kopf ist zu. Muss pennen morgen in aller frische wieder

jedenfalls müsste es so sein:

User gibt Zahl ein.
programm guckt ob anzahl der versuche = 4 ist
wenn nein dann startet er und vergleicht ratezahl mit eingabezahl
wenn treu dann ausgabe der ratezahl ansonsten neuer versuch und ratezahl im feld merken
man hat 5 versuche wenns nicht klappt wird gesagt: tja klappt wohl nicht
wenn beim 4. versuch-> werden die 4 Zahlen ausgeben und die randomzahl

naja Gute NAcht gucke noch kurz aber globe net das ich zu einem vernünftigen Ergebnis komme mehr...


Delphi-Quellcode:
begin
i := 0;


For i := 0 to 4 do


   If (i = 4) then
     showmessage('Tja war wohl nichts!') ----> neuer versuch initialisieren *aaaaargh* nicht mehr denkfähig heute xD
   else
   begin
    eingabezahl := strtoint(eingabeedt.text);
    Zahl[i] := eingabezahl;
     inc(i); ----> sobald ich hier begin und end setze kennt der i nicht mehr *grrrrrr* -.-
    end;




For i := 0 to 4 do
ausgabeedt.caption := inttostr(Zahl[i]);
inc(i);
end;



mfg
LUn87
  Mit Zitat antworten Zitat
Maja Jessica

Registriert seit: 16. Apr 2005
Ort: Dortmund
95 Beiträge
 
Delphi 4 Standard
 
#10

Re: Anfänger sucht Hilfe bei ersten Programierschritten

  Alt 16. Dez 2006, 01:07
Guten Morgen

Habe dein Problem ein wenig verfolgt und möchte auch meinen Senf dazu geben

Zitat von Martin K:
Lass doch die repeat/until-Schleife weg und mache es wie ich oben geschrieben habe.
Genau! Lass Dir gesagt sein, bis auf die Ausgabe der Zahlen am Schluss brauchst du im ganzen Progamm nicht eine for- oder repeat- Schleife.

Du musst nur beherzigen, daß dein Programm ereignissorientiert aufgebaut werden muss, und nicht wie früher so oft in Ablauffolge.

Also nur wenn der RateButton gedrückt wurde, in ratebuttonClick
-> Prüfen -> Versuchszähler um 1 erhöhen -> Ratezahl in Array[Versuchszähler] speichern

Dann kannst du dir noch die einzig nötige Schleife zu Ausgabe in den ButtonClick eibauen;

(PseudoCode)
Delphi-Quellcode:
RateButtonClick
...
// -> Prüfen -> Versuchszähler um 1 erhöhen -> Ratezahl in Array[Versuchszähler] speichern
if (RateZahl = Zufallszahl) OR (Versuchzähler = 4) then
  for i := 0 to 4 ShowMessage( IntToStr(Array[i]) );
end;
Globale Variablen sind eigentlich verpönnt, doch am Anfang wunderbar verständlich.
Schaffe dir eine globale Variable Versuchszaehler und erhöhe diese grundsätzlich nur wenn der
Ratebutton betätigt wurde.

Und dieses:
Delphi-Quellcode:
For i := 0 to 4 do
ausgabeedt.caption := inttostr(Zahl[i]);
inc(i);
end;
ist, sorry das ich das so direkt schreibe, total vermurkst.
Du lässt in eine Schleife 4 mal eine Zahl an ausgabeedt anzeigen. Das geht so fix, das du nur noch die letzte Zahl sehen kannst.
In der Schleife selbst wird automatisch die Laufvariable "i" immer um 1 erhöht. Das inc(i) ist also mehr als überflüssig.

Es juckt in den Fingern hier fertigen Code einzustellen, doch das wird Dir auf dauer garnicht helfen.
Am besten du schaust dir mal die Grundlagen an, wie zum Beispiel auf diesen Seiten

Bei Fragen, fragen
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 3  1 23      


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 14:03 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