Forum: Mikrocontroller und Digitale Elektronik Vergleichen von Elementen in einem Feld


von New (Gast)


Lesenswert?

Hallo,

ich bin ein Anfänger und befasse mich momentan mit Arrays.
Ich wollte die Elmente eines Arrays vergleichen. Werte die doppelt 
vorkommen, sollen nicht ausgegeben werden, d.h. beim Eingabe von 
2,3,3,4,5
soll 2,3,4,5 ausgegeben werden. Vielleicht kann mir jemand einen Tipp 
geben oder sagen wo der Fehle liegt.



int Feld[5]={2,3,3,4,5};

for (int i=0; i<5; i++)
{
if(Feld[i]!=Feld[i+1] cout<<Feld[i]<<endl;
}

VG

von Dussel (Gast)


Lesenswert?

Der offensichtliche Fehler ist die Formatierung.
Davon abgesehen kann das so sicher nicht kompiliert werden, wenn es C 
oder C++ ist.
Auf welchem Controller soll das denn laufen?

von Max M. (maxmicr)


Lesenswert?

Im blödsten Fall musst du ein Element mit dem Rest des Arrays 
vergleichen und überprüfen, ob es ein 2. Element mit dem gleichen Wert 
gibt. Dafür brauchst du 2 ineinander verschachtelte for-Schleifen. Dabei 
beachten, dass der Index der übergeordneten Schleife in der inneren 
Schleife nicht überprüft wird (ansonsten überprüfst du das Element mit 
sich selber). Beim Durchlaufen der inneren Schleife setzt du eine 
boolean-Variable auf true, wenn ein Element mit gleichem Werte gefunden 
wurde (und brichst am besten gleich ab), diese Variable überprüfst du 
dann. Wenn sie false ist, gibst du den Wert am aktuellen Index aus.

von R. F. (rfr)


Lesenswert?

New schrieb:


if(Feld[i]!=Feld[i+1]

Das i kann maximal den Wert 4 annehmen.
Das letzte Element im Array wird also nicht ausgegeben.

Gruss

Robert

von A. S. (Gast)


Lesenswert?

New schrieb:
> Vielleicht kann mir jemand einen Tipp
> geben oder sagen wo der Fehle liegt.

die ersten Fehler (fehlende Klammer) liefert der Compiler

Dann ist nicht klar, ob die Werte immer sortiert sind.
Für den letzten Wert greift die Abfrage auf Speicher nach dem Array zu. 
Den müsstest Du daher aussortieren

1
   if((i==5-1)||(Feld[i]!=Feld[i+1])) cout<<Feld[i]<<endl;

von New (Gast)


Lesenswert?

Max M. schrieb:
> Im blödsten Fall musst du ein Element mit dem Rest des Arrays
> vergleichen und überprüfen, ob es ein 2. Element mit dem gleichen Wert
> gibt. Dafür brauchst du 2 ineinander verschachtelte for-Schleifen.

Vielen Dank für die Antworten. Ich habe jetzt nur noch ein Problem, wenn 
ich 2,3,3,4,5 eingebe, dann erhalte ich 2,3,4 zurück. Der letzte Wert 5 
wird nicht ausgegeben. Nun muss ich wohl überlegen wie ich diesen Teil 
"cout<<Array[i]<<endl;" umschreibe.

 for (int i=0; i < 5; i++)
            {
                for (int j=i+1; j < Array.Length; j++)
                {
                    if (Feld[i]!=Array[i+1])
                    {

                        cout<<Array[i]<<endl;

                        break;

                    }
                }

von Max M. (maxmicr)


Lesenswert?

Das war mein Ansatz, wenn das Array sortiert ist kann man vllt. noch was 
optimieren:
1
int arr[] = new int[]{1,2,7,3,1,2,8};
2
for(int i = 0; i < arr.Length; i++)
3
{
4
  bool detectedSameValue = false;
5
  for(int j = 0; j < arr.Length; j++)
6
  {
7
    if (arr[i] == arr[j] && i != j)
8
    {
9
      detectedSameValue = true;
10
      break;
11
    }
12
  }
13
14
  if (!detectedSameValue)
15
    Console.WriteLine(arr[i]);
16
}

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.