Zum neuen Informatik-Forum >>
 FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen   RegistrierenRegistrieren   ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin 

Summe der Würfelzahlen
Gehe zu Seite 1, 2, 3  Weiter
 
Dieses Forum ist gesperrt, du kannst keine Beiträge editieren, schreiben oder beantworten.   Dieses Thema ist gesperrt, du kannst keine Beiträge editieren oder beantworten.    Informatikerboard.de Foren-Übersicht -> Pascal
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
PSM



Anmeldungsdatum: 16.02.2005
Beiträge: 7

BeitragVerfasst am: 18. Feb 2005 13:53    Titel: Summe der Würfelzahlen Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
kurellajunior
Administrator


Anmeldungsdatum: 14.02.2005
Beiträge: 214
Wohnort: Berlin-Pankow

BeitragVerfasst am: 18. Feb 2005 15:29    Titel: Re: Summe der Würfelzahlen Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
PSM



Anmeldungsdatum: 16.02.2005
Beiträge: 7

BeitragVerfasst am: 19. Feb 2005 08:47    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
PSM



Anmeldungsdatum: 16.02.2005
Beiträge: 7

BeitragVerfasst am: 19. Feb 2005 19:50    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
Pr0g



Anmeldungsdatum: 15.02.2005
Beiträge: 90
Wohnort: Düsseldorf

BeitragVerfasst am: 19. Feb 2005 20:07    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen AIM-Name
PSM



Anmeldungsdatum: 16.02.2005
Beiträge: 7

BeitragVerfasst am: 19. Feb 2005 20:34    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
Simonko



Anmeldungsdatum: 15.02.2005
Beiträge: 4

BeitragVerfasst am: 19. Feb 2005 20:53    Titel: Antworten mit Zitat

Pr0g hat Folgendes geschrieben:
Probiers mal so:
Code:

  n := 10;
  for n := 1 to n do
 


:-/
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Pr0g



Anmeldungsdatum: 15.02.2005
Beiträge: 90
Wohnort: Düsseldorf

BeitragVerfasst am: 19. Feb 2005 21:18    Titel: Antworten mit Zitat

@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 Augenzwinkern

_________________
http://webcraft.org/button_ani.gif http://ohs.pr0g.net/button_ani.gif
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen AIM-Name
Simonko



Anmeldungsdatum: 15.02.2005
Beiträge: 4

BeitragVerfasst am: 19. Feb 2005 21:31    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
kurellajunior
Administrator


Anmeldungsdatum: 14.02.2005
Beiträge: 214
Wohnort: Berlin-Pankow

BeitragVerfasst am: 20. Feb 2005 00:54    Titel: Antworten mit Zitat

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 Augenzwinkern[/code]

_________________
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Beiträge der letzten Zeit anzeigen:   
Dieses Forum ist gesperrt, du kannst keine Beiträge editieren, schreiben oder beantworten.   Dieses Thema ist gesperrt, du kannst keine Beiträge editieren oder beantworten.    Informatikerboard.de Foren-Übersicht -> Pascal Alle Zeiten sind GMT + 1 Stunde
Gehe zu Seite 1, 2, 3  Weiter
Seite 1 von 3

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.
Du kannst Dateien in diesem Forum nicht posten
Du kannst Dateien in diesem Forum nicht herunterladen