Visualizzazione dei risultati da 1 a 7 su 7
  1. #1
    Utente di HTML.it
    Registrato dal
    Dec 2016
    Messaggi
    9

    Semplice funzione in C. Errore?

    La funzione deve prendere un array di interi ordinati ed eliminare i duplicati, restituendo n, lunghezza del nuovo array.

    codice:
    #include <stdio.h>
    
    
    int eliminaDuplicati(int v[], int n) {
    int i, k, found=0;
    
    
    for(i=0; i<n; i++) {
    
    
        do {
            if (v[i+1]==v[i])
                found=1;
            else {
                found=0;
                k=i+1;
                for(k; k<n-1; k++)
                    v[k]=v[k+1];
                n=n-1;
            }
        } while(found==0);
    }
    return n;
    }
    
    
    void main() {
    int a[8];
    int i;
    int m;
    printf("Inserisci i numeri del vettore:  ");
    for (i=0; i<8; i++)
        scanf("%d", &a[i]);
    m=8;
    m=eliminaDuplicati(a, m);
    for(i=0; i<m; i++)
        printf("%d  ", a[i]);
    printf("%d", m);
    }
    Ultima modifica di LeleFT; 20-12-2016 a 10:11 Motivo: Aggiunti i tag CODE

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    ... e puoi dirci altro? Cosa succede? Errori? Malfunzionamenti?


    E il codice, inseriscilo tra tag CODE ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Utente di HTML.it
    Registrato dal
    Dec 2016
    Messaggi
    9
    Inserisci gli 8 numeri nell-array, poi chiude il programma dopo qualche secondo di attesa senza darmi neanche un return

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Quote Originariamente inviata da scoy97 Visualizza il messaggio
    Inserisci gli 8 numeri nell-array, poi chiude il programma dopo qualche secondo di attesa senza darmi neanche un return
    Ragiona sul fatto che i+1 alla fine del ciclo va oltre la fine dell'array
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  5. #5
    Utente di HTML.it
    Registrato dal
    Dec 2016
    Messaggi
    9
    Quote Originariamente inviata da oregon Visualizza il messaggio
    Ragiona sul fatto che i+1 alla fine del ciclo va oltre la fine dell'array
    Grazie della "dritta"! Provo a risolvere

  6. #6
    Utente di HTML.it
    Registrato dal
    Dec 2016
    Messaggi
    9
    codice:
    #include <stdio.h>
    int eliminaDuplicati(int v[], int n) {
    int i, k, found=0;
    for(i=0; i<n; i++) {
        do {
            if (v[i+1]!=v[i])
                found=1;
            else {
                found=0;
                for(i; i<n-1; i++)
                    v[i]=v[i+1];
                n=n-1;
            }
        } while(found==0);
    }
    return n;
    }
    void main() {
    int a[8];
    int i;
    int m;
    printf("Inserisci i numeri del vettore:  ");
    for (i=0; i<8; i++)
        scanf("%d", &a[i]);
    m=8;
    m=eliminaDuplicati(a, m);
    for(i=0; i<m; i++)
        printf("%d  ", a[i]);
    printf("%d", m);
    }
    Ho provato a fare questa modifica. Inserendo i numeri
    1 3 3 6 7 7 7 9
    Mi stampa
    1 3 6 7 7 7 9 7

  7. #7
    Utente di HTML.it
    Registrato dal
    Dec 2016
    Messaggi
    9
    Se posso sfrutto l'occasione per avere un chiarimento su questo esercizio ( in realtà una parte di esso ) sui puntatori
    codice:
    #include <stdio.h>
    #define MAXDIM 20
    typedef struct {
    int val[MAXDIM];
    int dim;
    } vettore;
    int acquisciSequenza(vettore *pv, int numMax) {
    int i=0;
    (*pv).dim=0;
    int temp=0;
    printf("Inserisci interi positivi in un vettore di max %d elementi oppure '-1' per terminare", numMax);
    while(i<numMax && temp>=0) {
    scanf("%d", &temp);
    (*pv).val[(*pv).dim]=temp;
    (*pv).dim++;
    i++;
    }
    if (i==numMax)
        return 1;
    if (temp<0)
        return 0;
    }
    void main() {
    vettore a;
    acquisciSequenza(&a, 10);
    }
    Il codice è corretto. Un chiarimento: nel main devo usare '&' perché devo passare alla funzione non un array, il cui passaggio per indirizzo sarebbe implicito, bensì una struttura che contiene un array.
    Se non usassi il passaggio per indirizzo quale sarebbe l'effetto? Un ritorno di 1 o 0, ma con nessuna modifica del mio vettore principale a? Grazie dell'aiuto!

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.