Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 13
  1. #1

    [C] eliminare doppioni in un array 1d, con array di appoggio HELP!

    questa e la versione con array di appoggio che pero nn mi funziona , mi potete dare 1 mano grazie ? l' array e ia ordinato

    array = 3 3 5 8 8 9 9
    il risultato dovrebbe essere
    array 3 5 8 9

    mi potete aiutare grazie




    codice:
    void eliminazione_duplicati (int *array1D, int *size, int flag)
    {
    	int i=0,j=0,k=0;
    	int k_n=0;
    	int temp[maX];
    
    for(i=0;i<*size;i++)
    {
    	for(j=i+1;j<*size;j++)
    	{
    		if (array1D[i]!=array1D[j] && i!=(*size-2))
    		{
    			temp[k]=array1D[i];
    			k_n++;
    			k++;
    		}
    		if(i==(*size-1))
    		{
    			array1D[i];
    
    		}
    	}
    }
    Potrei morire per una {Ferrari 599 GTB Fiorano F1}

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,468
    In questo codice manca una parentesi chiusa finale e non mostri il main ... ci vuole molto piu' tempo per aiutarti se non posti (e non spieghi) cosa fa passo passo il tuo codice ...

    Ad esempio, spiega perche' passi size per indirizzo e perche' passi un parametro (flag) che non utilizzi ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    ecco l'algoritmo completo , funziona ma nn mi piace molto lo avrei voluto fare senza array_temp che è l'array di appoggio ma nn lo riesco a creare, mica mi puoi aiutare .....
    ti passo l' intero algoritmo con il main e commenti

    grazie


    codice:
    #include "stdlib.h"
    #include "stdio.h"
    #define maX 100
    void inserimento_array(int *array1D, int size);                             //Inserisco i valori
    void ordinamento (int *array1D, int size);									//Ordino l'array
    void eliminazione_duplicati (int *array1D, int *size, int flag);			//Elimino i duplicati
    void stampa(int *array1D,int size);											//Stampo l' array
    
    int main()
    {
    	int array1D[maX];														//Array utilizzato
    	int size=0;																//Size dell' array deciso tramite scanf
    	int flag=0;																//Flag per gestire il size durante l' eliminazione dei doppioni
    	printf("Inserire quanti valori vuoi inserire\t");
    	scanf("%d",&size);
    	inserimento_array(array1D,size);										//Richiamo funzione inserimento
    	system("cls");
    	printf("L'array ordinato con i valori ancora non controllati \n\n");
    	ordinamento(array1D,size);												//Richiamo funzione ordinamento
    	stampa(array1D,size);													//Richiamo funzione stampa
    	printf("\tSize %d",size);
    	printf("\n\nL'array ordinato con i valori controllati \n\n");
    	eliminazione_duplicati( array1D,&size,flag);							//Richiamo funzione eliminazione
    	stampa(array1D,size);													//Richiamo funzione stampa
    	printf("\tSize %d",size);
    	printf("\n\n");
    
    return 0;
    }
    
    
    void inserimento_array(int *array1D, int size)								//Inserisco i valori tramite I\O
    {
    	int i=0;
    	printf("\n");
    	for(i=0;i<size;i++)
    	{
    		printf("Inserire il valore da tastiera\t");
    		scanf("%d",&array1D[i]);
    		printf("\n");
    	}
    }
    
    
    void ordinamento (int *array1D, int size)									//Ordinamento  array
    {
    	int i=0;
    	int j=0;
    	int temp=0;
    	for (i=0;i<size;i++)
    		{
    			for (j=i;j<size;j++)
    				{
    					if(array1D[i] > array1D[j] )
    					{
    						temp=array1D[i];
    						array1D[i]=array1D[j];
    						array1D[j]=temp;
    					}
    				}
    		}
    }
    
    
    
    void stampa(int *array1D,int size)										//Stampa array 
    {
    	int i=0;
    printf("Array= {");
    		for (i=0;i<size;i++)
    		{
    			printf("[%d]",array1D[i]);
    		}
    printf("}");
    }
    
    
    
    void eliminazione_duplicati (int *array1D, int *size, int flag)
    {
    																	//Appoggia sull' array temp solo uno dei valori uguali oltre che a tutti quelli che nn vengono ripetuti piu di 1 volta
    	int i,j,k=0;
    	int k_n=0,flag_t=0;
    	int array_temp[maX];
    
    for(i=0;i<*size;i++)
    {
    	flag_t=0;
    
    	for(j=i+1;j<*size;j++)
    	{
    		if (array1D[i]==array1D[j])
    		{
    			flag_t=1;
    			
    		}
    		
    	}
    	if (flag_t!=1)
    		{
    			array_temp[k]=array1D[i];
    			k_n++;
    			k++;
    		}	
    }
    k=0;
    for (i=0;i<k_n;i++)
    	{
    		array1D[i]=array_temp[k];
    		k++;
    	}
    
    *size=k_n;
    }
    Potrei morire per una {Ferrari 599 GTB Fiorano F1}

  4. #4
    allora gli passo il size perche poi nel main oltre a mostrare l'array base col size lo devo rimostrare con senza valore e col size aggiornato , quindi per evitare di creare una seconda variabile
    mentre il flag lo uso per indicare se nell' array ci sono valori simili a quelli all' i-esimo passo di I
    Potrei morire per una {Ferrari 599 GTB Fiorano F1}

  5. #5
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,468
    La variabile flag non serve a nulla ...

    Il codice potrebbe essere

    codice:
    void eliminazione_duplicati(int *array1D, int *size)
    {
       int i, j;
       for(i=0; i<(*size)-1; i++)
          if(array1D[i] == array1D[i+1])
          {
             (*size)--;
             for(j=i+1; j<(*size); j++)
                array1D[j-1] = array1D[j];
          }
    }
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  6. #6
    la funzione va anche bene se l' ultimo numero e uguale a quello precedente

    codice:
    L'array ordinato con i valori ancora non controllati
    
    Array= {[4][4][5][7][7][8][9][9]}       Size 8
    
    L'array ordinato con i valori controllati
    
    Array= {[4][5][7][8][9]}        Size 5
    
    Premere un tasto per continuare . . .


    xche se come qui

    codice:
    L'array ordinato con i valori ancora non controllati
    
    Array= {[4][6][6][7][8][9][9][10]}      Size 8
    
    L'array ordinato con i valori controllati
    
    Array= {[4][6][7][8][9][9]}     Size 6
    
    Premere un tasto per continuare . . .

    come puoi vedere il 10 lo elimina e mi ripete 2 volte il 9
    Potrei morire per una {Ferrari 599 GTB Fiorano F1}

  7. #7
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,468
    Correggi questa linea cosi'

    for(j=i+1; j<(*size)+1; j++)
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  8. #8
    nn va ancora xche nel caso peggiore ovvero dove i valori sono tutti uguali ho questo risultato



    codice:
    L'array ordinato con i valori ancora non controllati
    
    Array= {[5][5][5][5][5]}        Size 5
    
    L'array ordinato con i valori controllati
    
    Array= {[5][5][5]}      Size 3
    
    Premere un tasto per continuare . . .
    Potrei morire per una {Ferrari 599 GTB Fiorano F1}

  9. #9
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,468
    Okay ... quindi

    codice:
    void eliminazione_duplicati(int *array1D, int *size)
    {
       int i, j, f=1;
    
       while(1)
       {
          for(i=0; i<(*size)-1; i++)
          {
             if(array1D[i]==array1D[i+1])
             {
                f=0;
    
                (*size)--;
                for(j=i+1;j<(*size)+1;j++)
                   array1D[j-1]=array1D[j];
             }
          }
    
          if(f) break; else f=1;
       }
    }
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  10. #10
    funziona.... sei un grande

    la mia versione dava problemi in caso l' ultimo valore era diverso dal precedente e usavo 4 if per controllare se i era <size altrimenti usavo un ulteriore if ma anche in quel caso mi dava problemi




    grazie ancora
    Potrei morire per una {Ferrari 599 GTB Fiorano F1}

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 © 2024 vBulletin Solutions, Inc. All rights reserved.