8 Variablen miteinander vergleichen

Bei 8 wird wohl jede mit jeder am schnellsten gehen.
sind 23 Vergleiche und das ist schwer zu unterbieten.

Bei wesentlich mehr Werten würde schneller gehen:
Daten sortieren
Wenn es gleiche gibt, dann stehen sie dann hintereinander.
Gast
Vergleiche Wert 1 mit 2,3,4,5,6,7,8  (7 Vergleiche)
                2 mit 3,4,5,6,7,8    (6 gesamt 13)
                3 mit 4,5,6,7,8      (5 gesamt 18)
                4 mit 5,6,7,8        (4 gesamt 22)
                5 mit 6,7,8          (3 gesamt 25)
                6 mit 7,8            (2 gesamt 27)
                7 mit 8              (1 gesamt 28)
Sascha schrieb:
> Danke für die schnelle Antwort. Das mit den Schleifen geht mir noch
> nicht ganz auf aber ich werd mich mal dransetzen.
> MfG
> Sascha

der 0-te wird mit verglichen mit  1, 2, 3, 4, 5, 6, 7

 0    1, 2, 3, 4, 5, 6, 7
 1    2, 3, 4, 5, 6, 7
 2    3, 4, 5, 6, 7
 3    4, 5, 6, 7
 5    6, 7
 6    7

Jeder mit jedem. Einfach alle von 0 bis zum vorletzten durchgehen und 
mit allen vergleichen, die einen größeren Index haben. Machst du ja auch 
nicht anders: Du hast 8 Karten in der Hand, du nimmst die erste und 
vergleichst sie mit den restlichen 7. Dann legst du die erste beiseite 
und nimmst die nächste. Die vergleichst du mit den verblenden 6 usw. 
usw.

  Doppelte = FALSE;

  for( i = 0; i < 7; ++i )
    for( j = i + 1; j < 8; ++j ) {
      if( wert[i] == wert[j] ) {
        Doppelte = TRUE;
      }
    }
  }

  if( Doppelte ) {
    ...
  }

Bonuspunkte gibts noch für einen vorzeitigen Ausstieg bei Erkennen eines 
Doppels.
Gast
Karl heinz Buchegger schrieb:
> Doppelte = FALSE;
>
>
>
>   for( i = 0; i < 7; ++i )
>
>     for( j = i + 1; j < 8; ++j ) {
>
>       if( wert[i] == wert[j] ) {
>
>         Doppelte = TRUE;
          goto raus;
>
>       }
>
>     }
>
>   }
>
>
raus:
>
>   if( Doppelte ) {
>
>     ...
>
>   }

Hab den Ausstieg eingefügt ;)

Wo sind meine Bonuspunkte?

avr
Gast
So ähnlich sehen meine Schleifen jetzt auch aus. Vielen Dank nochmal für 
die Ausführungen. Habs jetzt ;-)
MfG
Sascha

Doppelte = FALSE;

  for( i = 0; i < 7; ++i )
    for( j = i + 1; j < 8; ++j ) {
      if( wert[i] == wert[j] )
          {
           Doppelte = TRUE;
           j=8;                   // Ausstieg innere Schleife
           i=7;                   // Ausstieg äußere Schleife
          }
    }
  }

  if( Doppelte ) {
    ...
  }

Vieleicht nicht elegant aber durchaus funktional.
entity schrieb:
> oder, falls es C# ist: break;

Macht das break in C# nicht dasselbe wie in C(++), also die direkt 
umschließende Schleife verlassen? Dann würde in diesem Fall eben die 
darüberliegende Schleife weiter ausgeführt werden, was nicht Sinn der 
Sache ist. Deshalb auch das goto von "avr".

MfG Mark
Sascha schrieb:
> for( i = 0; i < 7; ++i )
>     for( j = i + 1; j < 8; ++j ) {
>       if( wert[i] == wert[j] )
>           {
>            Doppelte = TRUE;
>            j=8;                   // Ausstieg innere Schleife
>            i=7;                   // Ausstieg äußere Schleife
>           }
>     }
>   }

Also da ist aber goto mit Sicherheit eleganter.


Mark .. schrieb:
> entity schrieb:
>> oder, falls es C# ist: break;
>
> Macht das break in C# nicht dasselbe wie in C(++), also die direkt
> umschließende Schleife verlassen?

Ich weiß nicht, wie's bei C# ist, aber es gibt zumindest Sprachen, wo 
man dem break noch die Anzahl an Schachtelungsebenen, die verlassen 
werden sollen, angeben kann.
Persönliche Seite
Sascha schrieb:
> Hallihallo,
> ich habe gerade das Problem 8 Variablen zu vergleichen. Es darf kein
> Wert zweimal vorkommen. Muss ich wirklich jede mit jeder einzeln
> vergleichen oder gibts da ne einfachere Möglichkeit?

Es gibt noch die Möglichkeit, zu zählen, wie oft die Werte vorkommen. Da 
weder was über die Typen der Werte noch über deren Wertebereich noch 
über die Plattform auf der das läuft, gesagt ist, kann auch nicht gesagt 
werden, ob das praktikabler/eleganter ist als zu vergleichen/sortieren.

Da mit == verglichen wird sind's offenbar keine double/float-Werte.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 15 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.