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

    [C]: distinzione di liste lineari

    Salve,
    ho fatto un esercizio che prende in input una lista lineare di interi, la visualizza, la divide in due altri liste (pari e dispari) e visualizza queste due liste.
    Ecco il codice:

    /* Accetta in ingresso una sequenza di valori interi terminante e
    la memorizzi in due liste lineari: una per i numeri positivi e
    una per quelli negativi*/

    #include <stdio.h>
    #include <malloc.h>

    /* Struttura che determina gli elementi di una lista */
    struct elemento {
    int inf;
    struct elemento *pun;
    } *crea_lista(void);

    /* Prototipi delle funzioni */

    void visualizza(struct elemento*);
    void separa(struct elemento*,struct elemento*,struct elemento*);

    int main() {
    struct elemento *lista;
    struct elemento *pari;
    struct elemento *dispari;
    lista = crea_lista();
    visualizza(lista);
    separa(lista,pari,dispari);
    visualizza(pari);
    visualizza(dispari);
    getchar();
    return 0;
    }

    /* Funzione per l'accettazione dei valori immessi e la creazione della lista.
    Restituisce un puntatore alla testa della lista */

    struct elemento *crea_lista(void) {
    struct elemento *p, *paus;
    char scelta;
    int t,aus;

    /* Creazione del primo elemento */
    p = (struct elemento*)malloc(sizeof(struct elemento));
    printf("\nInserisci il primo elemento: ");
    scanf("%d",&p->inf);
    fflush(stdin);
    paus = p;
    t = 1;

    /* Creazione degli elementi successivi */
    for(; {
    printf("\nVuoi inserire un\'altro elemento? [S/N]: ");
    scanf("%c",&scelta);
    fflush(stdin);
    if ((scelta=='s') || (scelta=='S') || (scelta=='n') || (scelta=='N')) {
    if((scelta=='s') || (scelta == 'S')) {
    paus->pun = (struct elemento*)malloc(sizeof(struct elemento));
    paus = paus->pun;
    t++;
    printf("\nInserisci il valore dell\'elemento %d: ",t);
    scanf("%d",&paus->inf);
    fflush(stdin);
    } else {
    paus->pun = NULL;
    break;
    }
    } else printf("\nInserire un valore corretto!");
    }
    return(p);
    }

    /* Routine per la visualizzazione della lista */
    void visualizza(struct elemento *p) {
    int i = 1;
    printf("\n\n\t\tVisualizzazione lista\n");
    while(p!=NULL) {
    printf("\nElemento %d: %d",i,p->inf);
    p = p->pun;
    i++;
    }
    printf("\n\n\t\t--------------------\n\n");
    getchar();
    }

    /* Routine per l'eliminazione dei numeri pari presenti nella lista */
    void separa(struct elemento *p, struct elemento *pari, struct elemento *dispari) {
    struct elemento *paus_p, *paus_d;
    int flag_p = 0;
    int flag_d = 0;
    printf("\n\n\t\tDistinzione liste pari e dispari....\n");
    while(p!=NULL) {
    if((p->inf%2)==0) { // è pari
    if(flag_p==0) { // Creazione primo elemento
    pari = (struct elemento*)malloc(sizeof(struct elemento));
    pari->inf = p->inf;
    paus_p = pari;
    flag_p++;
    } else { // Creazione elementi successivi
    paus_p->pun = (struct elemento*)malloc(sizeof(struct elemento));
    paus_p = paus_p->pun;
    paus_p->inf = p->inf;
    }
    } else { // è dispari
    if(flag_p==0) { // Creazione primo elemento
    dispari = (struct elemento*)malloc(sizeof(struct elemento));
    dispari->inf = p->inf;
    paus_d = dispari;
    flag_d++;
    } else { // Creazione elementi successivi
    paus_d->pun = (struct elemento*)malloc(sizeof(struct elemento));
    paus_d = paus_p->pun;
    paus_d->inf = p->inf;
    }

    }
    p = p->pun;
    }
    }
    Non da errori, però al momento di separare le due liste si chiude il programma senza dir niente. Perchè?

    Grazie in anticipo

  2. #2
    Gima usa [CODE] cazzarola.

  3. #3
    Aspè che reincollo il codice modificato:
    codice:
    /*  Accetta in ingresso una sequenza di valori interi terminante  e
     la memorizzi in due liste lineari: una per i numeri positivi e 
     una per quelli negativi*/
    
    #include <stdio.h>
    #include <malloc.h>
    
    /* Struttura che determina gli elementi di una lista */ 
    struct elemento {
        int inf;
        struct elemento *pun;
    } *crea_lista(void);
    
    /* Prototipi delle funzioni */
    
    void visualizza(struct elemento*);
    struct elemento *separa_pari(struct elemento*);
    struct elemento *separa_dispari(struct elemento*);
    
    int main() {
        struct elemento *lista;   
        struct elemento *pari;
        struct elemento *dispari; 
        lista = crea_lista();
        visualizza(lista);
        printf("\n\n\t\tDistinzione liste pari e dispari....\n");
        pari = separa_pari(lista); 
        dispari = separa_dispari(lista);
        visualizza(pari); 
        visualizza(dispari);
        getchar();
        return 0; 
    }
    
    /* Funzione per l'accettazione dei valori immessi e la creazione della lista.
    Restituisce un puntatore alla testa della lista */
    
    struct elemento *crea_lista(void) {
        struct elemento *p, *paus;
        char scelta;
        int t,aus;
        
        /* Creazione del primo elemento */
        p = (struct elemento*)malloc(sizeof(struct elemento));
        printf("\nInserisci il primo elemento: ");
        scanf("%d",&p->inf);
        fflush(stdin);
        paus = p;
        t = 1;
        
        /* Creazione degli elementi successivi */
        for(;;) {
            printf("\nVuoi inserire un\'altro elemento? [S/N]: ");
            scanf("%c",&scelta);
            fflush(stdin);
            if ((scelta=='s') || (scelta=='S') || (scelta=='n') || (scelta=='N')) {
                if((scelta=='s') || (scelta == 'S')) {
                    paus->pun = (struct elemento*)malloc(sizeof(struct elemento));
                    paus = paus->pun;
                    t++;
                    printf("\nInserisci il valore dell\'elemento %d: ",t);
                    scanf("%d",&paus->inf);  
                    fflush(stdin);
                } else  {
                    paus->pun = NULL;
                    break; 
                  }
            } else printf("\nInserire un valore corretto!");
        } 
        return(p);                    
    }
    
    /* Routine per la visualizzazione della lista */
    void visualizza(struct elemento *p) {
        int i = 1;
        printf("\n\n\t\tVisualizzazione lista\n");
        while(p!=NULL) {                                   
            printf("\nElemento %d: %d",i,p->inf);
            p = p->pun; 
            i++; 
        }
        printf("\n\n\t\t--------------------\n\n");
        getchar();
    }
    
    struct elemento *separa_pari(struct elemento *p) {
        struct elemento *paus, *pari;
        int flag = 0;
        while(p!=NULL) {
            if((p->inf%2)==0) {      // è pari
                if(flag==0) {      // Creazione primo elemento
                    pari = (struct elemento*)malloc(sizeof(struct elemento));  
                    pari->inf = p->inf;
                    paus = pari; 
                    flag++; 
                    printf("Flag = %d",flag);
                } else {            // Creazione elementi successivi
                    paus->pun = (struct elemento*)malloc(sizeof(struct elemento));
                    paus = paus->pun;
                    paus->inf = p->inf;
                    printf("Flag = %d",flag);
                }
            }
        }
        return(pari);
    }
    
    struct elemento *separa_dispari(struct elemento *p) {
        struct elemento *paus, *dispari;
        int flag = 0;
        while(p!=NULL) {
            if((p->inf%2)!=0) {      // è pari
                if(flag==0) {      // Creazione primo elemento
                    dispari = (struct elemento*)malloc(sizeof(struct elemento));  
                    dispari->inf = p->inf;
                    paus = dispari; 
                    flag++; 
                } else {            // Creazione elementi successivi
                    paus->pun = (struct elemento*)malloc(sizeof(struct elemento));
                    paus = paus->pun;
                    paus->inf = p->inf;
                }
            }
        }
        return(dispari);
    }
    Ecco qui, ho modificato il codice ma non funziona lostesso: perkè?
    PS: r0x stavolta ho usato il tuo CODE

  4. #4
    we, quella faccina li non l'ho messa io. E' il for(; e lui la intende come faccina.....

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.