PDA

Visualizza la versione completa : [C] eliminare doppioni int array1D sullo steso array


Alessio86
07-02-2008, 22:51
allora oggi dovrei , avendo un array monodimensionale, ordinato , prendere i valori in un array e stamparli a vidio
i valori tutta via non possono essere doppioni, quindi dovrei appunto eliminarli " o come pensavo io sovrascriverli"
Unica cosa e che nn posso usare nessuna variabile temporanea , ne array ma devo lavorare in place(lo scritto bene??)

il fatto che se io ho A {3 3 5 6 7 7 8 9 9 }
quello che dovrei avere successivamente A{3 5 6 7 8 9 }
//* funzione *//


void eliminazione_duplicati (int *array1D, int *size, int flag)
{
int i=0;
for(i=0;i<*size;i++)
{
if(i<1)
{
array1D[i]=array1D[0];
}
if((array1D[i]==array1D[i-1]) && (i>0) && (array1D[i]!=array1D[i+1]))
{
flag++;
array1D[i]=array1D[i+1];
*size=*size-flag;

}
if (array1D[i]!=array1D[i+1])
{
flag++;
}


il fatto che non funziona xche se ho quest' array

A { 0 3 5 5 7 9 9 }
mi rida ...
A { 0 3 5 7}

oppure
Array= {[3][3][4][6][6][9][9]}
mi restituisce
Array= {[3][4][6][6]}
e mi ignora i 2 nove ..... xche ?

Alessio86
08-02-2008, 07:49
per evitare il problema quando i=size e di conseguenza nn fare il confronto con l'ultimo elemento, potrei aggiungere ad ogni iff && i!=size piu un ulteriore if che in caso il valore array1D[i] e uguale a array[i-1] e i =size allora flag ++

Alessio86
08-02-2008, 11:53
void eliminazione_duplicati (int *array1D, int *size, int flag)
{
int i=0,j=1;

do
{
if(array1D[i]!=array1D[j])
{
i++;
j++;
}

if(array1D[i]==array1D[j] && j < *size)
{
array1D[i]=array1D[j+1];
flag++;
i++;
j++;
}

if(array1D[i]==array1D[j] && j >= *size)
{
flag++;
}
*size=*size+flag;

}

while(j < *size);
}




lo provato a modificare cosi ma nulla help!

UltraBeginner
09-02-2008, 15:04
Ciao Alessio,

prova cosi (ammesso che io abbia capito le tue richieste! :) )






#include <stdio.h>

#define VETT_DIM 10

int main (void)
{

/* Vettore */
int vect[VETT_DIM]={2,1,1,2,3,1,5,1,5,6};

/* Variabili di appoggio */
int counter,index,dim=VETT_DIM;

/* Stampa vettore con doppioni */
for(counter=0;counter<dim;counter++)
printf("%d ",vect[counter]);
printf("\n");

/* Ciclo esterno elemento corrente sotto confronto */
for(counter=0;counter<dim;counter++)
{
/* Ciclo interno, confronta elemento corrente
con tutto l array */
for(index=0;index<dim;index++)
{
/* Trova due elementi uguali ma di indice diverso */
if((vect[counter]==vect[index])&&counter!=index)
{
/* Ha trovato due elementi uguali */
/* Se era l ultimo elemento esci */
if(index==dim-1)
break;

/* Sposta a sinistra tutto l array */
for(;index<dim;index++)
vect[index]=vect[index+1];
/* Dato che ha trovato una casella uguale,
togli una casella al vettore */

dim--;
(int *)realloc(vect,dim);

/* Ricomincia da capo alla ricerca di altri doppioni */
index=0;
}
}
}

/* Stampa il vettore privo di doppioni */
for(counter=0;counter<index;counter++)
printf("%d ",vect[counter]);
printf("\nPremi invio per uscire....");

getchar();

return 1;
}




Saluti,
Beginner

Loading