Sortierbasutein mit Any Pointer

stevexxx

Level-1
Beiträge
40
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
muss einen Baustein schreiben der mir Bytebereiche in einem DB sortiert

IN Start Bool
IN DB_Nr Word
IN Startadresse INT
IN Anzahl Worde INT
IN Sortierbereich Word (in Byte) sprich blockweise sortierung
OUT Sortieren Fertig Bool


da ich noch nie mit Any pointern gearbeitet habe stellt sich das ganze als schwierig heraus... vorallem wenn ich anypointer miteinander vergleichen will und dann die Werte nach Größe Sortieren



vl kann mir ja jemand weiterhelfen

(habe die Sufu verwendet aber nichts brauchbares in Richtung any-pointer gefunden)



lg steve
 
Die von dir angegebenen Aufruf-Parameter haben für mich erstmal nichts mit ANY-Pointern zu tun.
Wenn du zum Thema ANY-Pointer Info's brauchst, dann gibt es dazu in der Rubrik FAQ einen schönen Beitrag. Den solltest du erstmal lesen.
Zum Thema Sortier-Funktion entweder wie von Marlob sdchon genannt oder alternativ mal "Bubblesort" versuchen.

Gruß
LL
 
IN Sortierbereich Word (in Byte) sprich blockweise sortierung zum thema Any Pointer.....


nehmen wir mal an in meinem db ist 15 wörter lang

wenn der sortier bereich auf 3 byte eingestellt ist wird b0.0 bis 2.7

und 3.0 bis 4.7 miteinander verglichen (im block)

somit hab ich bei 15 wörtern 30 byte sprich 30 Blöcke die ich miteinander vergleiche und die ich dann in meinem db der größe nach sortieren muss....
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Es gibt in Step7 keine 3-Byte-Variablen ...
Wenn du es dir nicht unnötig kompliziert machen willst, dann solltest du dich für das Sortieren an gängige Variablen-Formate halten - nur so als Tip.
Das andere geht natürlich auch - ist halt immer eine Frage, wieviel Arbeit man sich machen möchte ...
 
i red nicht von Variablen sondern einem bereich den ich über anypointer einstellen kann

und diese bereiche vergleiche ich dann miteinander... es gibt keine andre lösung und über dem parameter sortierbereich wird die wiederholrate des anypointer eingestellt sprich wenn der wert auf byte eingestellt ist sind das dann 3 byte ide ioch mir ansehe
 
:confused:
Wenn du etwas Sortieren oder verrechnen willst, so geht das nicht mit Bereichen es sei denn du baust dir dafür eine Funktion, die die Inhalte der bereiche miteinander sinnvoll vergeicht.
Du kannst nur Variablen miteinander vergleichen.
Der ANY-Pointer ist nur ein Zeiger auf eine Variable (oder einen Bereich).
Wenn du einen speziellen Algorythmus benötigst, dann solltest du dir erstmal darüber Gedanken machen. Nach meiner Einschätzung (aber das hatte ich schon erwähnt) benötigst du erstmal keinen ANY-Pointer und der hilft dir auch bei nichts ...
 
Zuviel Werbung?
-> Hier kostenlos registrieren
wie soll ich ohne anypointer bereiche vergleichen?? *lol* des geht ja nicht ohne dem ...

der bereich muss variabel einstellbar sein (Byteweise)
deswegn ist das ganze ein bisschen heavy finde ich

INT Werte miteinander vergleichen ist keine Kunst
aber einzelne BEreiche hingegen für mich im moment sehr schwer


lg steve
 
eigentlich muss ich mir nur das erste byte im bereich anschaun... und mit dem ersten vom 2 ten bereich vergleichen...

des transferieren des bereiches könnte ich dann wieder einzeln machn oder mit any
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
... und für alles das nimmt man die indirekte Adressierung her und das dann in einer Bearbeitungs-Schleife.

Der ANY-Pointern ist eine Möglichkeit die Adresse einer Variablen oder eines Bereiches an eine andere Funktion zu übergeben. In dieser Funktion wird der ANY-Pointer dann wieder zerlegt um eine Schleifen-Bearbeitung zu ermöglichen ...
 
hmmm das ganze könnte sich als schwierig erweisen bei negativen zahlen was i mal nicht hoffe das solche werte vorkommen
dann muss ich aufs vorzeichen auch noch achten ;(

oje oje
 
hmmm das ganze könnte sich als schwierig erweisen bei negativen zahlen was i mal nicht hoffe das solche werte vorkommen
dann muss ich aufs vorzeichen auch noch achten ;(
oje oje

spielt doch keine Rolle ob negativ oder nicht für den Vergleich.

Ich würd an deiner Stelle mich unbedingt einarbeiten in die Themen: Indirekte Adressierung, Adressregister allgemein, Aufbau Any Pointer (den kann man als Eingangsparameter bei deiner Funktion durchaus gebrauchen), Schleifen.

Was ganz wichtig ist, einen sauberer Programmierstil ans Tageslicht wenns um solche Geschichten geht, und mit den Kommentaren nicht sparsam sein, den Code blickst du sonst 3 Monate später nicht mal mehr selbst.:D

und sonst hello@all
Hab mich heut mal hier angemeldet, lies zwar schon länger mit und hab mir auch schon den ein oder anderen Tipp hier holen können, jedoch es heute erst geschafft mich mal anzumelden und etwas zu schreiben.

Viele grüße
centrox
 
Zuviel Werbung?
-> Hier kostenlos registrieren
spielt schon ne rolle ob pos oder neg... die ersten drei stellen sind ja das vorzeichen naja egal....



L #iDB_Nr
T #tDb_Nr
U #iStart
FP #sm1
SPBN exit

AUF DB [#tDb_Nr]
M002: LAR1 P##iStartadresse
SET
S #oSort_done
L #iAnz_Werte
L 1
-I
LOOP: T #sCount
L B [AR1,P#0.0]
L B [AR1,P#1.0]
<=I
SPB M003
L B [AR1,P#0.0]
T #tTemp
L B [AR1,P#1.0]
T B [AR1,P#0.0]
L #tTemp
T B [AR1,P#1.0]
SET
R #oSort_done
M003: TAR1
L 8
+D
LAR1
L #sCount
UN #oSort_done
SPB M002
BE
exit: NOP 0​



wollts mal byteweise ausprobiern funktioniert aber nicht wirklich bei mir hmm...
 
... ich kann da in deinem Beispiel auch keine wirkliche Schleife erkennen ...

Was soll denn grundsätzlich dabei heraus kommen ...?
Von wo bis wo willst du nach welchen Kriterien sortieren und was ?
 
Ich vergleiche die Werte und ordne sie nach Ihrer größe

in dem Programmbeispiel werden immer 2 Werte miteinander verglichen
ist der erste wert größer als der zweite so wird er mit diesem ausgetauscht
ist das nicht der fall so wird er mit dem 3-ten verglichen


bubble sort prinzip
 
Zurück
Oben