Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
PSM
Anmeldungsdatum: 16.02.2005 Beiträge: 7
|
Verfasst am: 20. Feb 2005 13:58 Titel: |
|
|
Hallo @all!
Danke für eure Antworten.
Zitat: | Wenn Du ihn doch aber nur von n bis n Zählen lässt? |
Upps!
Hab den Fehler behoben:
FOR i:=1 TO n DO ....
Zuerst habe ich so bei n=100.000 immer 0 erhalten, was sehr merkwürdig war. Nun habe ich statt 'integer' die Funktion 'longint' verwendet.
Jetzt liefert mein Programm zufriedenstellende Ergebnisse. Zwar nicht 18, aber immerhin um die 16 (+-1) (bei größeren n).
Kann es sein, dass das Programm bei 'integer' für große n nicht mehr richtig funktioniert?
Danke für eure Hilfestellungen!
Grüße. |
|
Nach oben |
|
|
|
kurellajunior Administrator
Anmeldungsdatum: 14.02.2005 Beiträge: 214 Wohnort: Berlin-Pankow
|
Verfasst am: 20. Feb 2005 14:52 Titel: |
|
|
PSM hat Folgendes geschrieben: | Hallo @all!
Kann es sein, dass das Programm bei 'integer' für große n nicht mehr richtig funktioniert? |
Doch doch, es macht nur, was Du ihm sagst
Aber leider ist integer bei Pascal sehr klein und wenn Du den Bereich übershreitest, dann wertet er das als negative Zahl... Den Rest kannst Du dir denken.
Jan _________________
|
|
Nach oben |
|
|
Simonko
Anmeldungsdatum: 15.02.2005 Beiträge: 4
|
Verfasst am: 20. Feb 2005 16:57 Titel: |
|
|
Wie kurellajunior schon sagte wenn man den berreich überschreitet fängts von hinten wieder an. Integer zahlen gehen von -32768 bis 32767 |
|
Nach oben |
|
|
PSM
Anmeldungsdatum: 16.02.2005 Beiträge: 7
|
Verfasst am: 20. Feb 2005 18:02 Titel: |
|
|
Das erklärt natürlich, weshalb das Progamm bei sehr großen n nicht mehr richtige Ergebnisse geliefert hat...
Grüße. |
|
Nach oben |
|
|
Toxman
Anmeldungsdatum: 15.02.2005 Beiträge: 42 Wohnort: Freiburg i. Brsg.
|
Verfasst am: 20. Feb 2005 20:43 Titel: |
|
|
@ Simonko:
Von welchem Integer redest du? Bei mir [D6] hab ich Integer von -2147483648..2147483647. Dein Bereich würde einem Smallint entsprechen.
Wenn der Bereich überschritten worden wäre, dürfte nicht immer 0 rauskommen, das sieht eher nach einem Code-Fehler aus.
Warum werden eigentlich immer 2 Zahlen gewürfelt, die von 3 verschieden sein müssen? Davon steht in der Aufgabe nichts. |
|
Nach oben |
|
|
Pr0g
Anmeldungsdatum: 15.02.2005 Beiträge: 90 Wohnort: Düsseldorf
|
Verfasst am: 20. Feb 2005 21:55 Titel: |
|
|
@Toxman: Der Integer in Delphi entspricht auch einen LongInt aus Pascal:
Code: | ┌───────────────────── Help ─────────────────────┐
│ ** Integertypen ** │
│ │
│ Turbo Pascal bietet fünf vordefinierte │
│ Integertypen mit jeweils verschiedenen │
│ Wertebereichen: │
│ │
│ Typ Wertebereich Größe │
│ ------------------------------------------ │
│ ShortInt -128..127 8 Bit │
│ Integer -32768..32767 16 Bit │
│ LongInt -2147483648..2147483647 32 Bit │
│ Byte 0..255 8 Bit │
│ Word 0..65535 16 Bit │
│ │
│ Alle Integertypen sind ordinal. │
└────────────────────────────────────────────────┘ |
_________________ http://webcraft.org/button_ani.gif http://ohs.pr0g.net/button_ani.gif |
|
Nach oben |
|
|
Toxman
Anmeldungsdatum: 15.02.2005 Beiträge: 42 Wohnort: Freiburg i. Brsg.
|
Verfasst am: 20. Feb 2005 22:33 Titel: |
|
|
ende:=15; {oder 16 oder 18 oder ab wann man eben anhalten willl}
Code: | Function Spiel(const ende: integer): integer;
var
ges,a: integer;
begin
a:=0;
ges:=0;
a:= random(5)+1;
if a=3 then
begin
result:=0;
exit;
end;
while a <> 3 do
begin
inc(ges,a);
if ges>= ende then // Überprüfung ob angehalten werden soll
begin
result:=ges;
break; // Die Schleife wird verlassen
end;
a:= random(5)+1; // neuer Wurf.
end;
if ges < ende then // Würfeln wurde abgebrochen
result:= 0;
end; |
Diese Funktion am Besten in einer Schleife über alle Stop-Werte laufen lassen, jeweils die Summe der Ergebnisse bilden, Durchschnitt bilden, ausgeben lassen und fertig sein. Zeig doch mal dein fertiges Programm, würd mich mal interessieren, wie groß die Unterschiede zwischen den Stopp-Werten sind.
// ungetestet ! Sollte aber laufen
// STop durch ende ersetzt, Break statt exit, Verbesserung der ersten Abfrage
Zuletzt bearbeitet von Toxman am 21. Feb 2005 17:41, insgesamt 2-mal bearbeitet |
|
Nach oben |
|
|
Simonko
Anmeldungsdatum: 15.02.2005 Beiträge: 4
|
Verfasst am: 21. Feb 2005 10:21 Titel: |
|
|
Toxman, break, halt und stop sollte man vermeiden, da es unsauberes programmieren ist. Man sollte das Problem auf höherer Ebene lösen. |
|
Nach oben |
|
|
kurellajunior Administrator
Anmeldungsdatum: 14.02.2005 Beiträge: 214 Wohnort: Berlin-Pankow
|
Verfasst am: 21. Feb 2005 10:24 Titel: |
|
|
@Simonko "stop" soll hier eine Variable sein! Also vielleicht kein reserviertes Wort als variable? _________________
|
|
Nach oben |
|
|
Gast
|
Verfasst am: 21. Feb 2005 10:30 Titel: |
|
|
Toxman schrieb
exit; // Die Schleife wird verlassen |
|
Nach oben |
|
|
|