Entwickler-Ecke
Sonstiges (Delphi) - Lorem ipsum - Berechnung von Teilwerten aus einem Integer
trm - Fr 13.04.12 22:53
Titel: Lorem ipsum - Berechnung von Teilwerten aus einem Integer
Hallo,
gibt es eine Delphieigene Lösung für folgendes Konstrukt?
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15:
| const a=50; b=5; var x,y,z:integer; begin y:=a div b; for x:= 1 to a do begin if (x)=(y*z)then begin ShowMessage('x ist jetzt eine Potenz von b'); end; end; end; |
Edit1: Threadtitel angepasst, in einem der folgenden Beiträge gibt es einen Anhang.
Edit2: Ein zweiter Anhang ist etwas weiter unter dem ersten zu finden.
bummi - Sa 14.04.12 00:02
und was soll in Z stehen, derzeit irgendein zufälliger Wert vom Stack ....
trm - Sa 14.04.12 00:23
bummi hat folgendes geschrieben : |
und was soll in Z stehen, derzeit irgendein zufälliger Wert vom Stack .... |
Huch, das passiert, wenn ich es hier direkt reinschreibe ^^
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17:
| const a=50; b=5; var x,y,z:integer; begin z:=1; y:=a div b; for x:= 1 to a do begin if (x)=(y*z)then begin ShowMessage('x ist jetzt eine Potenz von b'); inc(z,1); end; end; end; |
bummi - Sa 14.04.12 00:30
ich fürchte der Sinn erschließt sich mir weiterhin nicht ....
jaenicke - Sa 14.04.12 00:31
Mir ist nicht ganz klar was du mathematisch meinst. :gruebel:
Teilbarkeit prüfen? Modulo?
Kleinstes gemeinsames Vielfaches? Primfaktorzerlegung?
trm - Sa 14.04.12 01:08
Nein, ich versuche ein "Array" zu erkennen, ob die Inhalte des "Arrays" in einer Gesamtmenge enthalten ist.
Der Hintergrund ist, dass ich einen Text habe, welchen ich in gleichmäßige Absätze teilen möchte.
A ist die Menge der Worte, b ist die Anzahl der Absätze.
Z.B. in diesem Fall gäbe es 10 Absätze (50 div 5).
Mod glaube ich, kann ich nicht direkt nutzen, da ich die Absätze und die Gesamtmenge per Function als Parameter übergebe, nur im Bsp. sind das Konstanten.
mandras - Sa 14.04.12 10:39
Wenn ich das richtig verstanden habe weißt Du eigentlich nur die Anzahl der Wörter und möchtest diese dann möglichst "schön" auf (falls möglich) gleich lange Absätze aufteilen, wofür Du die Anzahl der Wörter pro Absatz und somit die Anzahl Absätze ermitteln mußt?
trm - Sa 14.04.12 14:46
mandras hat folgendes geschrieben : |
Wenn ich das richtig verstanden habe weißt Du eigentlich nur die Anzahl der Wörter und möchtest diese dann möglichst "schön" auf (falls möglich) gleich lange Absätze aufteilen, wofür Du die Anzahl der Wörter pro Absatz und somit die Anzahl Absätze ermitteln mußt? |
Ja.
Schön muss es dabei nicht sein, ich habe mal ein Beispiel angehängt.
mandras - Sa 14.04.12 18:12
Du möchtest N Wörter in M Absätze aufteilen.
Das bedeutet L=N/M Wörter pro Absatz. Da L nur ganzzahlig sein kein bietet sich an:
LS=N div M.
LS ist nun a)= L oder b) L-1.
falls A werden alle Absätze gleich lang, falls B gibt es einen letzten Absatz mit weniger Wörtern. Falls b) muß pro Absatz noch ein Wort mehr gewählt werden damit die Gesamtzahl Absätze eingehalten wird.
Lösung:
Du iterierst über 1 .. N und fügst jeweils ein Wort hinzu. Nach jeweils LS Wörtern ein Linebreak einfügen. Also Wenn i=LS bzw. 2*LS bzw 3*LS usw.
Das geht einfach:
if (i mod LS)=0 then …
als fertiger Code:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17:
| var x, y: Integer; begin Randomize; y := 0; if Absatz > 1 then begin y := Anzahl div Absatz; if (y*Absatz)<>Anzahl then y:=y+1; end; for x := 1 to Anzahl do begin Result := Result + LoremIspum[Random(High(LoremIspum))] + #32; if (y > 0) then if (x mod y)=0 then begin Result := Result + DRB; end; end; end; |
trm - Sa 14.04.12 18:53
Hallo mandras,
Danke für Deine Antwort.
Ja, dies ist auch eine lösung, jedoch war meine Frage, ob es für dieses Vorgehen eine vorgefertigte Delphilösung gibt.
Das, was Du gemacht hast, ist ja "nur" meine zweite Schleife zu verkürzen (per modulo) und eine Variable wegzulassen.
Schönes WE, liebe Grüße :)
mandras - Sa 14.04.12 18:59
trm hat folgendes geschrieben : |
> jedoch war meine Frage, ob es für dieses Vorgehen eine vorgefertigte Delphilösung gibt.
|
ist mir nicht bekannt.
LG
Andreas
trm - Mo 16.04.12 11:01
Im Anhang mein Lorem ipsum, ähnlich, wie es auf diversen Webseiten zu finden ist.
Neu ist, dass Zufällig Kommata, Satzpunktzeichen mit anschließender Großschreibung des nächsten Wortes sowie zufälligerweise Großschreibung im Satz.
Außerdem können doppelte Absätze bei Bedarf selbst eingestellt werden.
Wenn jemand eine bessere Lösung als meine findet (oder auch ab jetzt: schöneren Code erzeugt), wäre ich sehr verbunden, wenn ich die sehen dürfte :)
Viele Grüße
Mathias
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!