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

    [c] Eliminazione Duplicati In Un Vettore

    Ragazzi questo programma che dovrebbe eliminare i valori che risultano duplicati in un array di n elementi, non funziona alla perfezione, perchè si elimina i valori duplicati ma alla fine il programma stesso duplica l'ultimo valore del vettore come e dovesse compensare la mancanza del valore eliminato.....ecco l'intero codice, chissà forse voi vedete l'errore...

    codice:
    #include <stdio.h>
    #define dim 10
    
    int main(){
        
        int a[dim];
        int n, i, j, n0;
        
        printf("decidere dimensioni vettore = ");
        scanf("%d", &n);
        
        for(i=0;i<n;i++){
        printf("a[%d]= ", i);
        scanf("%d", &a[i]);
        }
        
        i=0;
        while(i<n-1 && a[i]!=a[i+1]){ //RICERCA DEL PRIMO VALORE DUPLICATO
                    i++;j=i;
                    }
       while(i<n-1){
                     
                     if(a[i]!=a[i+1]){
                     j=j+1;
                     a[j]=a[i+1];
                     }
                     i++;
                     n0=j+1;
                     }
                     for(j=0;j<n;j++)
                     printf("%d\n", a[j]);
                     
                     system ("pause");
                     return 0;
                     
    }
    grazie...e auguri per queste feste passate....

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    In che senso "eliminare"?

    Se hai 5 valori, ad esempio

    1
    1
    2
    2
    3

    come deve diventare l'array (considerando che avrai sempre 5 valori)?
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    deve diventare

    1
    2
    3

  4. #4
    Non puoi cambiare le dimensioni di un array allocato sullo stack. Al massimo la tua funzione di eliminazione di duplicati, dopo aver ordinato l'array in modo adeguato, può restituire un intero che indica fino a che elemento leggere per ottenere un array senza duplicati.
    Amaro C++, il gusto pieno dell'undefined behavior.

  5. #5
    quindi il programma è corretto così com'è....l'ho codificato da uno pseudocodice che ho preso a lezione....e non ne capisco l'ultilità se non funziona come dovrebbe....cioè secondo l'idea dell'algoritmo che viene spiegato in quelle dispense dell'università....non si può apportare nessuna modifica? ad esempio (non so se sto dicendo una cavolata) fargli stampare spazi vuoti e non numeri interi?

  6. #6
    L'array è di interi, non ci puoi mettere dentro altro... al massimo puoi inventarti una convenzione per cui se un elemento è uguale ad un certo numero magico (diciamo -1) le routine che gestiscono l'array (come quella di stampa) lo considerano terminato. Non è un caso che la maggior parte delle soluzioni di più alto livello per la gestione degli array (std::vector e più o meno tutte le varie classi-array in C++, SAFEARRAY OLE, ...) contengono al loro interno un campo che indica le dimensioni dell'array per permettere una maggiore flessibilità in questi termini.
    Amaro C++, il gusto pieno dell'undefined behavior.

  7. #7
    capito! infatti quello che dici tu è logico....ma ciò che voleva dire la prof per niente....il fatto è che in quelle benedette dispense ci ha scritto anche l'output del caso esaminato durante la lezione:

    INPUT: 10, 20, 20, 40, 50, 50

    OUTPUT: 10,20,40,50

    boh....devono renderti la vita sempre più difficile....comunque grazie!!!

  8. #8
    Prego; ciao!
    Amaro C++, il gusto pieno dell'undefined behavior.

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.