Autor |
Beitrag |
trm
      
Beiträge: 491
Erhaltene Danke: 19
Windows 7x64
Delphi 7
|
Verfasst: Fr 13.04.12 22:53
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.
_________________ In Erfurt gibt es eine Pension, in der es gemütlich ist, Google einfach nach Pension Fiege
Zuletzt bearbeitet von trm am Mo 16.04.12 11:20, insgesamt 1-mal bearbeitet
|
|
bummi
      
Beiträge: 1248
Erhaltene Danke: 187
XP - Server 2008R2
D2 - Delphi XE
|
Verfasst: Sa 14.04.12 00:02
und was soll in Z stehen, derzeit irgendein zufälliger Wert vom Stack ....
_________________ Das Problem liegt üblicherweise zwischen den Ohren H₂♂
DRY DRY KISS
|
|
trm 
      
Beiträge: 491
Erhaltene Danke: 19
Windows 7x64
Delphi 7
|
Verfasst: Sa 14.04.12 00:23
_________________ In Erfurt gibt es eine Pension, in der es gemütlich ist, Google einfach nach Pension Fiege
|
|
bummi
      
Beiträge: 1248
Erhaltene Danke: 187
XP - Server 2008R2
D2 - Delphi XE
|
Verfasst: Sa 14.04.12 00:30
ich fürchte der Sinn erschließt sich mir weiterhin nicht ....
_________________ Das Problem liegt üblicherweise zwischen den Ohren H₂♂
DRY DRY KISS
|
|
jaenicke
      
Beiträge: 19315
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Sa 14.04.12 00:31
Mir ist nicht ganz klar was du mathematisch meinst.
Teilbarkeit prüfen? Modulo? Delphi-Quelltext Kleinstes gemeinsames Vielfaches? Primfaktorzerlegung?
|
|
trm 
      
Beiträge: 491
Erhaltene Danke: 19
Windows 7x64
Delphi 7
|
Verfasst: 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.
_________________ In Erfurt gibt es eine Pension, in der es gemütlich ist, Google einfach nach Pension Fiege
|
|
mandras
      
Beiträge: 432
Erhaltene Danke: 107
Win 10
Delphi 6 Prof, Delphi 10.4 Prof
|
Verfasst: 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 
      
Beiträge: 491
Erhaltene Danke: 19
Windows 7x64
Delphi 7
|
Verfasst: 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.
Einloggen, um Attachments anzusehen!
_________________ In Erfurt gibt es eine Pension, in der es gemütlich ist, Google einfach nach Pension Fiege
|
|
mandras
      
Beiträge: 432
Erhaltene Danke: 107
Win 10
Delphi 6 Prof, Delphi 10.4 Prof
|
Verfasst: 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 
      
Beiträge: 491
Erhaltene Danke: 19
Windows 7x64
Delphi 7
|
Verfasst: 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 
_________________ In Erfurt gibt es eine Pension, in der es gemütlich ist, Google einfach nach Pension Fiege
|
|
mandras
      
Beiträge: 432
Erhaltene Danke: 107
Win 10
Delphi 6 Prof, Delphi 10.4 Prof
|
Verfasst: 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 
      
Beiträge: 491
Erhaltene Danke: 19
Windows 7x64
Delphi 7
|
Verfasst: 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
Einloggen, um Attachments anzusehen!
_________________ In Erfurt gibt es eine Pension, in der es gemütlich ist, Google einfach nach Pension Fiege
|
|