Visualizzazione dei risultati da 1 a 9 su 9
  1. #1
    Utente bannato
    Registrato dal
    Oct 2013
    Messaggi
    23

    Aiuto urgente programma con devc++

    Buona sera ,
    sono nuovo in programmazione e ancora non sono molto abile nel compilare programmi.
    Mi è stato assegnato un es. che però risulta non valido .
    Per favore, aiutatemi.
    Questo è il problema:



    Scrivere un programma C che gestisca l’archivio dei componenti presenti in un magazzino. Il programma deve lavorare su un vettore (componenti) di strutture, dove ognuna di queste contiene le informazioni su un componente: identificativo del componente, nome del componente, quantità del componente presente in magazzino. Gestire poi un ulteriore vettore (ordini) di strutture dove ognuna di queste contiene le informazioni relative a un ordine di acquisto: identificativo ordine, identificativo componente, quantità richiesta. Il programma deve: • Aggiungere un nuovo componente nell’archivio componenti (quindi nuovo identificativo, nuovo nome e nuova quantità iniziale) stampando un messaggio di errore se il componente è già presente o se l’archivio è pieno • Dato l’identificativo di un componente stamparne il nome e la quantità disponibile se il componente è presente, un messaggio di errore in caso contrario • Dato l’identificativo di un componente modificare la quantità disponibile stampando un messaggio di errore se il componente non è presente nell’archivio • Stampare tutte le informazioni dell’archivio nell’ordine con cui sono inserite • Aggiungere un nuovo ordine nell’archivio ordini (quindi nuovo identificativo ordine, nuovo identificativo componente e nuova quantità richiesta) stampando un messaggio di errore se l’ordine è già presente o se l’archivio è pieno • Verificare se gli ordini possono essere evasi, cioè se la quantità richiesta è inferiore a quella presente in magazzino, nel qual caso aggiornare le informazioni di magazzino e cancellare tutti gli ordini.



    Io sono riuscito a compilare questo programma che come ho già detto non risulta valido.:

    codice:
    #include<stdio.h> 
    #include<stdlib.h> 
    #include<string.h> 
    struct magazzino{ 
         
        char ricambio[50]; 
        int pezzi; 
        struct magazzino *next; 
    }; 
    typedef struct magazzino nodo; 
    int menu(); 
    void stampa_inventario(nodo *); 
    int conta_elementi(nodo *); 
    int conta_pezzi_totali(nodo *); 
    nodo *aggiungi_ricambio(nodo *); 
    nodo *trova_elemento(char *, nodo *); 
    void stampa_lista(nodo*); 
    void ricerca_ricambio(nodo*); 
    nodo *cancella_elemento(nodo *); 
    int prelievo_pezzi(nodo*); 
    int deposito_pezzi(nodo*); 
    nodo *cancella_lista(nodo *); 
    nodo *crea_lista_da_file(nodo *); 
    void salva_lista_su_file(nodo *); 
    int main(){ 
         
        nodo *start=NULL; 
                 
            printf("\n"); 
            stampa_inventario(start); 
            printf("\n\n"); 
             
            printf("Benvenuto\n"); 
        while(1){ 
            switch(menu()){ 
                    case 1:     start=aggiungi_ricambio(start); 
                            stampa_inventario(start); 
                            break; 
                    case 2:        start=cancella_elemento(start); 
                            stampa_inventario(start); 
                            break; 
                    case 3:     stampa_lista(start); 
                            stampa_inventario(start); 
                            break; 
                    case 4:        ricerca_ricambio(start); 
                            stampa_inventario(start); 
                                                break; 
                    case 5:        prelievo_pezzi(start); 
                            stampa_inventario(start); 
                            break; 
                    case 6:     deposito_pezzi(start); 
                            stampa_inventario(start); 
                            break; 
                    case 7:     start=cancella_lista(start); 
                            stampa_inventario(start); 
                            break; 
                    case 8:     start=crea_lista_da_file(start); 
                            stampa_inventario(start); 
                                                break; 
                    case 9:        salva_lista_su_file(start); 
                            stampa_inventario(start);     
                            break; 
                    case 0:        cancella_lista(start); 
                            printf("Arrivederci!\n"); 
                            exit(0); 
                    default: printf("Errore\n"); 
    
                } 
             
            } 
         
    } 
    void salva_lista_su_file(nodo *start){ 
        nodo *head=start; 
        int a=0; 
        FILE *fp=fopen("inventario.txt", "o");                //Memorizza l'inventario nel file di testo. 
        while(head!=NULL){                        //Scelta 9)save. 
            fprintf(fp, "%s %d\n", head->ricambio, head->pezzi); 
            head=head->next; 
            a++; 
        } 
        if(a>0){ 
            printf("Salvataggio effettuato.\n"); 
        }else{ 
            printf("Salvataggio non riuscito.\n"); 
        } 
        fclose(fp); 
    } 
    
    nodo *crea_lista_da_file(nodo *start){ 
            FILE *fp; 
            nodo *nuovo; 
        nodo *temp; 
            char nome_prodotto[64]; 
            int quantita; 
        char z='a'; 
        fp=fopen("inventario.txt", "r");                                //Crea la lista mentre legge i file, aggiungendo gli elementi in coda. 
            if(!fp){                            //Scelta 8)load. 
                    printf("Caricamento non effettuato.\n\n"); 
                    return NULL; 
            } 
        if(start!=NULL){ 
            while((z!='s')&&(z!='n')){ 
                printf("Vuoi sovrascrivere? Si o No? ");            //Qui avviene doppia stampa.??? 
                scanf("%c", &z); 
            } 
        } 
            while(feof(fp)==0){ 
                    nuovo=(nodo *)malloc(sizeof(nodo)); 
                    fscanf(fp, "%s %d\n", nome_prodotto, &quantita); 
                    nuovo->pezzi=quantita; 
                    strcpy(nuovo->ricambio, nome_prodotto); 
                    temp=start; 
            nuovo->next=temp; 
            start=nuovo; 
            } 
        if(feof(fp)!=0){ 
            printf("Caricamento effettuato.\n\n"); 
        } 
            fclose(fp); 
            return start; 
    } 
    nodo *cancella_lista(nodo *start){ 
        if(start!=NULL){ 
            cancella_lista(start->next);                //Cancella la lista quando chiudi il programma o quando devi rimuovere tutto. 
            free(start);                        //Scelta 7)rimuovi tutto e 0)esci. 
        } 
        return NULL; 
    } 
    
    int deposito_pezzi(nodo *start){ 
        char nome[64]; 
        nodo *temp; 
        int pr;                                //Per effettuare il deposito di pezzi. 
                                        //Scelta 6)deposito. 
        printf("Di quale pezzo vuoi fare il deposito?\n"); 
        scanf("%s", nome); 
        temp=trova_elemento(nome, start); 
        if(temp==NULL){ 
            printf("Ricambio non trovato.\n\n"); 
            return 0; 
        } 
        printf("Quanti pezzi depositi?\n "); 
        scanf("%d", &pr); 
        temp->pezzi=temp->pezzi+pr; 
        printf("Operazione effettuata.\n\n"); 
        return 0; 
    } 
    int prelievo_pezzi(nodo* start){ 
        char nome[50]; 
            nodo *temp; 
            int pr; 
            printf("Di quale pezzo vuoi fare il prelievo?\n"); 
            scanf("%s", nome);                        //Per effettuare il prelievo di pezzi. 
            temp=trova_elemento(nome, start);                //Scelta 5)prelievo. 
        if(temp==NULL){ 
            printf("Ricambio non trovato.\n\n"); 
            return 0; 
        } 
            printf("Quanti pezzi? \n"); 
            scanf("%d", &pr); 
            while(pr>temp->pezzi){ 
                    printf("N. pezzi da prelevare maggiore del n. pezzi in magazzino. Inserire numero corretto: \n"); 
                    scanf("%d", &pr); 
            } 
            temp->pezzi=temp->pezzi-pr; 
        printf("Operazione effettuata.\n\n"); 
    } 
    void ricerca_ricambio(nodo *start){ 
        char nome[50]; 
        nodo *temp; 
        printf("Quale ricambio cerchi?\n ");                //Cerca un ricambio e se lo trova stampa il numero di pezzi. 
        scanf("%s", nome);                        //Scelta 4)trova. 
        temp=trova_elemento(nome, start); 
        if(temp==NULL){ 
            printf("Il ricambio %s non è in inventario\n\n", nome); 
        }else{ 
            printf("%s: n. pezzi disponibili: %d\n", temp->ricambio, temp->pezzi); 
        } 
    } 
    void stampa_lista(nodo *start){ 
        if(start==NULL){ 
            printf("Fine\n\n");                    //Stampa la lista ricorsivamente. 
        }else{                                //Scelta 3)mostra. 
            printf("%s: %d pezzi\n", start->ricambio, start->pezzi); 
            stampa_lista(start->next); 
        } 
    } 
    
    nodo *cancella_elemento(nodo *start){ 
        char nome[50]; 
        nodo *temp; 
        nodo *head; 
        printf("Quale pezzo di ricambio vuoi cancellare?\n "); 
        scanf("%s", nome);                        //Scaneffizzando il nome del ricambio ti fa trovare e cancellare il nodo che contiene il ric. 
        temp=trova_elemento(nome, start);                //Scelta 2)cancella. 
        if(temp==NULL){ 
            printf("Ricambio non trovato.\n\n"); 
            return start; 
        } 
        head=start; 
        if(head==temp){ 
            head=temp->next; 
            free(temp); 
            printf("Ricambio eliminato.\n\n"); 
        } 
        while(head->next!=temp){ 
            head=head->next; 
        } 
        if(head->next==temp){ 
            head->next=temp->next; 
            free(temp); 
            printf("Ricambio eliminato.\n\n"); 
        }else{ 
            printf("Ricambio non trovato.\n\n"); 
        } 
        return head; 
    } 
    nodo *aggiungi_ricambio(nodo *start){ 
    nodo* head; 
    char nome_pezzo[50]; 
    int quantita; 
    nodo *temp=start; 
        printf("Che tipo di ricambio verrà aggiunto?\n"); 
        scanf("%s", nome_pezzo); 
         
        if(trova_elemento(nome_pezzo, start)!=NULL){ 
            temp=trova_elemento(nome_pezzo, start); 
            printf("L'elemento esiste già, quanti pezzi vuoi aggiungere? "); 
            scanf("%d", &quantita); 
            while(quantita<0){ 
                printf("I numeri negativi non sono validi, quanti pezzi vuoi aggiungere? "); 
                scanf("%d", &quantita); 
            }     
             
            temp->pezzi=temp->pezzi+quantita; 
            return start; 
        } 
                printf("Quanti pezzi? ");                    //Aggiunge un nodo per inserire un elemento in magazzino. 
                scanf("%d", &quantita);                        //Scelta 1)aggiungi. 
                    while(quantita<0){ 
                    printf("I numeri negativi non sono validi, quanti pezzi vuoi aggiungere? ");            //Qui non avviene doppia stampa. 
                    scanf("%d", &quantita); 
                    }     
                        head=(nodo *)malloc(sizeof(nodo)); 
                            if(head){ 
                                strcpy(head->ricambio, nome_pezzo); 
                                head->pezzi=quantita; 
                                head->next=start; 
                            } 
        return head; 
    } 
         
     
    nodo *trova_elemento(char nome[50], nodo *start){ 
        nodo *temp; 
        temp=start; 
        while(temp!=NULL){                        //Fornendo il nome del ricambio ti fa trovare il nodo che contiene quel ricambio. 
            if(strcmp(temp->ricambio, nome)==0){            //Si trova in cancella_elemento, prelievo_pezzi, deposito_pezzi e ricerca_ricambio. 
                return temp; 
            }else{ 
                temp=temp->next; 
            } 
        } 
        return temp; 
    } 
    void stampa_inventario(nodo *start){ 
         
        printf("Tipi di ricambi: %d. Numero totale di pezzi di ricambio: %d.\n", conta_elementi(start), conta_pezzi_totali(start)); 
         
    } 
    int menu(){ 
        int sc; 
        printf("Menu: \n1)aggiungi\n2)cancella\n3)mostra\n4)trova\n5)prelievo\n6)deposito\n7)rimuovi tutto\n8)load\n9)save\n0)esci\n"); 
        scanf("%d", &sc); 
        return sc; 
    } 
    int conta_elementi(nodo *start){ 
        if(start==NULL){ 
            return 0;                        //Conta ricors. gli elementi. Usato in stampa_inventario. 
        }else{ 
            return (1 + conta_elementi(start->next)); 
        } 
    } 
    int conta_pezzi_totali(nodo *start){ 
    int pezzi_totali; 
        if(start==NULL){                        //Conta il numero di pezzi in magazzino. Usato in stampa_inventario. 
            pezzi_totali=0; 
            return pezzi_totali; 
        }else{ 
            pezzi_totali=start->pezzi; 
            return(pezzi_totali + conta_pezzi_totali(start->next)); 
        } 
    }
    Vi prego mi potete aiutare nella compilazione giusta ?
    Ultima modifica di LeleFT; 29-10-2013 a 17:56

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,465
    Non basta postare il codice e dire che non va.

    Devi dire cosa non va !

    E non dire URGENTE perché nulla è urgente ...

    A parte titolo e tag CODE ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Utente bannato
    Registrato dal
    Oct 2013
    Messaggi
    23
    Per favore aiutatemi il programma non fa tutto quello che dice il testo perché?? non riesco a trovare una soluzione adeguata aiutatemi

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,465
    Se non dici cosa non va con precisione, mi sa che chiudono il thread anche questa volta.
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  5. #5
    Utente bannato
    Registrato dal
    Oct 2013
    Messaggi
    23
    non mi tornano gli ultimi 4 punti ...

  6. #6
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,465
    Guarda .... per l'ultima volta ... cerca di essere più preciso o non ci saranno altre risposte da parte mia.
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  7. #7
    Utente bannato
    Registrato dal
    Oct 2013
    Messaggi
    23
    Allora, secondo lei il programma che ho inserito nel file sorgente, perché non coincide con il problema assegnatomi?? cosa ho tralasciato rispetto alla consegna sopra indicata?

  8. #8
    Utente di HTML.it L'avatar di goatboy
    Registrato dal
    Mar 2011
    residenza
    Salerno
    Messaggi
    408
    Non spetta a noi dirtelo. Non possiamo metterci a leggere la traccia dell'esercizio, compilare il programma e vedere se fa quello che deve. E' una cosa che devi fare tu, devi dirci esattamente cosa dovrebbe fare e non fa, quali e quanti errori hai (se li hai).

  9. #9
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,304
    Quote Originariamente inviata da goatboy Visualizza il messaggio
    Non spetta a noi dirtelo. Non possiamo metterci a leggere la traccia dell'esercizio, compilare il programma e vedere se fa quello che deve. E' una cosa che devi fare tu, devi dirci esattamente cosa dovrebbe fare e non fa, quali e quanti errori hai (se li hai).
    Quoto.

    Ciò che stai chiedendo tu non è un aiuto su come risolvere un problema con quel codice, ma è un lavoro di analisi e re-ingegnerizzazione... l'analisi spetta a te: sei tu che scrivi del codice e ci si aspetta che tu sappia cosa stai scrivendo, quindi cosa faccia il tuo programma. La re-ingegnerizzazione non è nemmeno contemplabile. Se il tuo programma non fa quello che tu ti aspetti, allora devi dire cosa non fa, che invece ti aspetti (malfunzionamenti) e, possibilmente, cosa fa che invece non ti aspetti (risultati errati). Se ci sono degli errori in fase di compilazione, ci si aspetta che tu li posti. Se vengono sollevati errori in esecuzione ci si aspetta che tu li posti. Dire semplicemente "non mi tornano gli ultimi 4 punti" equivale a dire "non funziona", che a sua volta equivale al non dare nessuna informazione (lo sappiamo già da noi che non funziona... se così non fosse non avresti aperto la discussione, no?) e siamo punto e a capo.

    Chiudo anche questa discussione, che si è protratta oltre il limite del sopportabile.

    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

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.