![]() |
fußballsation mathematik
bin grad meine hausaufgaben mit delphi am ausrechnen aber ich komm einfach nicht drauf wo ich den fehler im code hab
aufgabe: Ein fußballstation hat 79040 Sitzplätze. In der 1. Reihe sind 1010 Sitzplätze vorhanden, in den folgenen Reihen jeweis 20 Sitzplätze mehr. Wieviel Reihen hat das Stadion? Im lösungsbuch steht es wären 52 Reihen aber bei mir kommt immer was anderes raus
Delphi-Quellcode:
var s,i:integer;
begin S:=990; i:=0; while s<79041 do begin i:=i+1; s:=s+(i*20); end; label1.caption:=inttostr(i); end; |
AW: fußballsation mathematik
Hier ist der Fehler:
Delphi-Quellcode:
Wenn s die Gesamtanzahl der Sitze ist, würde das bedeuten:
s:=s+(i*20);
Code:
Richtig wäre es aber so:
Die 1. Reihe hat 990 Sitze
Die 2. Reihe hat 20 Sitze Die 3. Reihe hat 40 Sitze Die 4. Reihe hat 60 Sitze usw...
Code:
Die 1. Reihe hat 1010+0 Sitze
Die 2. Reihe hat 1010+20 Sitze Die 3. Reihe hat 1010+40 Sitze Die 4. Reihe hat 1010+60 Sitze usw... |
AW: fußballsation mathematik
Zitat:
Konkret: Du nimmst nur die erste Reihe voll mit - aber von den anderen nimmst du nur die "extra Plätze" mit, und vernachlässigst die 990 anderen Plätze ;) Ich habe das mal schnell auf dem Papier gemacht, da kommen auch 52 Reihen raus - insofern kann ich das Lösungsbuch bestätigen. Rechenweg:
Code:
:arrow:
n = Gesamtanzahl der Plätze
x = Anzahl der Reihen n = 990*x + x*(x+1)/2 * 20 **= 990*x + 10*x^2 + 10*x n einsetzen: 0 = 10*x^2 + 1000*x - 79040 ![]() |
AW: fußballsation mathematik
Delphi-Quellcode:
Ich habe alles nochmal überdacht und bin mit diesem queltext zu folgendem ergebnis gekommen: 53.
var s,i,o:integer;
begin S:=1010; i:=0; O:=79041; while s<O do begin if i=0 then begin s:=1010 ; i:=i+1; end else begin s:=s+(20*i)+1010 ; i:=i+1; end; end; label1.caption:=inttostr(i); end; Nah dran aber nicht perfekt ich könnte i natürlich einfach um 1 vermindern bevor ich es ausgebe aber mein Queltext erscheint mir doch als logisch. wenn ich jedoch S ausgeben will dann müsste ja normalerweisse 79040 ausgegebn werden aber das tut er nicht. |
AW: fußballsation mathematik
var s,i,o:integer;
begin S:=1010; i:=0; O:=79040; ich habe den Fehler bei der Initialisierung der Obergrenze gefunden. Jedoch ist mir nicht ganz klar warum die Obergrenze nicht um 1 erhöht werden muss wenn man das in eine while schleife reinpackt. |
AW: fußballsation mathematik
Der einfachste Lösungsweg müsste doch so sein:
Delphi-Quellcode:
var Total, Reihe, Plaetze: integer;
begin Total := 79040; Plaetze := 1010; Reihe := 0; while Plaetze <= Total do begin inc(Reihe); dec(Total,Plaetze); inc(Plaetze,20); end; end; |
AW: fußballsation mathematik
Du hast als oberes Limit 79041 gesetzt. Da 52 Reihen aber nur 79040 Sitzplätze liefern, muss noch eine her. Dein Code gibt daher 53 aus ;)
Zum warum: Du prüfst immer, ob die Anzahl an Plätzen schon reicht. Wenn nicht, wird noch eine Reihe hinzugefügt. Am Ende kommen also immer soviele Reihen raus, dass die Anzahl der Plätze gleich oder größer als die gegebene Anzahl ist. Genau wie du es dir überlegt hast bevor du den Code geschrieben hast :P @DäddyH ( :mrgreen: ) das kommt auf die Definition von "einfach" an. Insbesondere ob die Definition die Erstellung eines Delphiprogramms zu Lösung einer quadratischen Gleichung beinhaltet :P |
AW: fußballsation mathematik
ich mache mir oft programablaufpläne bei solchen aufgaben die helfen einem wirklich sehr viel weiter so dass man im nachhinein nicht mehr soviel umändern muss im programmtext wenn man einmal richtig nachgedacht hat:)
|
AW: fußballsation mathematik
War das denn jetzt eine Mathe-Aufgabe oder eine Info-Aufgabe, um ein mathematisches Problem zu lösen?
|
AW: fußballsation mathematik
Ach ja stimmt.
Ich habe das ganze programm mal umgeschriebn zu einer repeat Schleife jetzt ist es mir schlüssiger.
Delphi-Quellcode:
repeat
if i=0 then begin s:=1010 ; i:=i+1; end else begin s:=s+(20*i)+1010 ; i:=i+1; end until s=o; |
AW: fußballsation mathematik
ich hab bisschen in meinem Mathebuch rumgeblättert und habe im Kapitel "Folgen und Reihen" viele solcher aufgaben gefunden die man leicht mit Computern berechnen kann ohne dass man wissen muss wie man Zahlengesetze aufstellt. Mit Computern ist alles viel einfacher. Tolle Erfindung :wink:
|
AW: fußballsation mathematik
Zitat:
|
AW: fußballsation mathematik
Zitat:
Btw.: WolframAlpha ist in sowas echt gut - du kannst auch direkt Reihen eingeben: ![]() |
AW: fußballsation mathematik
Zitat:
|
AW: fußballsation mathematik
Also dem mathematischem Verständnis halber würde ich eine Mischung zwischem ersten Post und einem repeat bevorzugen, nur dass es halt nicht
Delphi-Quellcode:
sondern
s:=s+(i*20);
Delphi-Quellcode:
sein muss.
s:=2*s+(i*20);
//bzw. anschaulicher s:=s+(s+(i*20)); Das hat aus methodischer Sicht Vorteile, weil eine repeat-Schleife dem realen Problem am besten entspricht, denn was ist, wenn das Stadion nur eine Reihe hat? Dann hat es 0 Reihen, weil garnicht gezählt wird. Sprich mit einer repeat Schleife kann man das reale Problem einfacher (kein if nötig) mathematisch modellieren.
Delphi-Quellcode:
Die Lösung von DeddyH ist dazu - von der besseren Anpassung an ähnliche Problemstellungen - nahezu äquivalent(Bis auf das mit den 0 Reihen)
s:=990;
i:=0; repeat i:=i+1; s:=s+(i*20); until s>=79041 Das Modell mit einer while Schleife anzugehen ist methodisch also eher die zweite Wahl, aber wie das beim Programmieren immer so ist, jedem nach seiner Fasson ;) Also hast du 2 Fehler gemacht, einmal die Plätze (s) falsch abgezählt und dann, dass es 0 Reihen gibt, obwohl es doch eigentlich mind. eine geben muss wenn mind. 1 Sitz ex. Ersteres ist natürlich gravierend und würde Punktabzüge geben oder heißen Aufgabe nicht erfüllt (je nach Fach und AB) und zweiteres ist Ansichtssache. Je nachdem wie sehr dein Lehrer auf eine ordentliche Modellierung der Realität wert legt. Umgehen kann man das natürlich, indem sich rechtfertigt, dass ein Stadion mit nur einer Reihe eher seltener als Stadion bezeichnet wird. Also entweder richtig proggen oder labern, beides zeigt, dass man sich dann mit den Problem mit seinen Ecken und Kanten auseinander gesetzt hat. Davon abgesehen würde ich dir empfehlen (auch wenn Delphi/Pascal nicht casesensitive ist) Variablen immer gleich zu schreiben. Das hat Vorteile, wenn man sich mal mit anderen Sprachen beschäftigen will, die auf Groß- und Kleinschreibung achten. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:33 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz