Eliminazione duplicati da un vettore ordinato
Logicamente mi sembra apposto, eppure il programma non mi stampa nulla…
Grazie in anticipo
Grazie in anticipo

#include <stdio.h> #include <stdlib.h> #define dim 10 //Scrivi un programma contenente una funzione che elimina i duplicati da un vettore ORDINATO. void eliminaduplicati (int v[dim], int *k); int main () { int a[dim]; int i=0; printf ("Inserire un vettore ordinato: \n"); while (i<dim) { scanf ("%d", &a[i]); i++; } int n=0; eliminaduplicati (a, &n); i=0; printf ("Vettore senza duplicati: \n"); while (i<n) { printf ("%d\n ", a[i]); i++; } system ("PAUSE"); return 0; } void eliminaduplicati (int v[dim], int *k) { int i=1; *k=1; while (i<dim) { if (v[i]!=v[i-1]) { v[*k]=v[i]; *k++; } i++; } }
Risposte
Considera il seguente vettore
2 2 5 5 5 7 8 8 9 9
e prova a stampare il valore di n in seguito alla chiamata a funzione eliminaduplicati().
Il valore mostrato è quello che ti aspetteresti?
2 2 5 5 5 7 8 8 9 9
e prova a stampare il valore di n in seguito alla chiamata a funzione eliminaduplicati().
Il valore mostrato è quello che ti aspetteresti?
Non me lo stampa
Come non te lo stampa?!
Posta il codice che hai lanciato.
Posta il codice che hai lanciato.
#include <stdio.h> #include <stdlib.h> #define dim 10 //Scrivi un programma contenente una funzione che elimina i duplicati da un vettore ORDINATO. void eliminaduplicati (int v[dim], int *k); int main () { int a[dim]; int i=0; printf ("Inserire un vettore ordinato: \n"); while (i<dim) { scanf ("%d", &a[i]); i++; } int n=0; eliminaduplicati (a, &n); printf ("%d", n); i=0; printf ("Vettore senza duplicati: \n"); while (i<n) { printf ("%d\n ", a[i]); i++; } system ("PAUSE"); return 0; } void eliminaduplicati (int v[dim], int *k) { int i=1; *k=1; while (i<dim) { if (v[i]!=v[i-1]) { v[*k]=v[i]; *k++; } i++; } }
E' lo stesso di prima.
Questa invece è l'esecuzione. Mi fa inserire il vettore, ma poi termina senza far nulla.

Visto che a me non crashava volevo aiutarti ad individuare l'errore in modo autonomo.
In ogni caso il problema è nella riga di codice *k++. Dal momento che l'operatore di incremento/decremento suffisso ha la precedenza su quello di dereferenziazione, la suddetta riga coincide con *(k++), che ovviamente non è l'operazione voluta. La scrittura corretta quindi è la seguente (*k)++.
In ogni caso il problema è nella riga di codice *k++. Dal momento che l'operatore di incremento/decremento suffisso ha la precedenza su quello di dereferenziazione, la suddetta riga coincide con *(k++), che ovviamente non è l'operazione voluta. La scrittura corretta quindi è la seguente (*k)++.
Okay, grazie.
Caspita, quanto contano i dettagli!!
Caspita, quanto contano i dettagli!!