Mengen definieren

Für Fragen von Einsteigern und Programmieranfängern...
Benutzeravatar
theo
Beiträge: 10948
Registriert: Mo 11. Sep 2006, 19:01

Re: Mengen definieren

Beitrag von theo »

creed steiger hat geschrieben:Für dich ist da klar einfach.Allerdings muss ein Anfänger erstmal auf
http://wiki.lazarus.freepascal.org/Theodp" onclick="window.open(this.href);return false;
kommen,offiziell ist das ja bei Lazarus nicht dabei?
Wenn du mal den Stecker ziehst ist es auch weg im SVN ist dein Code ja auch nicht.
Ja und? Soll ich mich jetzt entschuldigen, dass ich einen Lösungsvorschlag gemacht habe?

creed steiger
Beiträge: 958
Registriert: Mo 11. Sep 2006, 22:56

Re: Mengen definieren

Beitrag von creed steiger »

War ja nicht bös gemeint....
Ich kenn deine Beiträge und Lösungen als pragmatisch und wohldurchdacht.

Nur wie bringt man die Anfänger an den Klippen vorbei,bzw wie wird das in anderen IDE´s gemacht?
Oder sollten deine UTF-8 Tools nur mehr propagiert und sichtbarer gemacht werden?

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

Re: Mengen definieren

Beitrag von theo »

creed steiger hat geschrieben: Oder sollten deine UTF-8 Tools nur mehr propagiert und sichtbarer gemacht werden?
Was hätte ich davon? Das ist mir total egal, ich wollte nur behilflich sein.
Das werde ich wohl in Zukunft unterlassen.

carli
Beiträge: 657
Registriert: Sa 9. Jan 2010, 17:32
OS, Lazarus, FPC: Linux 2.6.x, SVN-Lazarus, FPC 2.4.0-2
CPU-Target: 64Bit

Re: Mengen definieren

Beitrag von carli »

theo hat geschrieben:
carli hat geschrieben: Nur zu doof, dass dieser Code quadratische Komplexität hat.
Du hast immer einen flotten Spruch auf Lager, was?
Bin durchaus an besseren Vorschlägen interessiert.
for..in löst das Problem der quadratischen Komplexität beim Traversieren von UTF8-Strings.

Welcher Beitrag war das, der "nicht ging"?

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

Re: Mengen definieren

Beitrag von theo »

carli hat geschrieben: for..in löst das Problem der quadratischen Komplexität beim Traversieren von UTF8-Strings.
Kannst du mal ein Beispiel machen?

carli hat geschrieben: Welcher Beitrag war das, der "nicht ging"?
Der OP wollte das ß in die Menge aufnehmen. Wie machst du das?

mse
Beiträge: 2013
Registriert: Do 16. Okt 2008, 10:22
OS, Lazarus, FPC: Linux,Windows,FreeBSD,(MSEide+MSEgui 4.6,git master FPC 3.0.4,fixes_3_0)
CPU-Target: x86,x64,ARM

Re: Mengen definieren

Beitrag von mse »

theo hat geschrieben: Der OP wollte das ß in die Menge aufnehmen. Wie machst du das?
Sets werden mit 16 Bit zu gross. Als Ersatz bietet sich case an:

Code: Alles auswählen

{$codepage utf8}
[...]
var
 ch1: unicodechar;
[...]
 case ch1 of
  'a'..'z','A','ä','ß': begin
  end;
[...]

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

Re: Mengen definieren

Beitrag von theo »

mse hat geschrieben:Sets werden mit 16 Bit zu gross. Als Ersatz bietet sich case an:
Danke mse, das weiss ich selber. Ich hätte die Antwort lieber von diesem großkotzigen carli gehört.
Der hat bestimmt noch einen Trick auf Lager. :wink:

carli
Beiträge: 657
Registriert: Sa 9. Jan 2010, 17:32
OS, Lazarus, FPC: Linux 2.6.x, SVN-Lazarus, FPC 2.4.0-2
CPU-Target: 64Bit

Re: Mengen definieren

Beitrag von carli »

theo hat geschrieben:
carli hat geschrieben: for..in löst das Problem der quadratischen Komplexität beim Traversieren von UTF8-Strings.
Kannst du mal ein Beispiel machen?
http://wiki.freepascal.org/for-in_loop" onclick="window.open(this.href);return false;
unterster Abschnitt

einfach for..in mit utf8string benutzen..
theo hat geschrieben:
carli hat geschrieben: Welcher Beitrag war das, der "nicht ging"?
Der OP wollte das ß in die Menge aufnehmen. Wie machst du das?
hab ich nie behauptet, dass das mit set of geht. UnicodeChar ist einfach zu groß für ein set of.

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

Re: Mengen definieren

Beitrag von theo »

carli hat geschrieben: http://wiki.freepascal.org/for-in_loop" onclick="window.open(this.href);return false;
unterster Abschnitt

einfach for..in mit utf8string benutzen..
Kannst du da bitte mal ein vollständiges Beispiel machen, welches mit FPC 2.6.X läuft?

Und warum soll das schneller sein als mein Vorschlag?
carli hat geschrieben: hab ich nie behauptet, dass das mit set of geht.
Du hast jedenfalls die Beispiele gebracht. Du wusstest also, dass die im vorliegenden Fall nicht funktionieren? Merkwürdig.

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

Re: Mengen definieren

Beitrag von mschnell »

theo hat geschrieben: s:=TUTF8Scanner.Create('aböcdüefgöhß');
Ah, der berühmte Unicode-String Iterator :D

Wenn es dafür noch das passende Syntax-Cady gäbe, dass man einfach

Code: Alles auswählen

for myChar in 'aböcdüefgöhß'.NextPrintableChar do
schreiben könnte wäre das eine Lösung die annähernd die Brauchbarkeit des Vor-Unicode Lazarus entprechen würde.
Ok, Veteranen, müssen umlernen, aber es bleibt handhabbar.

-Michael
(Lustig dass diese Thread parallel zum Thread "FPC Unicode support" läuft der gnau ds zum Thema hat. :twisted: )

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

Re: Mengen definieren

Beitrag von mschnell »

creed steiger hat geschrieben:Wie lösen eigentlich anderes IDE´s/Sprachen das Problem mit den Kodierungen?
bevor die Unicode-Tauglichkeit eingeführt wurde war das kein Problem
In Delphi XE und bei mse sind Character 16 Bit. Damit gehen zwar vermutlich keine Sets, aber zumindest "case" funktioniert (auf Windows !) mit deutschen Zeichen ordentlich. Ob das bei ms auch auf Mac (da gibt es anscheinend irgendwelche sehr gewöhnungsbedürftige Unicode-Codierungen) funktioniert, weiß ich nicht.

Bei ANSI-C gibt es überhaupt keine Strings :twisted:

-Michael
Zuletzt geändert von mschnell am So 22. Apr 2012, 09:02, insgesamt 2-mal geändert.

mse
Beiträge: 2013
Registriert: Do 16. Okt 2008, 10:22
OS, Lazarus, FPC: Linux,Windows,FreeBSD,(MSEide+MSEgui 4.6,git master FPC 3.0.4,fixes_3_0)
CPU-Target: x86,x64,ARM

Re: Mengen definieren

Beitrag von mse »

theo hat geschrieben:
mse hat geschrieben:Sets werden mit 16 Bit zu gross. Als Ersatz bietet sich case an:
Danke mse, das weiss ich selber.
Hast du "{$codepage utf8}" beachtet?
Zuletzt geändert von mse am So 22. Apr 2012, 10:30, insgesamt 1-mal geändert.

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

Re: Mengen definieren

Beitrag von mschnell »

theo hat geschrieben:
carli hat geschrieben: Nur zu doof, dass dieser Code quadratische Komplexität hat.
Du hast immer einen flotten Spruch auf Lager, was?.
Er hat aber recht (was in diesem konkreten Beispiel natürlich keine Nachteiligen Auswirkungen hat, aber bei längeren Strings zur Katastrophe führt.)

Ein ordentlicher String Iterator würde das Problem ohne quadratische Komplexität (O(n) statt O(n²)) lösen (siehe "FPC Unicode Support" Thread).

-Michael

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

Re: Mengen definieren

Beitrag von theo »

mschnell hat geschrieben: Er hat aber recht
Warum?

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

Re: Mengen definieren

Beitrag von mschnell »

Wenn vor dem Abprüfen auch nur eines Zeichens, der String komplett umcodiert wird, werden schon da alle Zeichen bearbeitet. Das kann bei entsprechend schlecht konditionierten Aufgaben zu O(n²) führen. Bei einfachen Beispielen (alle Zeichens des Strings angucken) ist es nur in etwa eine Verdoppelung des Aufwands.

-Michael

Antworten