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 !


  • Mod

    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!


Anmelden zum Antworten