Entwickler-Ecke
Sonstiges (Delphi) - Zahlen erraten...
moTi05 - Mi 14.12.05 20:19
Titel: Zahlen erraten...
Hallo!
Ich arbeite grade in der Schule an einem Programm in dem es darum geht, Zufallszahlen aus einem bestimmen Wertebereich (z.B. 15 bis 25), vom Computer generiert wurden zu erraten. Im Moment beschränkt sich dies auf eine Zahl. Leider ist mein Problem das die im Unterricht genannte Formel um eine Zufallszahl im gewünchten Bereich zu erhalten nicht von meinem Delphi akzeptiert wird.
Delphi-Quelltext
1:
| zahlpc:=random(oben-unten+1)+unten; |
und
Delphi-Quelltext
1:
| zahlpc := random(oben-unten+1)+unten; |
Die Variablen sind alle richtig deklariert. Der Tipp des Users (tipp); die Zufallszahl des PCs (zahlpc) sowie die obere und untere Grenze (oben und unten).
Im Quellcode (s.u.) sind die beiden Fehlerhaften stellen als Kommentare ausgeschnitten um beim restlichen entwickeln des Programms nicht zu stören.
Mein Problem lautet nun, was ist an der Formel, bzw. am Syntax der von mir eingegeben Zeilen falsch? Delphi 3.0 gibt mir als Fehler an, dass an der ersten Zeile mit random(...) ein "Operator oder Semikolon fehlt", jedoch habe ich ja eins eingegeben. Des weitern sind "Inkompatible Typen" angegeben. Die selben Fehler werden auch in der zweiten "random(...)-Zeile" verursacht.
Kann mir jemand bei meinem Problem helfen? Für Rückfragen bin ich offen ;)
Danke im Vorraus,
Timo
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:
| var hilfe : integer;
begin
versuch := 0; panelversuche.caption := IntToStr(versuch);
randomize; unten := StrToInt(editunten.text); oben := StrToInt(editoben.text);
if (unten > oben) then
begin showmessage('Leider sind die Größen Falsch definiert. Werte werden getauscht.'); hilfe := unten; unten := oben; oben := hilfe;
editunten.text := IntToStr(unten); editoben.text := IntToStr(oben);
unten := StrToInt(editunten.text); oben := StrToInt(editoben.text);
showmessage('Jetz gehts!') end
else
showmessage('Jetz gehts!') end; |
jaenicke - Mi 14.12.05 20:25
Du hast die Deklaration der zahlpc nicht angegeben, deshalb: woher sollen wir wissen, wo der Fehler liegt?
Aber, wenn ich raten soll: Wahrscheinlich ist zahlpc als Integer deklariert, Random gibt aber eine Dezimalzahl, also mit Komma, zurück.
Also: Round(Random(...))
Marc. - Mi 14.12.05 20:34
jaenicke hat folgendes geschrieben: |
Du hast die Deklaration der zahlpc nicht angegeben, deshalb: woher sollen wir wissen, wo der Fehler liegt?
Aber, wenn ich raten soll: Wahrscheinlich ist zahlpc als Integer deklariert, Random gibt aber eine Dezimalzahl, also mit Komma, zurück.
Also: Round(Random(...)) |
wenns als integer wert deklariert wäre, bräuchtest es auch nicht zu runden, weils nur ganze zahlen sind :roll:
wenn du zufallszahlen willst hätte ich das wie folgt geschrieben:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16:
| procedure TForm1.Button1Click(Sender: TObject); var zahlpc, oben, unten: integer;
begin
randomize; unten := StrToInt(editunten.text); oben := StrToInt(editoben.text);
zahlpc:=random((oben-unten+1)+unten);
label1.Caption := IntToStr(zahlpc);
end; |
;) vllt hilfts dir ja
moTi05 - Mi 14.12.05 20:44
| Zitat: |
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16:
| procedure TForm1.Button1Click(Sender: TObject); var zahlpc, oben, unten: integer;
begin
randomize; unten := StrToInt(editunten.text); oben := StrToInt(editoben.text);
zahlpc:=random((oben-unten+1)+unten);
label1.Caption := IntToStr(zahlpc);
end; |
;) vllt hilfts dir ja |
Allgemein weiß ich ja wie ich die Zufallszahl generiere. Nur in diesem speziellen Beispiel scheint irgendetwas nicht zu klappen... :(
Sorry das ich es vergessen habe, "ZahlPC" ist auch eine Integer Variable.
Marc. - Mi 14.12.05 20:47
Titel: bitte löschen ... voreilig gepostet... :oops:
was klappt denn nicht? kommt ne fehlermeldung?
[edit] oh.. habs oben net ganz durchgelesen :oops:
unforgiven - Mi 14.12.05 21:02
okay...das hab ich schon mal gemacht, könnte diur jetzt den kompletten quelltext reinstellen, aber dann wäre es für dich nicht sinnvoll ^^
zu deinem problem mit randomzahlen
um aus einem bereich von zB 10-25 zahlen zu ziehen berechnest du erst mal wieviele zahlen da drinne sind (ich nehme mal an, das die schranken nicht mit dazu zählen)
also 11,12,13,14,15,16,17,18,19,20,21,22,23,24 -> wären 14 -> oben-unten-1
nun erzeugst du ein random
Delphi-Quelltext
1: 2: 3: 4: 5: 6:
| x:=Random(14); x:=Random(14)+10
y:=oben-unten-1; x:=Random(y)+unten; |
das sollte funktionieren
ich teste mal ^^
Edit: jop funzt...
Moderiert von
Gausi: BBCodes aktiviert.
BenBE - Mi 14.12.05 21:16
Es kann nicht funzen, da Du Y falsch berechnest ...
Y := Oben - Unten + 1;
moTi05 - Mi 14.12.05 21:52
Mir gehts ja nicht um die Mathematische Formel zum ausrechnen, die weiß ich mehr oder weniger selbst ;)
Viel mehr ist mein Problem, dass Delphi disesen Code, der oben steht, einfach nicht annimmt. Irgendwas will der die ganze Zeit.
>> "Inkompatibler Typ"
oder
>> "Operator oder Semikolon fehlt"
Diese Fehlermeldungen beziehen sich auf die beiden stellen mit dem random(...)
Gausi - Mi 14.12.05 22:00
Hoffentlich ist es nicht nur das...;-)
Delphi-Quelltext
1: 2: 3: 4: 5:
| x:=Random(14); x:=Random(14)+10; y:=oben-unten-1; x:=Random(y)+unten; |
unforgiven - Mi 14.12.05 22:10
BenBE hat folgendes geschrieben: |
Es kann nicht funzen, da Du Y falsch berechnest ...
Delphi-Quelltext 1:
| Y := Oben - Unten + 1; | |
nein es muss -1 heißen...da du ja die werte zwischen den schranken haben willst...und da ja a-b einen wert zu viel hat (wenn man berücksichtigt, das a und b nicht mit in der definitionsmenge sind)...
von daher stimmt die formel...
aber wie gesagt, es kann auch nurl, wie gausi bemerkt hat, an dem fehlendem semikolon bei mir liegen...
merke: der häufigste fehler ist das fehlende semikolon, also immer nach jeder zeile gucken ob da auch nen semikolon is (außer vor else) ;)
ich hab das ganze auch mal in einem langzeittest getest mit ner ListBox...und es kamen nur werte raus zwischen den schranken...bei 100 versuchen ist die wahrscheinlichkeit sehr sehr gering, das eine zahl nicht gezogen wurde...
moTi05 - Mi 14.12.05 22:35
In der bei uns gestellen Aufgabe ist es aber so das die Schrankenwerte bin einbezogen werden sollen... ^___^
*alles wieder kaputt mach*
unforgiven - Mi 14.12.05 22:42
dann lässte einfach das '-1' weg :wink:
jaenicke - Do 15.12.05 18:07
NoTVerYEvilPzYchO hat folgendes geschrieben: |
jaenicke hat folgendes geschrieben: | Du hast die Deklaration der zahlpc nicht angegeben, deshalb: woher sollen wir wissen, wo der Fehler liegt?
Aber, wenn ich raten soll: Wahrscheinlich ist zahlpc als Integer deklariert, Random gibt aber eine Dezimalzahl, also mit Komma, zurück.
Also: Round(Random(...)) |
wenns als integer wert deklariert wäre, bräuchtest es auch nicht zu runden, weils nur ganze zahlen sind :roll: |
Ok, die Version von Random mit Parameter liefert ja ein Integer, ok, Sorry!
Aber woher kommt denn dann der inkompatible Typ? Hmm...
moTi05 - Do 15.12.05 18:18
Danke für alle Antworten !
Aber das Problem hat sich mehr oder weniger von selbst gelöst.
Ich hab dummer Weiße den Button der die random(...)-Funktion auslöst auch random genannt...
Kann geschlossen werden. Danke.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!