Suche passenden Pascal-Befehl für C++ Befehl

Für alles, was in den übrigen Lazarusthemen keinen Platz, aber mit Lazarus zutun hat.
Antworten
Euklid
Lazarusforum e. V.
Beiträge: 2808
Registriert: Fr 22. Sep 2006, 10:38
OS, Lazarus, FPC: Lazarus v2.0.10, FPC 3.2.0
Wohnort: Hessen
Kontaktdaten:

Suche passenden Pascal-Befehl für C++ Befehl

Beitrag von Euklid »

Hallo Leute,

für Promathika versuche ich gerade einen Algorithmus zur Berechnung von n! von C++ nach Pascal umzuschreiben.

C++ kommt mir da ziemlich chaotisch vor, und trotz Hilfe
http://www.space.unibe.ch/comp_doc/c_ma ... sions.html" onclick="window.open(this.href);return false;
kann ich mir leider nicht auf alles einen Reim machen.

Insbesondere die folgenden beiden Zeilen verstehe ich nicht vollständig:

Code: Alles auswählen

h = n >> log2n--;
und

Code: Alles auswählen

high = (h & 1) == 1 ? h : h - 1;
Was macht diese Zeile? Und wie könnte man sie mit Pascal ausdrücken?

Wäre den C++Kennern unter Euch für eine kleine "Übersetzung" der beiden Zeilen dankbar!

Viele Grüße, Euklid

Benutzeravatar
theo
Beiträge: 10927
Registriert: Mo 11. Sep 2006, 19:01

Beitrag von theo »

Ersteres ist ein Shr und ein Post-Dekrement.
wie das hier, soviel ich weiss:

h:=n shr log2n;
Dec(log2n);

Zweiteres wie hier:
http://www.space.unibe.ch/comp_doc/c_ma ... ional.html" onclick="window.open(this.href);return false;

ovidius
Beiträge: 86
Registriert: Mo 11. Sep 2006, 12:54
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit
Wohnort: Bremen

Beitrag von ovidius »

Hi.

Wie genau braucht Du n! den? Die Stirlingsche Formel wäre ja sonst sehr effizient, oder?

D.h. für kleine n bis 10 oder so, einfach rekursiv und für größere per Stirling.

Euklid
Lazarusforum e. V.
Beiträge: 2808
Registriert: Fr 22. Sep 2006, 10:38
OS, Lazarus, FPC: Lazarus v2.0.10, FPC 3.2.0
Wohnort: Hessen
Kontaktdaten:

Beitrag von Euklid »

Danke schonmal!
theo hat geschrieben: Zweiteres wie hier:
http://www.space.unibe.ch/comp_doc/c_ma ... ional.html" onclick="window.open(this.href);return false;
D.h. zweiteres sähe in Pascal so aus?:

Code: Alles auswählen

If (h and 1)=1 then high:=h else high:=h-1;
Kann man das in pascal auch so schreiben (h and 1)?


Euklid

Euklid
Lazarusforum e. V.
Beiträge: 2808
Registriert: Fr 22. Sep 2006, 10:38
OS, Lazarus, FPC: Lazarus v2.0.10, FPC 3.2.0
Wohnort: Hessen
Kontaktdaten:

Beitrag von Euklid »

ovidius hat geschrieben:Hi.

Wie genau braucht Du n! den? Die Stirlingsche Formel wäre ja sonst sehr effizient, oder?

D.h. für kleine n bis 10 oder so, einfach rekursiv und für größere per Stirling.
Hallo ovidius,

danke für den Tipp, benötige aber ein ganzzahliges (exaktes) n!
Habe das im Augenblick über die Rekursion n!:=(n-1)!*n implementiert. Er braucht aber z.B. für 365! eine halbe Ewigkeit, und solche Fakultäten kommen in der Kombinatorik schon häufiger vor.
Daher hatte ich mich auf die Suche nach einem effizienteren Algorithmus gemacht und bin auf diese Seite:

http://www.luschny.de/math/factorial/index.html" onclick="window.open(this.href);return false;

gelandet. Weil laut seite der "Split Recursive"-Algorithmus sehr schnell sein soll, habe ich mich dafür entschieden, kann nur die Sprache (C++) nicht ganz entziffern^^

Wenn du einen anderen, leicht zu implementierenden effizienten Algorithmus kennst, kannst du mir ja Bescheid geben :)

Viele Grüße, Euklid
Zuletzt geändert von Euklid am Di 13. Mai 2008, 15:09, insgesamt 2-mal geändert.

Benutzeravatar
theo
Beiträge: 10927
Registriert: Mo 11. Sep 2006, 19:01

Beitrag von theo »

Euklid hat geschrieben: Kann man das in pascal auch so schreiben (h and 1)?
Ich denke schon.

ovidius
Beiträge: 86
Registriert: Mo 11. Sep 2006, 12:54
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit
Wohnort: Bremen

Beitrag von ovidius »

Okay,

ich dachte bei dem Logarithmus erstmal an Fließkommazahlen, aber der wird, soweit ich das sehe, nur benutzt um der Anzahl der Binärstellen zu bestimmen. :wink:

Viele Grüße,

Ingolf

Euklid
Lazarusforum e. V.
Beiträge: 2808
Registriert: Fr 22. Sep 2006, 10:38
OS, Lazarus, FPC: Lazarus v2.0.10, FPC 3.2.0
Wohnort: Hessen
Kontaktdaten:

Beitrag von Euklid »

Danke Euch für die schnellen Antworten. Werde heute Abend den Algorithmus übersetzen und ihn am Besten dann hier posten - für den Fall, dass es noch andere gibt, die sowas suchen.

Euklid

Benutzeravatar
theo
Beiträge: 10927
Registriert: Mo 11. Sep 2006, 19:01

Beitrag von theo »

Achso noch zum (h and 1)
Bei Pascal fungiert das AND sowohl als logischer als auch als bitweiser Operator. Bei C ist das anders && resp &.

mschnell
Beiträge: 3444
Registriert: Mo 11. Sep 2006, 10:24
OS, Lazarus, FPC: svn (Window32, Linux x64, Linux ARM (QNAP) (cross+nativ)
CPU-Target: X32 / X64 / ARMv5
Wohnort: Krefeld

Beitrag von mschnell »

h = n >> log2n--;

h := n shr log2n; dec(log2n);




high = (h & 1) == 1 ? h : h - 1;

if (h and 1) = 1 then high := h else high := h-1;

-Michael
Zuletzt geändert von mschnell am Mi 14. Mai 2008, 21:47, insgesamt 1-mal geändert.

Christian
Beiträge: 6079
Registriert: Do 21. Sep 2006, 07:51
OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
CPU-Target: AVR,ARM,x86(-64)
Wohnort: Dessau
Kontaktdaten:

Beitrag von Christian »

Wo ist der Unterscheid zu oben ?
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

mschnell
Beiträge: 3444
Registriert: Mo 11. Sep 2006, 10:24
OS, Lazarus, FPC: svn (Window32, Linux x64, Linux ARM (QNAP) (cross+nativ)
CPU-Target: X32 / X64 / ARMv5
Wohnort: Krefeld

Beitrag von mschnell »

Ich habe dem OP erst geantwortet, dann erst weitergelesen ;).
-Michael

Euklid
Lazarusforum e. V.
Beiträge: 2808
Registriert: Fr 22. Sep 2006, 10:38
OS, Lazarus, FPC: Lazarus v2.0.10, FPC 3.2.0
Wohnort: Hessen
Kontaktdaten:

Beitrag von Euklid »

Danke Michael!

Die erste Zeile wusste ich noch nicht...

Euklid

Benutzeravatar
theo
Beiträge: 10927
Registriert: Mo 11. Sep 2006, 19:01

Beitrag von theo »

Euklid hat geschrieben: Die erste Zeile wusste ich noch nicht...
Ist heute Tomaten-auf-den-Augen-Tag? ;-)
Hab ich doch in der ersten Antwort genau gleich geschrieben (ausser dass michael den Zeilenumbruch weglässt)

Euklid
Lazarusforum e. V.
Beiträge: 2808
Registriert: Fr 22. Sep 2006, 10:38
OS, Lazarus, FPC: Lazarus v2.0.10, FPC 3.2.0
Wohnort: Hessen
Kontaktdaten:

Beitrag von Euklid »

Hmmm, merkwürdig. Eher Erinnerungsprobleme... ^^

Antworten