Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
Kontra
Anmeldungsdatum: 29.12.2006 Beiträge: 4
|
Verfasst am: 03.01.2007, 11:50 Titel: Programmhilfe |
|
|
Sortierung von Zahlenreihen
Wie sortiere ich folgende Zahlenreihen ?
Reihe 1. 2 7 15 30 45 49
Reihe 2. 8 12 17 21 37 39
Reihe 3. 1 6 13 18 42 45
Nach der Sortierung:
Reihe 1. 1 6 13 18 42 45
Reihe 2. 2 7 15 30 45 49
Reihe 3. 8 12 17 21 37 39
usw.
Danke für die Hilfe |
|
Nach oben |
|
 |
Jojo alter Rang

Anmeldungsdatum: 12.02.2005 Beiträge: 9736 Wohnort: Neben der Festplatte
|
Verfasst am: 03.01.2007, 12:54 Titel: |
|
|
Meinst du, dass einfach die Reihen vertasucht werden sollen, etwa nach der größe ihrer anfangszahl? weißt du, man kann reihen soooo beliebig sortieren...
Code: |
Dim Reihe (1 to 3) as string
Reihe(1) = "2 7 15 ...."
Reihe(2) = "8 12 17..."
Reihe(3) = "1 6 13 ...."
For I = 1 to 3
For J = 1 to 2
If Val(Reihe(J)) > Val(Reihe(J + 1)) Then Swap Reihe(J), Reihe (J + 1)
Next
Next
|
Und: Willkommen im Forum!  _________________ » Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
 |
|
Nach oben |
|
 |
Kontra
Anmeldungsdatum: 29.12.2006 Beiträge: 4
|
Verfasst am: 06.01.2007, 10:15 Titel: |
|
|
Danke für deine Hilfe !
Mein Beispiel hat nur 3 Reihen gezeing. Das geht.
Wenn ich über Zufallsgenerator 60 und mehr Reihen in eine Datei schreibe
und dann die Zahlenreihen aus der Datei sortiert anzeigen möchte,
klapt es nicht.
Kanst du mir helfen.
Danken. |
|
Nach oben |
|
 |
Mao
Anmeldungsdatum: 25.09.2005 Beiträge: 4409 Wohnort: /dev/hda1
|
Verfasst am: 06.01.2007, 12:03 Titel: |
|
|
Ich hoffe, du hast den Quellcode von Jojo auch auf deine 60 Reihen angepasst.
Zum Beispiel muss i von 1 bis 60 durchlaufen, und das Array Reihe musst du natürlich auch mit 60 Einträgen dimensionieren.  _________________ Eine handvoll Glück reicht nie für zwei.
--
 |
|
Nach oben |
|
 |
Jojo alter Rang

Anmeldungsdatum: 12.02.2005 Beiträge: 9736 Wohnort: Neben der Festplatte
|
Verfasst am: 06.01.2007, 13:39 Titel: |
|
|
Das teil geht für bis zu 32767 einträge  _________________ » Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
 |
|
Nach oben |
|
 |
Mao
Anmeldungsdatum: 25.09.2005 Beiträge: 4409 Wohnort: /dev/hda1
|
Verfasst am: 06.01.2007, 14:46 Titel: |
|
|
Äh...ja, ich weiß.
Aber in deinem Sample hast du 1..3 drin bzw. 1 To 3 drin.  _________________ Eine handvoll Glück reicht nie für zwei.
--
 |
|
Nach oben |
|
 |
Jojo alter Rang

Anmeldungsdatum: 12.02.2005 Beiträge: 9736 Wohnort: Neben der Festplatte
|
Verfasst am: 06.01.2007, 14:47 Titel: |
|
|
Klar, ich wollte ihm nur verdeutlichen, dass mein Prog auch mit grooßoen Datenmengen zurechtkommt (obwohl dann sehr langsam) _________________ » Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
 |
|
Nach oben |
|
 |
Mao
Anmeldungsdatum: 25.09.2005 Beiträge: 4409 Wohnort: /dev/hda1
|
Verfasst am: 06.01.2007, 14:49 Titel: |
|
|
Achsooooo...
Ich hab nix gesagt...  _________________ Eine handvoll Glück reicht nie für zwei.
--
 |
|
Nach oben |
|
 |
Kontra
Anmeldungsdatum: 29.12.2006 Beiträge: 4
|
Verfasst am: 09.01.2007, 21:15 Titel: |
|
|
Hallo Jojo,
sage mir ist dass wirklich sooooo schwer dass ich dass
nicht hinkriege. Ich habe alles richtig eingegeben. |
|
Nach oben |
|
 |
Jojo alter Rang

Anmeldungsdatum: 12.02.2005 Beiträge: 9736 Wohnort: Neben der Festplatte
|
Verfasst am: 09.01.2007, 21:29 Titel: |
|
|
is doch einfach:
Code: |
Dim Reihe (1 to 50) as string
Reihe(1) = "2 7 15 ...."
Reihe(2) = "8 12 17..."
Reihe(3) = "1 6 13 ...."
Reihe(4) = "7 51 59 189..."
[........]
For I = 1 to 50
For J = 1 to 49
If Val(Reihe(J)) > Val(Reihe(J + 1)) Then Swap Reihe(J), Reihe (J + 1)
Next
Next |
_________________ » Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
 |
|
Nach oben |
|
 |
pinkpanther

Anmeldungsdatum: 28.05.2005 Beiträge: 79 Wohnort: Wien
|
Verfasst am: 10.01.2007, 13:25 Titel: |
|
|
Code: | Dim Reihe (1 to 50) as string
Reihe(1) = "2 7 15 ...."
Reihe(2) = "8 12 17..."
Reihe(3) = "1 6 13 ...."
Reihe(4) = "7 51 59 189..."
[........]
For I = 1 to 50
For J = 1 to 49
If Val(Reihe(J)) > Val(Reihe(J + 1)) Then Swap Reihe(J), Reihe (J + 1)
Next
Next |
Sorry, aber dieser Ansatz funktioniert so nicht, jedenfalls nicht für alle Anwendungsfälle, und zwar deshalb:
Man müsste erst die Zahlen auf eine einheitliche Stellenanzahl bringen:
Für die eigentliche Aufgabenstellung fallen mir wesentlich effizientere Lösungen ein, ich hab aber im Moment keine Zeit, sie auszuarbeiten... _________________ lG
pinkpanther  |
|
Nach oben |
|
 |
Skilltronic

Anmeldungsdatum: 10.09.2004 Beiträge: 1148 Wohnort: Köln
|
Verfasst am: 10.01.2007, 14:01 Titel: |
|
|
Hallo
Wenn die Elemente der Zahlenreiheihen nicht grösser als 255 werden, könnte man die Reihen doch in einen String umwandeln, der sich aus den den Zahlen entsprechenden ASCII-Zeichen zusammensetzt und diese Strings dann sortieren. Aslo ungefähr so:
Code: | ...
reihe$(x) = ""
FOR e = 0 TO elemente
reihe$(x) = reihe$(x) + CHR$(zahl(x, e))
NEXT
... |
und dann die Strings reihe$() nach jojos Ansatz sortieren.
EDIT: Ich hab's mal ausgearbeitet, scheint zu funktionieren.
Code: | CLS
maxzahl = 255
reihen = 10
elemente = 7
DIM zahl(1 TO reihen, elemente)
DIM reihe$(1 TO reihen)
RANDOMIZE TIMER
'reihen erstellen
FOR r = 1 TO reihen
reihe$(r) = ""
FOR e = 1 TO elemente
DO
zahl(r, e) = FIX(RND * (maxzahl + e - elemente)) + 1
LOOP WHILE zahl(r, e) <= zahl(r, e - 1)
reihe$(r) = reihe$(r) + CHR$(zahl(r, e))
NEXT
NEXT
'sortieren
FOR i = 1 TO reihen
FOR j = 1 TO reihen - 1
IF reihe$(j) > reihe$(j + 1) THEN SWAP reihe$(j), reihe$(j + 1)
NEXT
NEXT
'anzeigen
FOR i = 1 TO reihen
FOR j = 1 TO elemente
PRINT ASC(MID$(reihe$(i), j, 1));
NEXT
PRINT
NEXT |
@Kontra: Du hast geschrieben, du hättest alles richtig "eingegeben". Du kannst Codebeispiele aus dem Forum auch z.B. in den Editor kopieren und als .bas abspeichern, dann brauchst du nichts abzutippen.
Gruss
Skilltronic _________________ Elektronik und QB? www.skilltronics.de ! |
|
Nach oben |
|
 |
Jojo alter Rang

Anmeldungsdatum: 12.02.2005 Beiträge: 9736 Wohnort: Neben der Festplatte
|
Verfasst am: 10.01.2007, 17:41 Titel: |
|
|
pinkpanther hat Folgendes geschrieben: | Code: | Dim Reihe (1 to 50) as string
Reihe(1) = "2 7 15 ...."
Reihe(2) = "8 12 17..."
Reihe(3) = "1 6 13 ...."
Reihe(4) = "7 51 59 189..."
[........]
For I = 1 to 50
For J = 1 to 49
If Val(Reihe(J)) > Val(Reihe(J + 1)) Then Swap Reihe(J), Reihe (J + 1)
Next
Next |
Sorry, aber dieser Ansatz funktioniert so nicht, jedenfalls nicht für alle Anwendungsfälle, und zwar deshalb:
Man müsste erst die Zahlen auf eine einheitliche Stellenanzahl bringen:
Für die eigentliche Aufgabenstellung fallen mir wesentlich effizientere Lösungen ein, ich hab aber im Moment keine Zeit, sie auszuarbeiten... |
Er wollte nur die reihen nach der anfangszahl sortieren. und das geht IMMER, wenn man val(reihe) anwendet, denn das erste leerzeichen oder sonderzeichen bricht die überprüfung durch val ab. VAL("4 5") gibt also 4 und nicht 45 oder so was zurück. und das wollte er doch. _________________ » Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
 |
|
Nach oben |
|
 |
Skilltronic

Anmeldungsdatum: 10.09.2004 Beiträge: 1148 Wohnort: Köln
|
Verfasst am: 10.01.2007, 18:13 Titel: |
|
|
Hallo
Jojo hat Folgendes geschrieben: | VAL("4 5") gibt also 4 und nicht 45 oder so was zurück. |
Doch tut es. Hab's gerade nochmal ausprobiert um sicherzugehen.
ergibt die Ausgabe 45. Ausserdem würde, wenn es so wäre wie du schreibst, das zweite Element einer Reihe nicht berücksichtigt werden, was sicher nicht gewollt ist wenn mehrere Reihen mit der gleichen Zahl beginnen. Meine Methode macht das.
Gruss
Skilltronic _________________ Elektronik und QB? www.skilltronics.de ! |
|
Nach oben |
|
 |
Jojo alter Rang

Anmeldungsdatum: 12.02.2005 Beiträge: 9736 Wohnort: Neben der Festplatte
|
Verfasst am: 10.01.2007, 20:01 Titel: |
|
|
okay, dann hat sich hier freeBASIC bedeutend verändert. _________________ » Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
 |
|
Nach oben |
|
 |
Michael712 aka anfänger, programmierer
Anmeldungsdatum: 26.03.2005 Beiträge: 1593
|
Verfasst am: 10.01.2007, 20:47 Titel: |
|
|
FreeBASIC (Linux), compiliert am 8.Januar 2007:
Es gibt 4 zurück  _________________
Code: | #include "signatur.bi" |
|
|
Nach oben |
|
 |
Jojo alter Rang

Anmeldungsdatum: 12.02.2005 Beiträge: 9736 Wohnort: Neben der Festplatte
|
Verfasst am: 10.01.2007, 20:56 Titel: |
|
|
sag' ich doch  _________________ » Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
 |
|
Nach oben |
|
 |
Skilltronic

Anmeldungsdatum: 10.09.2004 Beiträge: 1148 Wohnort: Köln
|
Verfasst am: 10.01.2007, 21:01 Titel: |
|
|
Und in C gibt's ne Fehlermeldung... Ist ja schön und gut, dass das in FreeBasic so ist, nur befinden wir uns hier bei den allgemeinen Fragen zu QBasic. Sorry, solche Kommentare helfen zwar eurem Postcounter, aber nicht dem Fragesteller.
Gruss
Skilltronic _________________ Elektronik und QB? www.skilltronics.de ! |
|
Nach oben |
|
 |
Jojo alter Rang

Anmeldungsdatum: 12.02.2005 Beiträge: 9736 Wohnort: Neben der Festplatte
|
Verfasst am: 10.01.2007, 21:11 Titel: |
|
|
Ich *wusste* ja nur nicht, dass es in qbasic anders ist... Außerdem ist es ja gut, dass du schon eine gute lösung gefunden hast  _________________ » Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
 |
|
Nach oben |
|
 |
Skilltronic

Anmeldungsdatum: 10.09.2004 Beiträge: 1148 Wohnort: Köln
|
Verfasst am: 10.01.2007, 21:22 Titel: |
|
|
Ist ja schon gut. Manchmal geht einfach mein Sarkasmus mit mir durch. _________________ Elektronik und QB? www.skilltronics.de ! |
|
Nach oben |
|
 |
|