Visualizzazione dei risultati da 1 a 4 su 4
  1. #1

    [C] eliminare doppioni int array1D sullo steso array

    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 *//

    codice:
    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 ?
    Potrei morire per una {Ferrari 599 GTB Fiorano F1}

  2. #2
    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 ++
    Potrei morire per una {Ferrari 599 GTB Fiorano F1}

  3. #3
    codice:
    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!
    Potrei morire per una {Ferrari 599 GTB Fiorano F1}

  4. #4
    Ciao Alessio,

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



    Codice PHP:

    #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

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.