Visualizzazione dei risultati da 1 a 3 su 3
  1. #1
    Utente di HTML.it
    Registrato dal
    Oct 2012
    Messaggi
    13

    [C] Correzione esercizio

    Salve a tutti,
    sono alle primissime armi, ho fatto un esercizio, qualcuno ha la pazienza di dargli un'occhiata?
    Ecco il testo:

    ******************************
    Negozio dei cellulari

    Si consideri un archivio dei cellulari contenente 100 modelli conservato in un archivio S:
    Codice numerico del modello (progressivo univoco da 1 a 100)
    Durata batteria
    Peso
    Prezzo acquisto
    Numero totale di pezzi

    Esistano 2 negozi, ognuno con il suo archivio del magazzino (rispettivamente N1, N2 di MAX 1.000 elementi l'uno) dei cellulari arrivati:
    Codice numerico del modello (lo stesso dell'archivio S)
    Prezzo di vendita unitario
    Numero pezzi arrivati di questo modelli

    N.B.: di un modello possono arrivare anche 2 stock con differente numero di pezzi

    ESERCIZIO BASE

    Scrivere in C un programma che:
    1) Legge da tastiera le informazioni relative ai 100 modelli di cellulari mettendo il numero totale a 0.
    2) Legge da tastiera il nome del negozio e chiama una funzione "magazzino" che legge da tastiera, in ordine casuale, ed inserisce nell'archivio gli arrivi.
    3) Chiama una funzione "aggiorna" S che aggiorna il numero totale di pezzi arrivati nel negozio precedente nell'archivio dei cellulari S.
    4) Chiama una funzione "ordina" che ordina gli archivi N1 ed N2 in base al Prezzo di vendita unitario e rende il valore totale dei cellulari presenti in quel magazzino.


    ESERCIZIO 1

    Inserire nel programma una funzione “Merce” che crea un vettore ordinato in base al prezzo di vendita unitario in cui sono presenti gli articoli di entrambi i negozi.

    ESERCIZIO 2

    Scrivere una funzione che costruisce 2 liste (L1 ed L2) contenenti rispettivamente tutti cellulari presenti nel magazzino N1 con peso superiore a 100 e minore di 100.

    NB: le variabili usate devono essere locali e non è necessario controllare la correttezza dei dati in input.
    ************************************************** ***********

    mia soluzione:

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>

    typedef struct {
    int codice_modello;
    int durata_batteria;
    int peso;
    float prezzo_acquisto;
    int tot_pezzi_modello;} scheda_cellulare;

    typedef struct {
    scheda_cellulare c;
    float prezzo_vendita;
    int pezzi_arrivati_modello;} scheda_magazzino;

    #define Smax 2
    #define Nmax 2

    typedef scheda_cellulare S[Smax];
    typedef scheda_magazzino N[Nmax];

    void leggi(S S1);
    int magazzino(N Neg);
    void stampaS(S S1);
    void stampaN(N Neg);
    void aggiorna(S S1,N Neg,int pezzi_arrivati_modello );
    void ordinaInsertionSort(N Neg, int numero_arrivi);
    void merce(N N1,N N2,int numero_arriviN1, int numero_arriviN2 );
    void crealista(N Neg, int numero_arrivi);

    int main() {
    S S1={0};
    N N1={0},N2={0};
    char nome_negozio[3];
    int numero_arriviN1=0;
    int numero_arriviN2=0;
    int done=0;
    leggi(S1);
    stampaS(S1);
    do {
    printf("Digita il nome del negozio nel quale vuoi inserire gli arrivi\n");
    scanf("%s",nome_negozio);
    if(strcmp(nome_negozio,"N1")==0) {
    numero_arriviN1=magazzino(N1);
    done=1;}
    else if(strcmp(nome_negozio,"N2")==0) {
    numero_arriviN2=magazzino(N2);
    done=1;}
    else printf("Nome negozio errato, ridigitare\n");
    } while(!done);
    aggiorna(S1, N1, numero_arriviN1);
    stampaS(S1);
    ordinaInsertionSort(N1,numero_arriviN1);
    stampaN(N1);
    merce(N1,N2,numero_arriviN1,numero_arriviN2);
    crealista(N1, numero_arriviN1);
    system("PAUSE");
    return 0;
    }

    void leggi(S S1) {
    int i;
    for(i=0;i<Smax;i++) {
    S1[i].codice_modello=i+1;
    printf("Inserire la durata batteria del modello cell %d\n",i+1);
    scanf("%d",&S1[i].durata_batteria);
    printf("Inserire il peso del modello cell %d\n",i+1);
    scanf("%d",&S1[i].peso);
    printf("Inserire il prezzo di acquisto del modello cell %d\n",i+1);
    scanf("%f",&S1[i].prezzo_acquisto);}
    }

    int magazzino(N Neg) {
    int done=0;
    char conferma[3];
    int numero_arrivi=0;
    int i=0;
    do {
    printf("Ci sono degli arrivi da inserire in magazzino? dgt SI per conferma\n");
    scanf("%s",conferma);
    if(!strcmp(conferma,"SI")) {
    printf("Inserire codice numerico dell'arrivo Nro %d\n",i+1);
    scanf("%d",&Neg[i].c.codice_modello);
    printf("Inserire il prezzo di vendita dell'arrivo Nro %d\n",i+1);
    scanf("%f",&Neg[i].prezzo_vendita);
    printf("Inserire il num di pezzi arrivati dell'arrivo Nro %d\n",i+1);
    scanf("%d",&Neg[i].pezzi_arrivati_modello);
    numero_arrivi++;
    i++;}
    else
    done=1;
    } while(!done);
    return numero_arrivi;
    }


    void aggiorna(S S1, N Neg, int pezzi_arrivati_modello) {
    int i,j=0;

    for(i=0;i<Smax;i++)
    for(j=0;j<pezzi_arrivati_modello;j++)
    if(Neg[j].c.codice_modello==i+1)
    S1[i].tot_pezzi_modello+=Neg[j].pezzi_arrivati_modello;
    }


    void ordinaInsertionSort(N Neg, int numero_arrivi) {
    int i,j;
    N tmp;
    int num_cell_totali=0;
    for (i=1;i<numero_arrivi;i++)
    {
    tmp[i]=Neg[i];
    for (j= i-1;(j>=0) && (Neg[j].prezzo_vendita>tmp[i].prezzo_vendita);j--)
    Neg[j+1]=Neg[j];
    Neg[j+1]=tmp[i];
    }
    for(i=0;i<numero_arrivi;i++)
    num_cell_totali+=Neg[i].pezzi_arrivati_modello;
    printf("Il numero totale di cellulari arrivati in magazzino è: %d\n",num_cell_totali);
    }

    void merce(N N1,N N2,int numero_arriviN1, int numero_arriviN2 ) {
    int arrivi_totali=numero_arriviN1+numero_arriviN2;
    int v[arrivi_totali];
    int i,j;
    scheda_magazzino Neg[arrivi_totali];
    scheda_magazzino tmp[arrivi_totali];
    for(i=0;i<numero_arriviN1;i++)
    Neg[i]=N1[i];
    for(i=numero_arriviN1;i<arrivi_totali;i++)
    Neg[i]=N2[i-numero_arriviN1];
    for(i=0;i<arrivi_totali;i++) {
    printf("\n\nCodice modello:%d, prezzo vendita:%f, tot pezzi:%d\n\n",
    Neg[i].c.codice_modello,Neg[i].prezzo_vendita,Neg[i].pezzi_arrivati_modello);}
    for (i=1;i<arrivi_totali;i++)
    {
    tmp[i]=Neg[i];
    for (j= i-1;(j>=0) && (Neg[j].prezzo_vendita>tmp[i].prezzo_vendita);j--)
    Neg[j+1]=Neg[j];
    Neg[j+1]=tmp[i];
    }
    for(i=0;i<arrivi_totali;i++)
    v[i]=Neg[i].c.codice_modello;
    }


    struct nodo{
    scheda_magazzino cellulare;
    struct nodo *next;};


    void crealista(N Neg, int numero_arrivi) {
    struct nodo *testaL1;
    struct nodo *nuovoElementoL1;
    testaL1=NULL;
    struct nodo *testaL2;
    struct nodo *nuovoElementoL2;
    testaL2=NULL;
    int i;
    for(i=0;i<numero_arrivi;i++) {
    if(Neg[i].c.peso>100)
    {
    nuovoElementoL1=(struct nodo*)malloc(sizeof(struct nodo));
    nuovoElementoL1->cellulare=Neg[i];
    nuovoElementoL1->next=testaL1;
    testaL1=nuovoElementoL1;
    }
    else if(Neg[i].c.peso<100)
    {
    nuovoElementoL2=(struct nodo*)malloc(sizeof(struct nodo));
    nuovoElementoL2->cellulare=Neg[i];
    nuovoElementoL2->next=testaL2;
    testaL2=nuovoElementoL2;
    }
    }
    struct nodo *tmp;
    tmp=testaL1;
    while(tmp!=NULL)
    {
    printf("%d ",tmp->cellulare.c.codice_modello);
    tmp=tmp->next;
    }
    }


    void stampaS(S S1) {
    int i=0;
    for(i=0;i<Smax;i++) {
    printf("\n\nCodice modello:%d, durata batteria:%d, peso:%d, prezzo acquisto:%f, tot pezzi:%d\n\n",
    S1[i].codice_modello,S1[i].durata_batteria,S1[i].peso,S1[i].prezzo_acquisto,S1[i].tot_pezzi_modello);}
    }

    void stampaN(N Neg) {
    int i=0;
    for(i=0;i<Nmax;i++) {
    printf("\n\nCodice modello:%d, prezzo vendita:%f, tot pezzi:%d\n\n",
    Neg[i].c.codice_modello,Neg[i].prezzo_vendita,Neg[i].pezzi_arrivati_modello);}
    }



    La funzione "crealista" non funziona, deve esserci un errore negli if ma non sono riuscito a trovarlo.
    Per il resto funziona anche se sicuramente ci saranno state soluzioni migliori per risolvere l'esercizio.
    Grazie mille a chi mi darà qualche dritta,
    ciao

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Guarda ... purtroppo la maggior parte dei partecipanti non ha il tempo di prendere tutto il programma, compilarlo e controllarlo, tanto meno a scriverne uno migliore per proportelo.

    Se indichi esattamente il problema che hai, circoscrivendolo, avrai maggiori possibilità di avere risposte ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,304
    Originariamente inviato da oregon
    Guarda ... purtroppo la maggior parte dei partecipanti non ha il tempo di prendere tutto il programma, compilarlo e controllarlo, tanto meno a scriverne uno migliore per proportelo.

    Se indichi esattamente il problema che hai, circoscrivendolo, avrai maggiori possibilità di avere risposte ...
    Avrai anche maggiori possibilità, seguendo quanto espressamente richiesto dal Regolamento interno per quanto riguarda i titoli delle discussioni ed il posting di codice: ovvero, usando un titolo che faccia capire esattamente la problematica trattata e usando gli appositi tag CODE, incollandoci all'interno codice indentato.

    Buttare del codice così, all'interno del messaggio, senza l'uso degli appositi tag, rende il tutto illeggibile e, di conseguenza, nessuno avrà voglia di guardarlo.

    Uso dei tag CODE:

    [CODE]
    Poi si incolla il codice, indentato
    [/CODE]

    Riapri una nuova discussione, seguendo quanto indicato nel regolamento interno.

    Questa discussione la devo chiudere.


    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.