Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
PSM
Anmeldungsdatum: 16.02.2005 Beiträge: 7
|
Verfasst am: 18. Feb 2005 13:53 Titel: Summe der Würfelzahlen |
|
|
Hallo zusammen,
ich möchte ein Programm schreiben, das mit der RANDOM-Funktion Würfelzahlen solange wählt und addiert, bis eine Würfelzahl 3 ist ("Verflixte Drei"). Mein Programm funktioniert zwar, aber ich bezweifle, dass es richtig ist, da die Summe S bisher nie über 9 hinausgegangen ist.
a und b sind in diesem Programm die Würfelzahlen von 1-6:
randomize;
WHILE (a<>3)AND(b<>3) DO
BEGIN
a:=random(6)+1;
b:=random(6)+1;
S:=a+b;
END;
write(S);
Wenn a oder b 3 ist, wird sie dann zur Summe mitgezählt?
Was ist an dem Programm falsch?
Grüße. |
|
Nach oben |
|
|
|
kurellajunior Administrator
Anmeldungsdatum: 14.02.2005 Beiträge: 214 Wohnort: Berlin-Pankow
|
Verfasst am: 18. Feb 2005 15:29 Titel: Re: Summe der Würfelzahlen |
|
|
Hallo,
Dur errechnest nur die letzte Summe! und ja, wenn eins drei ist würde das zu gezählt. Daher auch nir über Neun, Da Abbruch nur erfolgt wenn ein Würfel 3 ist und 3 + 6 = 9!
Probiers so:
Code: | randomize;
WHILE (a<>3)AND(b<>3) DO
BEGIN
a:=random(6)+1;
b:=random(6)+1;
S:=S+a+b;
END;
S:=S-a-b // den Dreierwurf wieder wegnehmen
write(S); |
oder optimaler
Code: |
a:=0;
b:=0:
randomize;
WHILE (a<>3)AND(b<>3) DO
BEGIN
S:=S+a+b;
a:=random(6)+1;
b:=random(6)+1;
END;
write(S); |
Alles klar? _________________
|
|
Nach oben |
|
|
PSM
Anmeldungsdatum: 16.02.2005 Beiträge: 7
|
Verfasst am: 19. Feb 2005 08:47 Titel: |
|
|
Hallo kurellajunior,
ich habe die Programme schon verstanden - danke!
Vielleicht werde ich mich nochmal melden, da ich das Programm noch erweitern will.
Grüße. |
|
Nach oben |
|
|
PSM
Anmeldungsdatum: 16.02.2005 Beiträge: 7
|
Verfasst am: 19. Feb 2005 19:50 Titel: |
|
|
Hallo!
Heute habe ich versucht, das Programm so zu erweitern, dass er den Mittelwert m von den Summen S berechnet.
(Ich versuche mit einem Programm diese Aufgabe zu lösen: https://www.mathekalender.de/aufgaben/19/19.php )
Er soll die Gesamtsumme von 1 bis n berechnen und die Gesamtsumme durch n teilen. Leider ist mir das misslungen. Den Fehler habe ich hier gefunden (das Programm habe ich hier verkürzt):
a:=0;
b:=0:
randomize;
FOR n:=1 TO n DO
BEGIN
WHILE (a<>3)AND(b<>3) DO
BEGIN
S:=S+a+b;
a:=random(6)+1;
b:=random(6)+1;
END;
writeln(S);
Bereits hier schreibt er immer das gleiche S, was er natürlich nicht soll. Er soll jedes mal ein S aus den Zufallszahlen a und b berechnen.
Wie kann ich diesen Fehler beheben?
Grüße. |
|
Nach oben |
|
|
Pr0g
Anmeldungsdatum: 15.02.2005 Beiträge: 90 Wohnort: Düsseldorf
|
Verfasst am: 19. Feb 2005 20:07 Titel: |
|
|
Probiers mal so:
Code: | program drei;
uses
crt;
var
a, b, n, s, g: Integer;
tmp: String;
begin
g := 0; { Gesamtsumme }
n := 10;
Randomize;
for n := 1 to n do
begin
a := 0;
b := 0;
s := 0;
while (a <> 3) and (b <> 3) do
begin
Inc(s, a + b);
a := Random(6) + 1;
b := Random(6) + 1;
end;
Inc(g, s);
WriteLn(s);
end;
str(g div n, tmp);
WriteLn('Mittelwert: ' + tmp);
ReadLn;
end. |
_________________ http://webcraft.org/button_ani.gif http://ohs.pr0g.net/button_ani.gif |
|
Nach oben |
|
|
PSM
Anmeldungsdatum: 16.02.2005 Beiträge: 7
|
Verfasst am: 19. Feb 2005 20:34 Titel: |
|
|
Hallo Pr0g,
danke für deine Antwort.
Ich habe aber eine Frage:
Was bedeuten die Funktionen 'Inc' und 'str'? Die habe ich noch nie gesehen.
Grüße. |
|
Nach oben |
|
|
Simonko
Anmeldungsdatum: 15.02.2005 Beiträge: 4
|
Verfasst am: 19. Feb 2005 20:53 Titel: |
|
|
Pr0g hat Folgendes geschrieben: | Probiers mal so:
Code: |
n := 10;
for n := 1 to n do
|
|
:-/ |
|
Nach oben |
|
|
Pr0g
Anmeldungsdatum: 15.02.2005 Beiträge: 90 Wohnort: Düsseldorf
|
Verfasst am: 19. Feb 2005 21:18 Titel: |
|
|
@PSM: Mit Inc() kannst du eine Variable um eins erhöhen oder optional einen zweiten Parameter angeben, dann wird die Variable um dessen Wert erhöht. Anders herum gehts mit Dec(). Inc wird vom Compiler besser optimiert, als wenn man die Variable selber erhöht (wenn ich es recht in Erinnerung habe).
Die Variable g, bzw. dann der Wert "g div n" ist ja ein Integer, in der Ausgabe mit WriteLn() wird aber ein String erwartet, daher muss dieser vorher umgewandelt werden.
@Simonko: Ich habe in der Schleife die Variable n belassen (auch wenn es in meinem Code dann nicht viel Sinn macht), da PSM es in seinem Code so gemacht hat (vielleicht ließt er n vom Benutzer ein, oder was auch immer). Jedenfalls kann er meinen Code dann leichter bei sich übernehmen _________________ http://webcraft.org/button_ani.gif http://ohs.pr0g.net/button_ani.gif |
|
Nach oben |
|
|
Simonko
Anmeldungsdatum: 15.02.2005 Beiträge: 4
|
Verfasst am: 19. Feb 2005 21:31 Titel: |
|
|
Die prozedur writeln kann auch Zahlen ausgeben. Sie müßen nicht extra vorher in string
umgewandelt werden.
Code: |
var
a,b,anz,i,s : INTEGER;
gesamt : REAL;
BEGIN
clrscr;
gesamt:=0;
anz:=10;
randomize;
FOR i:=1 TO anz DO
BEGIN
a:=0;
b:=0;
s:=0;
WHILE (a<>3) AND (b<>3) DO
BEGIN
a:=random(6)+1;
b:=random(6)+1;
s:=s+a+b;
END;
s:=s-a-b;
gesamt:=gesamt+s;
END;
gesamt:=gesamt/anz;
writeln(gesamt);
END.
|
|
|
Nach oben |
|
|
kurellajunior Administrator
Anmeldungsdatum: 14.02.2005 Beiträge: 214 Wohnort: Berlin-Pankow
|
Verfasst am: 20. Feb 2005 00:54 Titel: |
|
|
Um Deine ursprüngliche Frage zu beantwroten:
PSM hat Folgendes geschrieben: | Den Fehler habe ich hier gefunden (das Programm habe ich hier verkürzt):
a:=0;
b:=0:
randomize;
FOR n:=1 TO n DO
BEGIN
Bereits hier schreibt er immer das gleiche S, was er natürlich nicht soll |
Wenn Du ihn doch aber nur von n bis n Zählen lässt? Zusammen mit den anderen Anregungen wirds Dir sicher gelingen [/code] _________________
|
|
Nach oben |
|
|
|