Autor Beitrag
trm
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 491
Erhaltene Danke: 19

Windows 7x64
Delphi 7
BeitragVerfasst: Fr 13.04.12 22:53 
Hallo,

gibt es eine Delphieigene Lösung für folgendes Konstrukt?

ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 1248
Erhaltene Danke: 187

XP - Server 2008R2
D2 - Delphi XE
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 491
Erhaltene Danke: 19

Windows 7x64
Delphi 7
BeitragVerfasst: Sa 14.04.12 00:23 
user profile iconbummi hat folgendes geschrieben Zum zitierten Posting springen:
und was soll in Z stehen, derzeit irgendein zufälliger Wert vom Stack ....


Huch, das passiert, wenn ich es hier direkt reinschreibe ^^

ausblenden 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;

_________________
In Erfurt gibt es eine Pension, in der es gemütlich ist, Google einfach nach Pension Fiege ;)
bummi
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 1248
Erhaltene Danke: 187

XP - Server 2008R2
D2 - Delphi XE
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19315
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Sa 14.04.12 00:31 
Mir ist nicht ganz klar was du mathematisch meinst. :gruebel:

Teilbarkeit prüfen? Modulo?
ausblenden Delphi-Quelltext
1:
2:
if a mod b = 0 then
  // a ist durch b ohne Rest teilbar
Kleinstes gemeinsames Vielfaches? Primfaktorzerlegung?
trm Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 491
Erhaltene Danke: 19

Windows 7x64
Delphi 7
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 432
Erhaltene Danke: 107

Win 10
Delphi 6 Prof, Delphi 10.4 Prof
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 491
Erhaltene Danke: 19

Windows 7x64
Delphi 7
BeitragVerfasst: Sa 14.04.12 14:46 
user profile iconmandras hat folgendes geschrieben Zum zitierten Posting springen:
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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 432
Erhaltene Danke: 107

Win 10
Delphi 6 Prof, Delphi 10.4 Prof
BeitragVerfasst: 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:

ausblenden 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;
    // ggf. Korrektur damit nicht mehr Absätze entstehen wie gewünscht
    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 > 0then if (x mod y)=0 then begin
        Result := Result + DRB;
    end;
  end;
end;
trm Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 491
Erhaltene Danke: 19

Windows 7x64
Delphi 7
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 432
Erhaltene Danke: 107

Win 10
Delphi 6 Prof, Delphi 10.4 Prof
BeitragVerfasst: Sa 14.04.12 18:59 
user profile icontrm hat folgendes geschrieben Zum zitierten Posting springen:

> jedoch war meine Frage, ob es für dieses Vorgehen eine vorgefertigte Delphilösung gibt.

ist mir nicht bekannt.

LG

Andreas
trm Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 491
Erhaltene Danke: 19

Windows 7x64
Delphi 7
BeitragVerfasst: 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 ;)