Entwickler-Ecke
Algorithmen, Optimierung und Assembler - Rekursion....DIN A0 bis A7
meisterjoda - Do 02.06.05 13:45
Titel: Rekursion....DIN A0 bis A7
also ich muss heut nochn programm fertich machen....
es geht darum alle a0-a7 formate in einem memo auszugeben....aber es muss als rekursion gemacht sein
so fang ich erstmal an...dann muss ich irgendwie..imma jeweils die größere seite halbieren und in nem meo ausgeben aber geordnet,...keine ahnung wie ich das hinbekommen soll
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16:
| function (a0h,a0b:real):real; begin
end;
procedure TForm1.Button1Click(Sender: TObject); var a0h,a0b:real;
begin a0h:=121.2; a0b:=86.4;
end; |
ich komm damit nicht klar..kann mir einer helfen ?
a0h is die höhe von a0...a0b die breite
Christian S. - Do 02.06.05 13:47
Hallo!
Bitte ändere den Titel des Topics, da er wenig über das eigentlich Thema verrät. Hier der entsprechende Absatz aus den Delphi-Forum.de Richtlinien:
Richtlinien: |
1.2 Beiträge
Bitte formuliere den Betreff Deiner Beiträge so, dass andere Mitglieder anhand dieser bereits das eigentliche Thema festmachen können. Beiträge wie etwa "Eine Anfängerfrage" oder "Weiß jemand, wie das geht?" lassen den Leser im Unklaren darüber, was das Thema der Diskussion ist.[...]
|
Einfach oben bei Deinem ersten Beitrag auf

klicken und den Titel ändern. Dank Dir!
Grüße
Christian :-)
deccer - Do 02.06.05 13:47
kurz gefragt - HÄ????
ich versteh kein wort von dem was du von uns willst
jasocul - Do 02.06.05 14:08
Er meint Papierformate DIN A0 bis DIN A7.
Solange er aber den Titel nicht ändert, gibts von mir keine Info.
deccer - Do 02.06.05 14:15
jetzt ergibts auch einen sinn :)
bocholito - Do 02.06.05 14:21
Hausaufgabe?
soviel ich weiss ist DIN A4 296 x 210 mm. Also A0=1184 x 840 und A7=105x74.
Dann musst du halt bei einer Seite anfangen die Funktion aufzurufen und das andere Ende als abbruchbedingung der Rekursion definieren.
Deine Hausaufgabe solltest du aber trotzdem selber machen.
deccer - Do 02.06.05 14:24
er brauch ja blos bei A0 anfangen und dann immer nur die breite/höhe zu halbieren ... oder?
zwei a1 ergeben ein a0
zwei a2 ergeben ein a1
zwei a3 ergeben ein a2
...
bocholito - Do 02.06.05 14:31
Quelltext
1: 2: 3:
| hilf := h; h := b; b := hilf/2; |
musst du aber trotzdem wissen wann er sich selbst nicht mehr aufrufen darf, nämlich wenn h=105
jasocul - Do 02.06.05 14:34
Von Groß nach klein funktioniert es wie folgt:
Die Höhe des kleineren ist gleich der Breite des größeren Formats.
Die Breite des kleineren ist gleich der Höhe durch Wurzel aus 2.
Blackheart - Do 02.06.05 14:46
DIN A Papierformate [ DIN-Norm 476, Vorzugsreihe A, beschnitten ]
Norm für Papierformate, die durch das Deutsche Institut für Normung e.V. (DIN) 1922 in der DIN-Norm 476 festgelegt wurde. Alle A-Formate haben ein Seitenverhältnis von der Seitenlänge zur Diagonallänge eines Quadrats, also ein Verhältnis 1 zu Wurzel aus 2, was einem Seitenverhältnis 1:1,414 entspricht. Dadurch ist es möglich, einen DIN A0-Papierbogen (entspricht einem Quadratmeter) verlustfrei zu teilen. Das Verhältnis Breite zu Höhe beträgt immer 5:7.
DIN-A Formate (beschnittenes Format, Breite x Höhe) in Millimeter:
DIN A0 = 841 mm x 1189 mm
DIN A1 = 594 mm x 0841 mm
DIN A2 = 420 mm x 0594 mm
DIN A3 = 297 mm x 0420 mm
DIN A4 = 210 mm x 0297 mm (Deutsches Briefformat)
DIN A5 = 148 mm x 0210 mm
DIN A6 = 105 mm x 0148 mm
DIN A7 = 074 mm x 0105 mm
DIN A8 = 052 mm x 0074 mm
meisterjoda - Do 02.06.05 14:49
so ich habs soweit das ich 4 werte ausgeben kann
ich hab mal improviesiert und arbeite mit einem wert undzwa dem der höhe von a0
ich hab jetz die höhe der din a0-din a2-din a4 und din a6 ausgegeben ^^
na ma schaun das bekomm ich schon hin.
frage wie kann ichn in einem memofeld bestimmten ob ers links oder rechts augibt?
Blackheart - Do 02.06.05 14:57
Delphi-Quelltext
1: 2: 3:
| Memo1.Alignment:=taRightJustify; Memo1.Alignment:=taLeftJustify; Memo1.Alignment:=taCenterJustify; |
meisterjoda - Do 02.06.05 14:59
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22:
| function din (a:real):real; begin if a<=74 then din:=1 else begin form1.Memo1.Lines.Add(floattostr(a)); din:=din(a/2); end;
end;
procedure TForm1.Button1Click(Sender: TObject); var test,ausgabe:real;
begin test:=1189; ausgabe:=din(test);
end; |
so siehts erstmal aus....nich alle werte aber immerhin ein anfang...komm aber grad nich weiter.
bocholito - Do 02.06.05 15:01
OK, neue Anwendung erstellen, ein Button und ein Memo drauf. Rekursive Procedure ist in Unit 2 ausgelagert und damit du's nicht usen musst ein Pointer auf das Memo übergeben.
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27:
| unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, unit2; type TForm1 = class(TForm) Memo1: TMemo; Button1: TButton; procedure Button1Click(Sender: TObject); private public end; var Form1: TForm1; implementation {$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject); begin halbiereSeite(841,1189, @Memo1); end;
end. |
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24:
| unit Unit2; interface uses stdctrls, sysutils; type PTMemo = ^TMemo; procedure HalbiereSeite(b,h:double; pmemo1 : PTMemo); implementation
procedure HalbiereSeite(b,h:double; pmemo1 : PTMemo); var hilf : double; begin TMemo(pmemo1^).Lines.add(floattostr(b)+' '+floattostr(h)); hilf := h; h := b; b := round(hilf/2); if h >= 105 then HalbiereSeite(b,h,pmemo1); end;
end. |
Moderiert von
raziel: Code- durch Delphi-Tags ersetzt.
deccer - Do 02.06.05 15:08
wozu den pointer auf das TMemo?
meisterjoda - Do 02.06.05 17:39
es klappt JUHU :D
alzaimar - Do 02.06.05 20:38
Das geht noch einfacher (funktioniert aber vielleicht nicht):
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11:
| Procedure TForm1.DINA (aHoehe, aBreite : Real; aFormat : Integer); Begin memo1.lines.add (Format ('DIN A%d = %8.2f x %8.2f mm',[aFormat, max (aHoehe, aBreite), Min (aHoehe, aBreite)])); IF aFormat < 7 Then DINA (aBreite, aHoehe / 2, aFormat + 1); End;
Procedure TForm1.Button1Click (Sender : TObject); Begin DINA (1189, 841, 0) End; |
bocholito - Fr 03.06.05 07:16
Pointer auf TMemo, weil ich die eigentliche Routine in einer anderen Unit untergebracht habe. Damit ich diese andere Unit auch in anderen Programmen verwenden kann übergebe ich einen Pointer, damit wird vermieden, dass ich in der uses klauses die erste unit einbinden muss.
Ich mach das immer so eben wegen der Wiederverwendbarkeit.
Ja alzaimar, das schaut ganz elegant aus. Aber die min und max sind überflüssig und die Teilung muss noch gerundet werden. also
Quelltext
1: 2: 3:
| memo1.lines.add (Format ('DIN A%d = %8.2f x %8.2f mm',[aFormat, aBreite, aHoehe])); IF aFormat < 7 Then DINA (aBreite, round(aHoehe / 2), aFormat + 1); |
Martin77 - Fr 03.06.05 07:45
Du könntest Dir auch direkt das Memo übergeben, wäre dann auch wiederverwendbar
Martin
alzaimar - Fr 03.06.05 08:20
@bocholite: Ich wollte nur brillieren, indem ich immer Höhe x Breite angebe :bawling:.
Ok, auf die Abmessungen auf 1/100 mm anzugeben ist vielleicht ein wenig schwachsinnig.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!