Eliminazione duplicati da un vettore ordinato

Messaggioda SalvatCpo » 19/08/2018, 08:21

Logicamente mi sembra apposto, eppure il programma non mi stampa nulla…
Grazie in anticipo :)

Codice:
#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++;
   }
}
SalvatCpo
Average Member
Average Member
 
Messaggio: 157 di 726
Iscritto il: 30/12/2017, 17:55

Re: Eliminazione duplicati da un vettore ordinato

Messaggioda Super Squirrel » 19/08/2018, 14:01

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?
Chi dorme in democrazia, si sveglia in dittatura.
Super Squirrel
Senior Member
Senior Member
 
Messaggio: 280 di 1486
Iscritto il: 16/05/2013, 22:05

Re: Eliminazione duplicati da un vettore ordinato

Messaggioda SalvatCpo » 19/08/2018, 14:49

Non me lo stampa
SalvatCpo
Average Member
Average Member
 
Messaggio: 158 di 726
Iscritto il: 30/12/2017, 17:55

Re: Eliminazione duplicati da un vettore ordinato

Messaggioda Super Squirrel » 19/08/2018, 15:10

Come non te lo stampa?!

Posta il codice che hai lanciato.
Chi dorme in democrazia, si sveglia in dittatura.
Super Squirrel
Senior Member
Senior Member
 
Messaggio: 281 di 1486
Iscritto il: 16/05/2013, 22:05

Re: Eliminazione duplicati da un vettore ordinato

Messaggioda SalvatCpo » 19/08/2018, 17:18

Codice:
#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.


Immagine
SalvatCpo
Average Member
Average Member
 
Messaggio: 159 di 726
Iscritto il: 30/12/2017, 17:55

Re: Eliminazione duplicati da un vettore ordinato

Messaggioda Super Squirrel » 19/08/2018, 17:46

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)++.
Chi dorme in democrazia, si sveglia in dittatura.
Super Squirrel
Senior Member
Senior Member
 
Messaggio: 282 di 1486
Iscritto il: 16/05/2013, 22:05

Re: Eliminazione duplicati da un vettore ordinato

Messaggioda SalvatCpo » 19/08/2018, 17:48

Okay, grazie.
Caspita, quanto contano i dettagli!!
SalvatCpo
Average Member
Average Member
 
Messaggio: 160 di 726
Iscritto il: 30/12/2017, 17:55


Torna a Informatica

Chi c’è in linea

Visitano il forum: Nessuno e 1 ospite