Delphi Din A größen Rekursiv berechnen

Status
Für weitere Antworten geschlossen.

pchero

Ensign
Registriert
Juni 2006
Beiträge
170
Guten Tag

ich habe eine Frage wisst ihr wie man die DIN A Papier größen berechnen könnte in Delphi.

Meine Ansätze hatte mein Lehrer immer mit zu Iterativ und so zurückgewiesen. Leider.

Ob es nun 1 Funktion oder 2 Funktionen für die Berechnung der Länge sind ist egal. Ich habe jetzt leider momentan keinen neuen Ansatz im es komplett Rekursiv zu machen.

Ich hoffe ihr habt vill nen Ansatz oder so. Google konnte mir nicht helfen und ich steh aufm Schlauch.

Gruß
 
Was ist den gegeben? Also was ist der Input, aus dem die Funktion das Resultat berechnen soll?
 
1. Du weißt das DIN A0 841 x 1189 mm groß ist
Dies nennt man Abbruchbedingung.

2.
DIN A1 (Breite) = DIN A0 (Höhe) / 2
DIN A1 (Höhe) = DIN A0 (Breite)
Hier die Rekursion

3.
DIN A2 (Breite) = DIN A1 (Höhe) / 2
DIN A2 (Höhe) = DIN A1 (Breite)
Noch ein Rekursionschritt

Verallgemeinert heißt das:
DIN A(n) (Breite) = DIN A(n-1) (Höhe) / 2
DIN A(n) (Höhe) = DIN A(n-1) (Breite)

Das Ganze in Pseudocode:
Code:
FUNCTION PAPIER(nummer)
  WENN nummer > 0 DANN
    RETURN (Breite) = PAPIER(nummer-1) (Höhe) / 2
    RETURN (Höhe) = PAPIER(nummer-1) (Breite)
  SONST
    RETURN (Breite) = 841.0
    RETURN (Höhe) = 1189.0

Wenn man Papier(2) aufruft, dann wird geschaut ob es größer 0 ist. Um das auszurechnen müsste die Funktion wissen wie breit und hoch A1 ist, also wird Papier(1) aufgerufen. Die wiederum benötigt erst die Abmaße von A0, bevor es die Werte von A1 liefern kann. Papier(0) schließlich kann feste Werte liefern und die Ergebnisse wandern wieder "nach oben".

Wenn man kein Array als Rückgabe der Rekursionsfunktion benutzen möchte, bietet sich an 2 Funktionen eins für Höhe eins für Breite zu verwenden.
 
Zuletzt bearbeitet:
Wie wäre es mit ner schlichten Formel?

Dann brauchst du weder Rekursion noch Iteration

width-gif.126899


height-gif.126900


Die Formeln zu implementieren sollte eher weniger das Problem sein :evillol:
 

Anhänge

  • width.gif
    width.gif
    828 Bytes · Aufrufe: 1.094
  • height.gif
    height.gif
    886 Bytes · Aufrufe: 1.139
hehe Agent xD Scherzkeks xD das wäre ja net das Problem xD Aber wennd er Lehrer die Aufgabe so stellt xD :P

Gruß

habs dank pvc junkie hinbekommen in 2 Funktionen Danke
 
Wenn es eine nicht-rekursive Variante gibt, die ihre Aufgabe ebenso gut erfüllt, sollte man auf Rekursion verzichten.

Beispiel: Die Summenfunktion (1+2+3+4+5+...+n) lässt sich rekursiv definieren (sigma n = n + sigma (n-1)), aber auch durch die Formel sigma n = (n*(n+1)) / 2.

Es seidenn natürlich, man kann es endrekursiv lösen (also über eine Hilfsvariable, die das aktuelle Ergebnis übergibt... funktioniert allerdings nur in wenigen Sprachen wirklich effizient).
 
Das Rekursion langsamer als Itereation oder gar eine einzelne Formel ist, sollte wohl klar sein. Bei diesem Beispiel gehts aber ganz offensichtlich um den Lerneffekt. Irgendwie muss man ja begreifen was Rekusion ist und kapieren das eine Funktion sich selbst aufrufen kann. Da wird dann in der Schule jeder Mist per Rekursion gelöst ;)
 
...und das nächte mal die Hausaufgaben bitte selbstständig erledigen. Dass man per Google dazu nichts findet hat schlicht mit Faulheit zu tun. ;)
 
Status
Für weitere Antworten geschlossen.
Zurück
Oben