Listen vergleichen

Anfängerfragen zum Programmieren mit PureBasic.
dietmar
Beiträge: 97
Registriert: 19.09.2005 19:11
Wohnort: Zuhause

Listen vergleichen

Beitrag von dietmar »

Wieso kommt bei mir immer dasselbe raus? Ich habe zwei listen, in beiden stehen viele Nummern, die ich miteinander vergleichen möchte, einmal in die SchlechtListe mit der SchlechteList und einmal SchlechtList mit GutList jedesmal wenn beide Nummern gleich sind soll die Anzahl um eins erhöht werden. Bei folgendem Code

Code: Alles auswählen

ResetList(LPLSchlecht())
  While NextElement(Schlecht())
     If Schlecht()\Nummer =Gut()\Nummer
        Schlecht()\Anzahl = LPLSchlecht()\Anzahl + 1
     EndIf
  Wend
kommt immer 0 am Ende raus, wieso geht das nicht?
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

du mußt für jedes element von Schlecht die komplette Gut durchlaufen,
also 2 schleifen schachteln...
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
unix
Beiträge: 361
Registriert: 15.02.2005 19:25
Wohnort: Zwischen Coburg und Bamberg :-)
Kontaktdaten:

Beitrag von unix »

Warum 2 schleifen

Code: Alles auswählen

MyList1()
MyList2() ;nur namen

firstelement(mylist1())
firstelement(mylist2())

for i = 1 to coutlist(mylist1())

 if Mylist1() <> Mylist2()
  messagerequester("achtung","Listen ungleich")
  break
 endif

 nextelement(mylist1())
 nextelement(mylist2())

next
Hier steht normalerweise die Putzfrau drin,
die hat aber Urlaub.
MfG : Unix
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

@unit-x

lies nochmal das erste posting aufmerksam.

es geht nicht darum, abzubrechen sobald auch nur ein element ungleich ist...

es geht darum, herauszufinden, wieviele elemte insgesamt gleich sind.

...jedenfalls hab ich das so verstanden... vielleicht meint er noch was anderes...
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
freedimension
Admin
Beiträge: 1987
Registriert: 08.09.2004 13:19
Wohnort: Ludwigsburg
Kontaktdaten:

Re: Listen vergleichen

Beitrag von freedimension »

dietmar hat geschrieben:

Code: Alles auswählen

ResetList(LPLSchlecht())
  While NextElement(Schlecht())
     If Schlecht()\Nummer =Gut()\Nummer
        Schlecht()\Anzahl = LPLSchlecht()\Anzahl + 1
     EndIf
  Wend
Was ist LPLSchlecht(), hattest du nicht von nur zwei Listen (Schlecht und gut) gesprochen?
Warum wird nur für Schlecht() ein NextElement aufgerufen?
Was soll das "Schlecht()\Anzahl = LPLSchlecht()\Anzahl + 1" bringen?
Beginne jeden Tag als ob es Absicht wäre!
Bild
BILDblog
Benutzeravatar
unix
Beiträge: 361
Registriert: 15.02.2005 19:25
Wohnort: Zwischen Coburg und Bamberg :-)
Kontaktdaten:

Beitrag von unix »

Kaeru Gaman hat geschrieben:@unit-x

lies nochmal das erste posting aufmerksam.

es geht nicht darum, abzubrechen sobald auch nur ein element ungleich ist...

es geht darum, herauszufinden, wieviele elemte insgesamt gleich sind.

...jedenfalls hab ich das so verstanden... vielleicht meint er noch was anderes...
man kann es ja umbauen:

Statt <> : ein =
und dann hasst du das problem gelöst

oder ich verstehe euch falsch

dietmar?
Hier steht normalerweise die Putzfrau drin,
die hat aber Urlaub.
MfG : Unix
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

@unit-t

damit setzt du ja voraus, das die sich an der gleichen stelle befinden

du musst jedes element der 1. liste mit jedem element der 2. vergleichen,
also brauchst du 2 geschachtelte schleifen.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
Konne
Beiträge: 764
Registriert: 30.03.2005 02:20
Kontaktdaten:

Beitrag von Konne »

Also wenn ein Fehler gemeldet werden soll wenn die Listen net gleich sind würde ich das spaßeshalber mit MD5 Hashs oder so machen...
walker
Beiträge: 278
Registriert: 29.08.2004 18:39
Wohnort: Bayern

Beitrag von walker »

Hi,

die grundlegende(n) Frage(n), um überhaupt eine (treffende) Antwort zu geben, ist/sind noch gar nicht gestellt worden....

Frage 1: Sind die Listen sortiert?
Frage 2: soll der Vergleich herausfinden, ob eine Zahl in Liste 1 in Liste 2 nicht vorkommt?
Frage 3: reicht es, wenn die gleiche Listenposition ungleich ist (setzt voraus, das die Listen gleich viele Elemente enthalten...)

Wenn z.B. Liste 1 die Zahlen 1, 2, 3, 4, 5 enthällt und Liste 2 = 5, 4, 3, 2, 1 Wären ja alle Zahlen der Liste 1 in Liste 2 enthalten... aber nicht an den gleichen Positionen...

Ulf
andi256
Beiträge: 100
Registriert: 06.11.2004 11:23
Computerausstattung: PB 5.30 (x64) Win7
Wohnort: Österreich

Beitrag von andi256 »

Konne hat geschrieben:Also wenn ein Fehler gemeldet werden soll wenn die Listen net gleich sind würde ich das spaßeshalber mit MD5 Hashs oder so machen...
oder mit CompareMemory(*MemoryID1, *MemoryID2, Länge)

Andi256
Antworten