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!!