nun hatte mir mein Lehrer eine Sonderaufgabe gegeben, da ich schon als
einzigster mit den anderen Aufgaben fertig war....
aber ich check net so genau wie ich das machen soll:
Auf einem Schachbrett (8x8=64 Felder) befindet sich auf dem ersten Feld ein
Reiskorn.
Nach jedem Feld soll die Anzahl verdoppelt werden...
Auf dem ersten=1, auf dem zweiten=2, auf dem dritten=4, auf dem vierten=8
usw...
das hab ich bisher geschrieben...
PROGRAM Reis;
USES Crt;
VAR X,Y : Longint;
BEGIN
Writeln ('Es befindet sich ein Reiskorn auf einem Schachbrett, das bei
jedem');
Writeln ('Feld verdoppelt wird.');
Readln;
X:=(1); {ein Reiskorn auf dem ersten Feld}
FOR Y:=1 TO 64 DO
BEGIN
Y:=X*2;
Writeln ('Reisk"rner:',Y);
END;
END.
wäre wirklich total nett, wenn mir das ein Erfahrener als ich loesen
koennte...
Danke im Voraus,
MFG
Philipp
>PROGRAM Reis;
>
>USES Crt;
>
>VAR X,Y : Longint;
>
>BEGIN
> Writeln ('Es befindet sich ein Reiskorn auf einem Schachbrett, das bei
>jedem');
> Writeln ('Feld verdoppelt wird.');
> Readln;
> X:=(1); {ein Reiskorn auf dem ersten Feld}
> FOR Y:=1 TO 64 DO
> BEGIN
> Y:=X*2;
> Writeln ('Reisk"rner:',Y);
> END;
>
>END.
Zählst Du alle Reiskörner oder willst Du wissen, wieviele Körner auf
dem 64. Feld liegen? Ein Fehler ist, daß Du in der FOR-Schleife die
Schleifenvariable Y statt X änderst.
Das nächste Problem: Die LongInt-Variable kann nur Werte bis ca. 2
hoch 31 aufnehmen - das Ergebnis ist aber viel größer. Deswegen
solltest Du für das Ergebnis (nicht jedoch für die Schleifenvariable
Y) einen Typ wie Real (oder etwas anderes Großes) nehmen.
Außerdem glaube ich, daß Du die Schleife nur 63-mal durchlaufen mußt.
Das hängt aber von der genauen Aufgabenstellung ab und was Du wie
zusammenzählst. Du kannst das ja mit einer kleineren Feldanzahl
durchrechnen, wenn der Rest läuft.
Gruß,
Marco
na, dann laß mal sehen... <ggggg>
>
>Auf einem Schachbrett (8x8=64 Felder) befindet sich auf dem ersten Feld
ein
>Reiskorn.
>Nach jedem Feld soll die Anzahl verdoppelt werden...
>Auf dem ersten=1, auf dem zweiten=2, auf dem dritten=4, auf dem
vierten=8
>usw...
>
>das hab ich bisher geschrieben...
>
>
>PROGRAM Reis;
>
>USES Crt;
>
>VAR X,Y : Longint;
welche Datentypen außer longint kennst du noch? Das wird am Ende sowas
von verdammt groß (sorry, jetzt hab ich die Lösung schon verraten lol),
daß ich nen real (oder wenn du alle stellen haben willst, nen extended
wählen würde)
>BEGIN
> X:=(1); {ein Reiskorn auf dem ersten Feld}
> FOR Y:=1 TO 64 DO
> BEGIN
> Y:=X*2;
damit legst du doch auf jedes Feld nur die doppelte Anzahl Reiskörner
der "Feldnummer". Wenn Du die Reiskörner nach jedem Feld verdoppelt
haben willst, mußt du x=x*2 rechnen, hast dann aber auch nur die Felder,
die auf diesem Feld liegen. Sollen alle Reiskörner aufsumiert werden,
brauchst du eine dritte Variable beispielsweise summe, die mit 0
initialisiert wird und zu der das x in jedem Schleifendruchlauf addiert
wird.
--anderer Ansatz----------------
Mit nem bißchen Hirnschmalz kann man das auch ganz ohne Schleife lösen:
Auf dem n'ten Feld liegen 2^(n-1) Reiskörner: auf dem 1 Feld 2^0=1, auf
dem 2. 2^1=2 etc. auf dem 64. 2^63=was verdammt großes <ggg>. Jetzt
willst Du aber nicht wissen, wie viele Körner auf dem 64 Feld liegen,
sondern auf allen Feldern.
Fangen wir klein an: auf 2 Feldern liegen 2^0 + 2^1 = 3 =2^2-1
Reiskörner... wenn man das mit nen paar Feldern durchprobiert, wirst du
feststellen, daß auf n Feldern (2^n)-1 Reiskörner liegen (Wenn Du mal
Zeit _und_ Lust hast, kannste das ja mit vollst. Induktion beweisen lol)
hth, klausi
[...]
> BEGIN
> X:=(1); {ein Reiskorn auf dem ersten Feld}
warum klammerst du die Zahl? Das ist nicht notwendig.
> FOR Y:=1 TO 64 DO
> BEGIN
> Y:=X*2;
Y ist deine Laufvariable in der FOR-Schleife. Wenn du die veränderst,
ändert sich damit auch das Verhalten der Schleife.
In deinem Fall wird eine Endlosschleife draus. Y wird durch X*2 immer
wieder auf 2 gesetzt. X bleibt ja auf 1 stehen. Wenn ein erneuter
Schleifendurchlauf beginnt, wird Y um eins inkrementiert (erhöht). 3 ist
kleiner als 64 also weiter. Y wieder auf 2, ..... Problem erkannt?
Wahrscheinlich wolltest du X stattdessen verwenden.
> Writeln ('Reisk"rner:',Y);
Hier dann auch X statt Y
Gunar
P.S. Zusatzfrage: Ist die Reiskornaufgabe im wahren Leben lösbar?
Begründe deine Antwort! :-)
/A: Es gibt genug Reis...
so far, scnr, klausi
Am Wed, 8 Sep 1999 11:18:20 +0200 schrieb "Klaus Loerke"
<klaus....@muenster.de> gleich fünfmal:
Wirklich so viel Reis, daß er nicht in ein Posting paßte, sondern es
gleich fünf sein mußten?
Es gibt Reis, Baby ...
>[Umsetzung Chinesischer Legende]
>
>PROGRAM Reis;
>
>USES Crt;
>
>VAR X,Y : Longint;
>
>BEGIN
> Writeln ('Es befindet sich ein Reiskorn auf einem Schachbrett,
> das bei
>jedem');
> Writeln ('Feld verdoppelt wird.');
> Readln;
> X:=(1); {ein Reiskorn auf dem ersten Feld}
> FOR Y:=1 TO 64 DO
> BEGIN
> Y:=X*2;
> Writeln ('Reisk"rner:',Y);
> END;
>
>END.
Hier ist ein Denkfehler:
In der for-to-Schleife wird bei jedem Durchgang die Zähler-Variable X*2, also 2
zugewiesen, da sich X ja nicht ändert. Somit kann Y nie 64 erreichen => Endlos-
Schleife.
Es müßte also heißen:
...
X := 1; { Die Klammern in Deiner Version brauchst Du nicht }
for Y := 1 to 65 do { Schreib' es lieber so, denn so bekommst Du }
begin { auch wirklich alles zwischen 1 und 2^64 }
writeln('Körner: ', X); { angezeigt }
X := X * 2;
end;
...
mfg,
S. Suchanek
--
=> visit my homepage at http://homepage.main-echo.net/~Suchanek <=
"There are a lot of sick people in this town"
- The Red Guy (Cow & Chicken) finding a superhero suit labeled
"Corn Cob Man"
sorry, mein M$ hat mal wieder müll gebaut
so far, klausi
Klaus Loerke schrieb am 08 Sep 1999:
>>P.S. Zusatzfrage: Ist die Reiskornaufgabe im wahren Leben
>>lösbar? Begründe deine Antwort! :-)
>
>/A: Es gibt genug Reis...
Aber kein Schachbrett, das groß genug wäre...
Christian "NineBerry" Schwarz
sicher? geschätzt 1,8*10^12 Tonnen Reis, alleine auf dem letzten Feld.
Wer sagt denn, das die Lösung unbedingt im Dezimalsystem gegeben werden
muß?
Und ich bin eh immer dafür, die Lösung so anzugeben, daß man die
Struktur der Lösung/des Problems noch erkennen kann. Die Länge einer
Diagonalen im Quadrat der Seitenlänge 1 ist nunmal _genau_ sqrt(1) und
nicht ungefähr 1.4142....
Und die Lösung als Dualzahl hab ich nur angegeben, um ohne groß
nachzurechnen zu zeigen, daß nen Comp eben nicht ausreichend ist, das
Reiskornproblem zu lösen. (Ich bin nämlich verdammt faul <ggggg>)
*quengel:keinerverstehtmich*
so far, scnr, klausi
lol
Ich sagte doch: _Annahme_: Es gibt genug Reis...
Nimms mir nicht übel... war ne verballhornung eines Mathematikerwitzes..
so far, klausi
--
mehr davon nachzulesen auf www.muenster.de/~klaus
hab ich sqrt(1) geschrieben? es muß natürlich sqrt(2) heißen, sorry.
klausi
Jetzt steh ich daneben. Ich habe das für eine grandiose Idee gehalten.
Das war keineswegs süffisant gemeint, sondern wirklich als heureka!
Es gibt bei der NG - posterei ein Problem mit den smileys: es bedeutet
einerseits sowas wie 1. das ist nicht ernst gemeint und 2. ätsch und
3. das ist nicht offensiv gemeint.
Irgendwie hat das mit der großen Empfindlichkeit der jungen Leute
zu tun, die zwar gern ein wenig groß daherreden und auch nicht
zimperlich sind, eine freche Lippe zu zeigen, aber recht schnell
eingeschnappt sind, wenn ein Lüftlein weht.
:-) (Bedeutung: das ist nicht offensiv gemeint)
--
Franz Glaser, Glasau 3, A-4191 Vorderweissenbach Austria +43-7219-7035-0
Muehlviertler Elektronik Glaser. Industrial control and instrumentation
http://members.eunet.at/meg-glaser/ http://members.xoom.com/f_glaser/
http://www.geocities.com/~franzglaser/ http://start.at/bedarf
Vielleicht hät' ich auch nen Smiley daneben malen sollen... Naja, ich
hab das für so offensichtlich und trivial gehalten, daß ich Dein Posting
als Grund (eben weil _ich_ es als süffisant aufgefaßt habe und die
Schleife das noch sehr verstärkt hat *schulterzuck*) sah, mich zu
rechtfertigen :-) (<-- nicht offensiv gemeint)
Naja, und diese Lösung ist wirklich ganz außerordentlich "grandios" lol.
Kodiert sie doch direkt ablesbar sowohl das Problem als auch seine
Lösung. *miraufdieschulterklopf* ;-)
>Irgendwie hat das mit der großen Empfindlichkeit der jungen Leute
>zu tun, die zwar gern ein wenig groß daherreden und auch nicht
>zimperlich sind, eine freche Lippe zu zeigen, aber recht schnell
>eingeschnappt sind, wenn ein Lüftlein weht.
Moment, ich und empfindlich? Ich war nicht eingeschnappt oder sowas!
Auch wenn ich - ganz offen gesagt - Dein Posting etwas anders aufgefaßt
habe: "Da kommt so nen junger Spunt daher, erzählt das offensichtlichste
und meint, nen großen Wurf gelandet zu haben" :-) (<-- das ist auch
_nicht_ offensiv gemeint lol)
naja, schwamm drüber...
Auf weitere Mißverständnisse :-) (<-- Ironie lol), klausi
> Moment, ich und empfindlich? Ich war nicht eingeschnappt oder sowas!
> Auch wenn ich - ganz offen gesagt - Dein Posting etwas anders aufgefaßt
> habe: "Da kommt so nen junger Spunt daher, erzählt das offensichtlichste
> und meint, nen großen Wurf gelandet zu haben" :-) (<-- das ist auch
> _nicht_ offensiv gemeint lol)
Und ich war so stolz auf die String-Konstante '2^'. Mit einem
süffisanten Hintergedanken an die "C" - Programmierer, die sich da
mit Doppelsternchen herumschlagen müssen (ähnlich wie das auch in
Basic geregelt war, wenn ich mich recht erinnere). Und ich hätte
gern das Gesicht des Lehrers gesehen, der womöglich selber in
Pascal nur radebrecht. :-)
> Auf weitere Mißverständnisse :-) (<-- Ironie lol), klausi
MfG
BASIC: a = x^y
Mein Gott, wie die Zeit vergeht...
Dann war's wohl ALGOL, wo ich das ** herhabe :-)
>Und ich war so stolz auf die String-Konstante '2^'. Mit einem
>süffisanten Hintergedanken an die "C" - Programmierer, die sich da
>mit Doppelsternchen herumschlagen müssen (ähnlich wie das auch in
>Basic geregelt war, wenn ich mich recht erinnere).
Oh jaaaaa, jetzt wo du's sagst... Das ist wirklich eine ganz
außerordentliche Leistung, so eine String-konstante zu benutzen lol ;-)
Und im Gegensatz zu den mir bekannten Basic-Dialekten (lang, lang ist's
her...) kennt tp von haus aus keine Potenzen :-(
> Und ich hätte
>gern das Gesicht des Lehrers gesehen, der womöglich selber in
>Pascal nur radebrecht. :-)
Hilf mir bitte auf die Sprünge, aber das Wort radebrechen ist mir
gänzlich unbekannt *unschuldigumguck*
so far, klausi
Denke ich nicht. Es sind 9'223'372'036'854'775'808 Körner auf dem 64. Feld,
alle Felder trägen zusammen also 18'446'744'073'709'551'615 Körner. Unter
der Annahme das 40 Korn Reis 1 Gramm schwer sind (das sollte ja nicht
übertrieben sein), so macht das doch noch 461'168'601'842'738.79 Kilogramm
Reis...
Ich bin ziemlich sicher das dies die Weltjahresernte an Reis übertrifft, und
ich bin mir sicher das nicht so viel Reis gelagert wird.
--
Arsène von Wyss - avon...@gmx.net
Pascal, Delphi & Personal stuff: http://bsn.ch/avonwyss
Programming Contest Problems Archive: http://bsn.ch/contest
Webmaster von Roger's Equine Pages: http://bsn.ch/pferde
> > /A: Es gibt genug Reis...
>
> Denke ich nicht. Es sind 9'223'372'036'854'775'808 Körner auf dem 64. Feld,
> alle Felder trägen zusammen also 18'446'744'073'709'551'615 Körner. Unter
> der Annahme das 40 Korn Reis 1 Gramm schwer sind (das sollte ja nicht
> übertrieben sein), so macht das doch noch 461'168'601'842'738.79 Kilogramm
> Reis...
Laut Fischer Weltalmanach lag die Weltproduktion von Reis 1994
bei 539'437'000'000 Kilogramm.
Alle Felder zusammen trage also ca. 850 (!) Jahresernten.
> Ich bin ziemlich sicher das dies die Weltjahresernte an Reis übertrifft, und
> ich bin mir sicher das nicht so viel Reis gelagert wird.
ACK
Sebastian
Leider hat mein M$ rausspuck hier Mist gebaut, und das Posting gleich
fünf mal auf den Server geschickt. Deswegen stell ich mich hier noch mal
richtig :-)
Das ganze war die Verballhornung eines Mathematikerwitzes:
Annahme: Es gibt genug Reis... (bitte lachen sie _jetzt_ *gggggggggg*)
so far, klausi
am Sat, 11 Sep 1999 um 09:21:23 Uhr schrieb Klaus Loerke:
>>> /A: Es gibt genug Reis...
> Leider hat mein M$ rausspuck hier Mist gebaut, und das Posting gleich
> fünf mal auf den Server geschickt.
Und du hast auch ganz bestimmt nicht 5x auf den Knopf gedrückt... :-)
> Das ganze war die Verballhornung eines Mathematikerwitzes:
> Annahme: Es gibt genug Reis... (bitte lachen sie _jetzt_ *gggggggggg*)
Tja, diese Kurzschreibweisen. Für mich steht A: normalerweise für "Antwort"
(oder für das Diskettenlaufwerk, aber das kam ja nicht in Frage), und der
vorgestellte Schrägstrich für Negierung (¬A). Insofern hatte ich deine
Feststellung für richtig gehalten...
- Sebastian
--
Alles über das Raumfahrtzentrum Windischeschenbach:
http://www.bastisoft.de/
*lol* Unglaublich ich hab jetzt 2 Tage gebraucht bis ich das mit der
Annahme kapiert hab.
Matthias
*lol* Unglaublich ich hab jetzt 2 Tage gebraucht bis ich das mit der
Annahme kapiert hab.
"besser spät als nie" oder auch (etwas schnippischer) "Bei manchen fällt
der Groschen eben pfennigweise" ;-)
/A: Zeit spielt keine Rolle
so far, klausi
ganz bestimmt nicht! (iirc gab es "damals" aber probleme mit der
Verbindung zu meinem Server...)
>> Das ganze war die Verballhornung eines Mathematikerwitzes:
>> Annahme: Es gibt genug Reis... (bitte lachen sie _jetzt_
*gggggggggg*)
>
>Tja, diese Kurzschreibweisen. Für mich steht A: normalerweise für
"Antwort"
>(oder für das Diskettenlaufwerk, aber das kam ja nicht in Frage),
lol
>und der
>vorgestellte Schrägstrich für Negierung (¬A)
dann hätte ich doch den Haken davor, nen strich darüber oder nen "non"
davorgesetzt... afaik bedeutet /A Annahme.... *schulterzuck*:
/A: /A bedeutet Annahme.
so far, klausi