Ausgabe eines Wertes im Array überspringen, falls dieser derselbe ist wie der vorherige
-
Hallo zusammen,
ich bin grad dabei eine Aufgabe zu erstellen und hatte die Frage, was ich genau im Code ändern muss, sodass bei Eingabe gleicher Werte, der i+1 Wert übersprungen wird. Mein Code ist hier:#include <stdio.h> float eingabe(float *,int); float sortieren(float *,int); void ausgabe(float *,int); main(){ int i; printf("Geben Sie ein, wie viele Werte sie eingeben wollen\n"); scanf("%d",&i); float werte[i]; eingabe(werte,i); printf("\nDie unsortierten Werte:\n"); ausgabe(werte,i); printf("\n"); printf("Die sortierten Werte:\n"); sortieren(werte,i); ausgabe(werte,i); } float eingabe(float *werte,int i){ int n; for(n=0;n<i;n++){ printf("Geben Sie den %d.ten Wert ein:",n+1); scanf("%f",&werte[n]); } } void ausgabe(float *werte,int i){ int n; for(n=0;n<i;n++){ printf("%f\n",werte[n]); } } float sortieren(float *werte,int i){ int n,j,k,l; float neu; for(n=i;n>1;n--){ for(j=0;j<i-1;j++){ if(werte[j]>werte[j+1]){ neu = werte[j+1]; werte[j+1] = werte[j]; werte[j] = neu; } } } }
Danke im Vorraus !
-
Du kennst Schleifen, du kennst Verzweigungen, was hindert dich, alle vorhandenen Werte auf dein Kriterium zu prüfen und ggf. wie gewünscht zu handeln?
-
@SeppJ Ich hatte es bereits versuch, jedoch erhalte ich anstatt dass sich das Array um 1 verkleinert eine 0.
void ausgabe(float *werte,int i){ int n,k; for(n=0;n<i;n++){ if(werte[n] == werte[n+1]){ for(k=n+1;k<i-1;k++){ werte[k] = werte[k+1]; } i = i-1; } printf("%f\n",werte[n]); } } float sortieren(float *werte,int i){ int n,j,k,l; float neu; for(n=i;n>1;n--){ for(j=0;j<i-1;j++){ if(werte[j]>werte[j+1]){ neu = werte[j+1]; werte[j+1] = werte[j]; werte[j] = neu; } } } for(k=0;k<i;k++){ if(werte[k] == werte[k+1]){ for(l=k+1;l<i;l++){ werte[l] = werte[l+1]; } i = i-1; } } }
So sah mein Versuch aus und ich erhalte zwar dann nicht 2 mal dieselbe Zahl sondern eine 0.
-
@djinn für das eingegebene Array funktioniert es, jedoch nicht für das sortierte Array.
-
mhm, für das sortierte Array ist das doch ziemlich einfach
for(n = 0; n < i; ++n) if(n == 0 || werte[n] != werte[n-1]) printf("%f\n",werte[n]);
und für ein unsortiertes, zB
2, 4, 8, 3, 5, 4
verwirrt mich Dein Eingangspost:
'bei Eingabe gleicher Werte, der i+1 Wert übersprungen wird.'Außerdem ist zu bedenken, dass Vergleiche auf gleich/ungleich mit Fließkommatypen problematisch wird, sobald die Daten nicht mehr direkt eingegeben werden, sondern durch Rechenoperationen ermittelt werden.
-
@Belli Ich danke dir vielmals, das hat funktioniert!