| Autor |
Beitrag |
moTi05
Hält's aus hier
Beiträge: 5
Win XP SP2
In der Schule: Delphi 3.0
|
Verfasst: Mi 14.12.05 20:19
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
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
      
Beiträge: 19346
Erhaltene Danke: 1754
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: 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.
      
Beiträge: 1876
Erhaltene Danke: 129
Win 8.1, Xubuntu 15.10
|
Verfasst: 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
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 
Hält's aus hier
Beiträge: 5
Win XP SP2
In der Schule: Delphi 3.0
|
Verfasst: Mi 14.12.05 20:44
|
|
Marc.
      
Beiträge: 1876
Erhaltene Danke: 129
Win 8.1, Xubuntu 15.10
|
Verfasst: 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 
|
|
unforgiven
      
Beiträge: 46
Win XP
Delphi 2005 Prof.
|
Verfasst: 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.
_________________ Ein Programm ist nur so gut, wie der Programmierer.
|
|
BenBE
      
Beiträge: 8721
Erhaltene Danke: 191
Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
|
Verfasst: Mi 14.12.05 21:16
Es kann nicht funzen, da Du Y falsch berechnest ...
Y := Oben - Unten + 1;
_________________ Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
|
|
moTi05 
Hält's aus hier
Beiträge: 5
Win XP SP2
In der Schule: Delphi 3.0
|
Verfasst: 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
      
Beiträge: 8554
Erhaltene Danke: 481
Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
|
Verfasst: Mi 14.12.05 22:00
_________________ We are, we were and will not be.
|
|
unforgiven
      
Beiträge: 46
Win XP
Delphi 2005 Prof.
|
Verfasst: 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...
_________________ Ein Programm ist nur so gut, wie der Programmierer.
|
|
moTi05 
Hält's aus hier
Beiträge: 5
Win XP SP2
In der Schule: Delphi 3.0
|
Verfasst: 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
      
Beiträge: 46
Win XP
Delphi 2005 Prof.
|
Verfasst: Mi 14.12.05 22:42
dann lässte einfach das '-1' weg 
_________________ Ein Programm ist nur so gut, wie der Programmierer.
|
|
jaenicke
      
Beiträge: 19346
Erhaltene Danke: 1754
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: 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 |
Ok, die Version von Random mit Parameter liefert ja ein Integer, ok, Sorry!
Aber woher kommt denn dann der inkompatible Typ? Hmm...
|
|
moTi05 
Hält's aus hier
Beiträge: 5
Win XP SP2
In der Schule: Delphi 3.0
|
Verfasst: 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.
|
|
|