set als array ?

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Benutzeravatar
noisefloor
User
Beiträge: 4187
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

Hallo,

passend dazu: Bubble Sort in X verschiedenen Sprachen -> https://rosettacode.org/wiki/Sorting_al ... ubble_sort

Wie ideomatisch die Implementierungen sind kann ich nicht sagen, weil ich ca. 98-99% der dort gezeigten Sprache nicht beherrsche ;-)

Gruß, noisefloor
Benutzeravatar
__blackjack__
User
Beiträge: 14027
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@reinerdoll: Bei einem Wörterbuch funktioniert das sortieren? Wie das?

Wenn Du eine Sequenz hast, also Werte die über aufsteigende Indexwerte von 0 an ansprechbar sind, dann verwende eine Liste. Dafür sind die da. Wörterbücher sind umständlicher. Die verbrauchen mehr Speicher. Der Weg vom Index zum Wert ist komplexer.

Die Definition eines Wörterbuchs: {}. Die Definition einer Liste: []. Ich weiss nicht was Du da jetzt mit kürzer meinst. Die sind beide zwei Zeichen lang.
„A life is like a garden. Perfect moments can be had, but not preserved, except in memory. LLAP” — Leonard Nimoy's last tweet.
reinerdoll
User
Beiträge: 72
Registriert: Samstag 15. Juli 2017, 18:47

Wenn euch das nicht langweilt, dikutier' ich sehr gerne noch ein wenig weiter.
Ich wollte nur eure Zeit nicht verschwenden ...

Also : die Frage ist nicht , wie lern ich Python programmieren.
Das ist ein Ding für IT'ler, oder erstes Semester Informatik oder so.
Da gehts um Sprachkonzepte, letztlich auch um mathematische Strukturen, die in Sprachstrukturen Ausdruck finden.
Alles gut, aber nicnt mein Ding.

Mir geht es darum, daß der Schritt vom Problem zum Algorithmus gelingt. Das könnte man auch mit Nassi-Shneiderman ausdrücken, oder in Basic schreiben, oder was immer. Der Code dient dann nur zum Ausprobieren.

Was kann ein Algorithmus, wie drücke ich einen Gedanken algorithmisch aus ?

Ein Beispiel, weil oben diskutiert, die Kernoperation des bubble.
Der Kern davon wiederum : die Schleife, die die Blase nach oben bringt.
Eine Schleife, statt (hier) drei Vergleichsoperationen hintereinander !

Der Code darf keine Operationen haben, die irgendwie anspruchsvoll wären, nur Basis.
Also im Extremfall so z.b. :

Code: Alles auswählen

a={}

a[0]=int(input("erste zahl : "))
a[1]=int(input("zweite zahl : "))
a[2]=int(input("dritte zahl : "))

i=0
while i<2 :
    if a[i]>a[i+1] :
        z=a[i]
        a[i]=a[i+1]
        a[i+1]=z
    i=i+1
    
print("erste : ",a[0])
print("zweite : ",a[1])
print("dritte : ",a[2])
Ich weiß schon, das ist alles gruselig low-level. Ich weiß aber auch, daß viele Leute nie programmieren lernen, weil ihnen genau dieser erste Schritt fehlt. Mach einer kann zwar in schwindeligen Höhen komplex coden, aber es mangelt an der Kreativität beim Lösungsansatz, wenn das Problem noch roh daliegt.
reinerdoll
User
Beiträge: 72
Registriert: Samstag 15. Juli 2017, 18:47

Noch ein Gedanke dazu : auch das Tauschen beim bubble ist ein hochwertiger Gegenstand.
Nimm zwei Münzen auf zwei Plätzen, und tausche die Plätze.
Wie geht das ?
- Zerlegen der Operation in Einzelschritte
- eine Münze muß "zwischengelagert" werden.
- usw ...
Das ist der Nukleus eines Algorithmus.

Wenn man z.b. in Tanenbaum liest, findet man die Dinge so beschrieben ..
Benutzeravatar
sparrow
User
Beiträge: 4535
Registriert: Freitag 17. April 2009, 10:28

Da gehe ich mit dir nicht überein. Ich habe verschiedensten Leuten Programmieren nahe gebracht. Wenn es nicht bereits eine Affinität zur Mathematik oder Programmierung gab, wäre "Gieße mal den Bubblesort Algorithmus in Code" bereits eine Nummer zu komplex. Da fängt man an Indexe damit zu erklären, dass man Stichwortverzeichnisse in analogen Bücherreien hat. Meiner Erfahrung nach helfen handfeste, analoge Beispiele um Vorgänge zum Einstieg zu erklären.
Aber das ist ein anderes Thema.

Dein Beinspiel ändert nichts daran, dass du dafür die die falsche Datenstruktur verwendest. Wie ich bereits oben schrieb: Du verwendest ein dicitonary um das Verhalten einer Liste zu imitieren. Grundlos und mit den Nachteilen, die zwischenzeitlich genannt wurden. Und das sehe ich als falsch an. Und jemanden falsche Dinge über eine Programmiersprache beizubringen, führt nicht dazu, dass er das Programmieren richtig lernt. Und Datenstrukturen sind nun mal die absolute Basis.

Dein gezeigter Algorithmus funktioniert auch nur mit genau 3 Zahlen. Ist in meinen Augen also auch falsch, weil die Anzahl der zu sortierenden Elemente variabel sein sollte. Es gibt keinen Grund das nicht zu tun.
Zuletzt geändert von sparrow am Montag 14. Dezember 2020, 09:57, insgesamt 1-mal geändert.
Benutzeravatar
noisefloor
User
Beiträge: 4187
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

Hallo,

das du ein Dict benutzt ist trotzdem immer noch falsch. Ist dir bereits mehrfach gesagt worden. Das hat auch nichts mit low-level oder sonst was zu tun, sondern nur mit deiner Einstellung.

Und

Code: Alles auswählen

z=a[i]
a[i]=a[i+1]
a[i+1]=z
kann man in Python als

Code: Alles auswählen

a[i], a[i+1] = a[i+1], a[i]
schreiben, den Umweg über die Hilfsvariable braucht man nicht.

Selbst als Anfänger sollte man die Bubble Soft Funktion so schreiben, dass sie nicht auf drei Elemente beschränkt ist, sondern mit einer beliebigen Anzahl Elemente funktioniert.

Gruß, noisefloor
reinerdoll
User
Beiträge: 72
Registriert: Samstag 15. Juli 2017, 18:47

na ja, daß das mit mehr als 3 zahlen gehen sollte, ist mir schon auch klar, ich wollte ja nur den kern herausarbeiten.

und genau, die hilfsvariable ist eben zentral wichtig. so denkt man algorithmisch, daß man einen denkvorgang in winzige, simple einzeoperationen zerlegt, die eine maschine nacheinander ausführen kann. daß ein stück code das auch kann, ist ja nett, vielleicht gibts auch irgendeine swap- oder irgendwas -operation, aber darum gehts genau eben nicht.

der schritt zu dem, was ihr diskutiert, ist dann der nächste (oder übernächste).

ich denke wir verhacken uns da immer weiter, das führt zu nichts.
ich nehme mit, daß ein dict. die falsche struktur ist, und werde listen verwenden.

obwohl wir sehr unterschiedlicher ansicht sind, danke ich für die ernsthaften argumente (es gibt auch foren, in denen sehr unsachlich kommunziert wird..) !

grüße, reinerdoll
Benutzeravatar
__blackjack__
User
Beiträge: 14027
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@reinerdoll: Algorithmus und Tanenbaum ist wohl die Kombination die sich mit Python nicht vollständig verträgt, weil Python eine Hochsprache ist und Tanenbaum eher maschinennah.

Aus der Sicht ist das Wörterbuch dann auch falsch, weil wenn Du ``a, b = b, a`` nicht als elementaren Schritt ansiehst, sondern den unbedingt noch mit einer benannten Zwischenvariablen ausdrücken willst, stellt sich ja schon irgendwo die Frage warum Du statt einer einfachen Liste, wo man mit einem Index direkt an den Wert kommt, ein Wörterbuch verwenden ”darfst”, das unter der Haube mit dem Schlüssel viel mehr anstellen muss um den passenden Index und die passende Liste innerhalb des Wörterbuch-Objekts zu finden.
„A life is like a garden. Perfect moments can be had, but not preserved, except in memory. LLAP” — Leonard Nimoy's last tweet.
tonikae
User
Beiträge: 90
Registriert: Sonntag 23. Februar 2020, 10:27

reinerdoll hat geschrieben: Montag 14. Dezember 2020, 10:24 und genau, die hilfsvariable ist eben zentral wichtig. so denkt man algorithmisch, daß man einen denkvorgang in winzige, simple einzeoperationen zerlegt, die eine maschine nacheinander ausführen kann. daß ein stück code das auch kann, ist ja nett, vielleicht gibts auch irgendeine swap- oder irgendwas -operation, aber darum gehts genau eben nicht.

der schritt zu dem, was ihr diskutiert, ist dann der nächste (oder übernächste).

ich denke wir verhacken uns da immer weiter, das führt zu nichts.
Ganz einfach:
Wenn dein Schwerpunkt Mathematik/Statistik/ML/Parallelverarbeitung u.s.w. ist dann bist du in Python sowieso in der falschen
Programmiersprache. Da bist du in Julia besser aufgehoben, denn Julia kommt aus dem Bereich Mathematik, Statistik, ML, Parallelverabeitung etc
und ist dahingehend optimiert. Der Befehlssatz ist ähnlich(sogar leichter und flexibler) wie der von Python und man arbeitet fast
nur mit Arrays (selbst Bilder werden als Array gehandhabt).Man kann auch Python-Libs(z.B. Matplotlib) einbinden und Module anderer
Programmiersprachen (z.B. "C") einbetten. u.v.m.

Und um ein Array durchzurechnen bastelt man in Julia keine Schleife , sondern verwendet im einfachsten Fall einen Broadcasting-Punkt (.)
der dafür sorgt dass ein Array elementweise durchgegangen wird...oder man schreibt ein einfaches Lambda-Map(hört sich schlimmer an als es ist).
d.h. Du kannst ich da wirklich voll auf den Algorithmus konzentieren und die Codierung ist eher Nebensache.Üblicherweise bindet man Julia in VSC oder
JUNO https://junolab.org/ ein und hat damit sehr leistungstarke IDE's, aber selbst die REPL (das ist etwas ähnliches wie die Python IDLE) ist schon ganz ordentlich.

Beispiel:
https://drive.google.com/file/d/1pNWa6- ... YOaT0/view

btw.
swappen geht übrigens genauso wie in Python: x,y =y,x
Giovanni_De
User
Beiträge: 4
Registriert: Sonntag 21. Juni 2020, 21:25

a = Eine_brasilianer = None
r = Deutsch = 10
r = Erste Versuche hier = 1/0
aye = ("die letzte Wort von Männer nachdem ein Madam spricht \
in Netflix Series 'Outlander'")
Rückgabe = "Ich möchte, reinerdoll mehr code über deine Idee schreiben \ können. Mein Deutsch Erfahrung ist außer Mensch Kontakt, so es wäre einfacher wenn die Kommunikation von Ideen in Code ausdrücklich geschrieben."
reinerdoll
User
Beiträge: 72
Registriert: Samstag 15. Juli 2017, 18:47

@giovanni_De : wow, das ist echt kryptisch ? hört sich an, als hätte ne kaputte ki gesprochen ,-)

@tonikae : der "zielmarkt" ist die industrielle anlagentechnik. in neueren sps und wohl perspektivisch auch in anderen komponenten sind skriptsprachen angesagt, und da hat python die nase vorn.

und tanenbaum ? der schreibt in c .

und @ blackjack ( "ein Wörterbuch verwenden ”darfst”, das unter der Haube mit dem Schlüssel viel mehr anstellen muss um den passenden Index und die passende Liste innerhalb des Wörterbuch-Objekts zu finden.") -> das ist es. das ist genau die info, die ich eigentlich gesucht habe. ein grund, dic's nicht zu verwenden, obwohl es ja funktioniert. ( obwohl die frage ist, ob rechenleistung oder ram ähnliches überhaupt heute noch ein argument ist ;-)
Benutzeravatar
__blackjack__
User
Beiträge: 14027
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

Bezüglich SPS kann man dann wohl den alten Spruch, dass man in jeder Programmiersprache FORTRAN schreiben kann abwandeln. Die Frage ist dann ob da tatsächlich Python geschrieben wird, oder irgendeine andere Sprache in Python-Syntax gequetscht wird.

Wie man denkt und Algorithmen ausdrückt, hängt auch mit der Programmiersprache zusammen. Das was Tanenbaum mit C macht, macht mit C Sinn. Da *muss* man das ja auch so machen. Also beispielsweise explizit eine temporäre Variablen für die Elemente beim tauschen. Das ist aber nicht zwingend Teil vom Bubblesort-Algorithmus. Das ist ein Detail der Implementierung. Auf Ebene von Bubblesort ist nur der Tausch wichtig. Ob der mit expliziter temporärer Variable gemacht wird, per `swap()`-Funktion, so wie bei Python per Zuweisung an eine Zielliste, oder ganz anders, ändert nichts grundsätzliches am Algorithmus. Da kann auf Hardwareebene am Ende *ein* Maschinenbefehl der zwei ”Worte” in Speicherstellen tauscht stehen, oder auf Sprachebene kann man so etwas wie Haskell haben wo das tauschen *ganz* anders ausgedrückt wird, beispielsweise per „pattern matching“ und einer rekursiven Funktion.
„A life is like a garden. Perfect moments can be had, but not preserved, except in memory. LLAP” — Leonard Nimoy's last tweet.
Benutzeravatar
DeaD_EyE
User
Beiträge: 1231
Registriert: Sonntag 19. September 2010, 13:45
Wohnort: Hagen
Kontaktdaten:

Dank SCL lassen sich die SPS in einem Pascal ähnlichem Syntax programmieren.
So low-level ist das gar nicht mehr.

100-mal besser als AWL (Anweisungsliste / sowas wie Assembler für Arme).

Den Rest programmiert man grafisch. Programmierer wählen meist den Funktionsplan und Elektriker den Kontaktplan.
Wenn es ein Ablauf sein soll, dann halt Graph7. In der Automatisierung hat sich sehr viel getan.
Momentan reden ja alle von OPC UA.
sourceserver.info - sourceserver.info/wiki/ - ausgestorbener Support für HL2-Server
Antworten