Program in C x esame di ing informatica AIUTO!!!!

di il
26 risposte

26 Risposte - Pagina 2

  • Re: Program in C x esame di ing informatica AIUTO!!!!

    Perfetto (10/10 a prima vista)!

    Vedo che hai pienamente appreso tutti i concetti. Immagino che era una faticaccia, ma ne è valso la pena.

    Giovanni
    ---
    http://www.y2ksw.com/vbulletin
  • Re: Program in C x esame di ing informatica AIUTO!!!!

    Il programma così semplice non mi piaceva... ho aggiunto delle cose.. nel pomeriggio lo metto on-line e mi dici se va bene... è perchè ho avuto un bravo prof... grazie mille gio!!!
  • Re: Program in C x esame di ing informatica AIUTO!!!!

    Ecco il programma completo.. che ne pensi????
    Grazie Maldengo
    _________________________________________________________
    /*Programma di gestione ore e spese per l'attività di un tecnico,
    prima scrittura effettuata il 13 ottobre 2004*/

    #include <stdio.h>
    #define OreOrdinarie=8;
    #define OreStraordinarie=1;
    #define CostoOrdinario=7.20;
    #define CostoStraordinario=8.50;
    #define CostoRecupero=8.70;


    typedef struct
    {
    int OreRecupero;
    int OreTot;
    }Ore;

    typedef struct
    {
    float Materiali;
    float Pranzi;
    float Parcheggi;
    float SpeseTot;
    }Spese;

    typedef struct
    {
    float GuadagnoOrdinario;
    float GuadagnoStraordinario;
    float GuadagnoRecupero;
    float GuadagnoTot;
    }Guadagno;

    int Anno;
    int Mese;
    int Giorno;
    float Acconti;
    float SpeseVere;
    Ore OreTotali;
    Spese SpeseTotali;
    Guadagno GuadagnoTotale;

    main()
    {
    printf("Inserisci Anno\n");
    scanf("%d", &Anno);
    while(Anno<2004 || 2007>Anno)
    {
    printf("La data è errata: Inserisci nuovamente l'anno");
    scanf("%d", &Anno);
    }
    printf("Inserisci Mese\n");
    scanf("%d", &Mese);
    while(Mese<01 || Mese>12)
    {
    printf("La data è errata: Inserisci nuovamente il mese");
    scanf("%d", &Mese);
    }
    printf("Inserisci Giorno\n");
    scanf("%d", &Giorno);
    while(Giorno<01 || Giorno>31)
    {
    printf("La data è errata: Inserisci nuovamente il giorno");
    scanf("%d", &Mese);
    }
    printf("Inserisci ore effettuate");
    scanf("%d",&OreTotali.OreTot);

    while(OreTotali.OreTot>24)
    {
    printf("Le ore sono errate: inserisci nuovamente le ore");
    scanf("&d", &OreTotali.OreTot);
    }

    OreTotali.OreRecupero = OreTotali.OreTot-OreOrdinarie-OreStraordinarie;

    printf ("Inserisci spese per materiali");
    scanf("%f", &SpeseTotali.Materiali);

    printf ("Inserisci spese per pranzi");
    scanf("%f", &SpeseTotali.Pranzi);

    while (SpeseTotali.Pranzi>12)
    {
    printf("Le spese per il pranzo sono errate: Il rimborso per i pranzi è al massimo 12€. Inserisci nuovamente le spese");
    scanf("%f", &SpeseTotali.Pranzi);
    }
    printf ("Inserisci spese per parcheggi");
    scanf("%f", &SpeseTotali.Parcheggi);

    SpeseTotali.SpeseTot = SpeseTotali.Materiali+SpeseTotali.Pranzi+SpeseTotali.Parcheggi;

    printf("Inserisci acconti ricevuti");
    scanf("%f", &Acconti);

    printf ("Riepilogo dei dati inseriti oggi\n");
    printf ("Oggi %d %d %d hai effettuato %d ore,\n tra cui %d ore ordinarie,\n %d ore straordinarie, \n e %d ore di recupero" OreTotali.OreTot, OreOrdinarie, OreStraordinarie, OreTotali.OreRecupero);
    printf ("Hai sostenuto %f € di spese,\n tra cui %f € di materiali,\n %f € di pranzi,\n e %f € di parcheggi" SpeseTotali.SpeseTot, SpeseTotali.Materiali, SpeseTotali.Pranzi, SpeseTotali.Parcheggi);
    printf ("Hai ricevuto %f € di acconti\n\n\n\n\n" Acconti);

    if(Acconti>SpeseTotali.SpeseTot)
    {
    SpeseVere=Acconti-SpeseTotali.SpeseTot;
    printf("Detraendo le spese, hai ancora %d € di acconti da utilizzare\n" SpeseVere);

    }
    else if(Acconti<SpeseTotali.SpeseTot)
    {

    SpeseVere=SpeseTotali.SpeseTot-Acconti;
    printf("Detraendo gli acconti, le spese di oggi ammonta a %d\n" SpeseVere);
    }
    else
    {
    SpeseVere=SpeseTotali.SpeseTot-Acconti;
    printf("Gli acconti coprono tutte le spese\n");

    }

    GuadagnoTotale.GuadagnoOrdinario=CostoOrdinario*OreOrdinarie;
    GuadagnoTotale.GuadagnoStraordinario=CostoStraordinario*OreStraordinarie;
    GuadagnoTotale.GuadagnoRecupero=CostoRecupero*OreTotali.OreRecupero;
    GuadagnoTotale.GuadagnoTot=GuadagnoTotale.GuadagnoOrdinario+GuadagnoTotale.GuadagnoStraordinario+GuadagnoTotale.GuadagnoRecupero+Acconti-SpeseTotali.SpeseTot;

    printf("In conclusione oggi hai gudagnato %f € !\n" GuadagnoTotale.GuadagnoTot);
    printf("Bravo papà!!");





    }
    _______________________________________________________________
  • Re: Program in C x esame di ing informatica AIUTO!!!!

    E con questo hai appreso la seconda regola del programmatore, regole che sono:

    Prima facciamolo funzionare, poi più bello e funzionale, e dopo, per ultimo, veloce ed efficiente.

    Questi sono belli propositi, ma di solito non si supera mai la prima fase, perché i clienti hanno fretta e vogliono spendere poco. Poi, soprattutto se proprietari del codice, si rendono conto che per modificare il codice o aggiungere una funzionalità, non ci capiscono nulla, e dovranno abbellire per forza. Intanto hanno già guadagnato una paccata di soldi, e i loro clienti chiedono delle chicche e massima velocità, e così si arriva al prodotto finale.

    Con l'esperienza però, che si traduce in molto tempo, diciamo dieci anni, si costringe il cliente primario di attendere, prima di averlo fatto bello, convincendolo che l'assistenza al prodotto sarà molto più semplice, e difatti lo è.

    Codice che rispetta le regole può essere letto con molta rapidità, e compresa la volo. Io ad esempio, riesco a leggere il codice mentre scorro con Pagina Su/Giù a tutto gas, e trovare il posto giusto per applicare la modifica. Ci metto pocchissima documentazione, che facilita questo scorrimento, e quando occorre, soltanto all'inizio di punti cruciali, di solito all'inizio di una procedura. Un programma di 30 mila righe, e questi sono la norma, scorro in qualche secondo, e so subito dove mettere la mano. Con codice che è stato scritto da altri, ma sempre con le regole indicate, ci metto un po' di più, ma non molto. Il "Spaghetti Code" devo invece spulciare riga per riga e mi ci vuole anche una settimana per comprendere il funzionamento di una singola procedura. E' per questo che insisto molto sullo stile di scrittura, e so dai miei colleghi che è essenziale.

    Per fare soldi, bisogna essere bravi, soprattutto nello stile. I trucchi si imparano col tempo e all'occasione.

    Più in là con lo studio, avrete da fare con le matrici. Non degli array a due dimensioni per immagazzinare dati, ma per effettuare calcoli efficienti e molto complicati. Se non hai idea a cosa servono, ti fa una fatica enorme, e non ha senso. Se invece ti interessi nell'intelligenza artificiale (es. OCR), o nella compressione immagini e audio (MPEG), ti è molto più semplice capire il perché, e quindi non ti pesa la complessità.

    Purtroppo si danno troppo peso alle matrici, e non si spiegano le applicazioni veramente pratici, perché i prof spesso non capiscono neanche loro, e conoscono solo la teoria, e per di più non sono entusiasti neanche loro della teoria che devono divulgare. Per cui risulta una materia talmente pesante che non si dovrebbe neanche insegnare, perché arrivata la necessità, impari in un lampo, e comprendi...

    Vi auguro un bel periodo di studio e soprattutto maestri in gamba, che vi possono comunicare, oltre alle conoscenze, anche il senso.

    Giovanni
    ---
    http://www.y2ksw.com/vbulletin
  • Re: Program in C x esame di ing informatica AIUTO!!!!

    Ti ringrazio per questi tuoi consigli.. ma sono al secondo mese del primo anno di università.. e al mio prof per ora interessa che la sintassi sia corretta, ordinata e pulita...dopo 10 lezioni teoriche di c non è che possa pretendere tanto altro.. anzi.. tu sai come inserire i files nel mio programma? se non fosse troppo complicato mi piacerebbe aggiungerli, ho l'esame venerdì mattina...
    Grazie mille

    Maldengo
  • Re: Program in C x esame di ing informatica AIUTO!!!!

    Zanzan, maldengo sneti lunedì mi venite a prendere in stazione vero tu e Matteo o davanti alla fontana.. il treno è all'una e mezza giusto?!!!!!

    Eleonora
  • Re: Program in C x esame di ing informatica AIUTO!!!!

    Giusto scrivere


    while(x.Stato==Italia)
    printf (“La persona …(nome persona) è italiana\n”)


    poi se voglio scrivere che f

    intantochè il cognome della persona 1= cognome della persona 2 o della persona 3 o della persona 4 fino a 10 cm scrivo
    printf ("la persona 1 e 2 sono parenti"), lo stesso se voglio scrivere

    fintantochè la via della persona uno= via persona 2 o 3o....10 e hanno lo stesso numero di telefono

    printf ("le persone 1 e 2 abitano nella stessa casa")


    cm faccio? i files quasi quasi non li metto.... non ci capisco dentro niente


    Eleonora

    inginfoaria
    Membro 1° livello
    21 Risposte Data : 23/10/2004 - 16:09:59 Quote
    --------------------------------------------------------------------------------
    ancora una cosa

    If (x.TelefonoUfficio=x.TelefonoCasa)
    printf (“Ufficio==Casa\n”);

    else
    printf (“Ufficio!=Casa\n”);

    return 0; è giusto?
    scusa se ti rompo... ma comincia l'agitazione!!!!!!!!!!!



    Eleonora
  • Re: Program in C x esame di ing informatica AIUTO!!!!

    Si, ma io ti consiglierei di prendere il treno prima.. dobbiamo andare su a piedi....gli esercizi iniziano alle due... ne hai uno alle 13.05, ti faccio sapere se alla fontana o in stazione... se matteo mi conferma altrimenti prendo il treno con te a trento.

    Baci, Maldengo

    Ps: Dai non essere triste!!!
  • Re: Program in C x esame di ing informatica AIUTO!!!!

    Vedi l'altro thread per la risposta...

    Giovanni
    ---
    http://www.y2ksw.com/vbulletin
  • Re: Program in C x esame di ing informatica AIUTO!!!!

    Grazie per tutto Gio!!!!!! Sei un ottimo maestro!
  • Re: Program in C x esame di ing informatica AIUTO!!!!

    Grazie per tutto Gio!!!!!! Sei un ottimo maestro!
  • Re: Program in C x esame di ing informatica AIUTO!!!!

    Mi associo a quanto hai detto tu maldengo



    ho trovato sul libro che si fa:

    FILE *Rubri (nome file)

    void ServiSalvataggio (void)
    void ServiModifica (void) (non so perchè si usa void)
    void ServiEleiminazione(void) (a cosa serve)

    ...... (tutte le altre variabili, Nmax, Contatore... struct....)


    main()

    printf
    scanf.....quello che ho già scritto


    poi [variabili e tipi necessari per la creazione di un menu... dichiarazioni... non so cosa scrivere];

    while Contatore != NMax o Contatore<=NMax (ho sostit do\while con while e Contatore co Fine = False )

    {puts ("\n Sono disponibili le seguenti operazioni. Per selezionare un'operazione premere il tasto a destra e invio\n");

    puts ("Salvataggio Persona (ox?) S");

    puts ("Modifica Persona M");

    puts (Eliminazione Persona);


    switch

    {case 'S': ServiSalvataggio ();
    break;

    case M: ServiMOdifica ();
    break;

    case E: ServiEliminazione):
    break}
    }


    però non so perchè si sa puts invece che fprintf (per i file)e se serve mettere switch... per cosa... insomma devo creare un menù dovo se calchi una lettera corrisponde un'operazione!!!!é questo in pratica che devo fare!!!!!!!!1


    Eleonora

    inginfoaria
    Membro 1° livello
    25 Risposte Data : 24/10/2004 - 12:45:50 Quote
    --------------------------------------------------------------------------------
    if (x.TelefonoUfficio==x.TelefonoCasa)

    {
    printf (“Ufficio==Casa\n”);
    };

    else

    {
    printf (“Ufficio!=Casa\n”);
    };

    if (x[Contatore].Cognome==x[Contatore+1].Cognome)

    {
    printf (“Le persone sono parenti\n”)
    };
    if (x[Contatore].Via==x[Contatore+1].Via)

    {
    printf (“le persone abitano nella stessa casa\n”)


    è giusto?grazie mille!!!!

    Eleonora

    inginfoaria
    Membro 1° livello
    25 Risposte Data : 25/10/2004 - 08:47:01 Quote
    --------------------------------------------------------------------------------
    altre cosette così quendo rispondi risp a tutti e 3 i miei messaggi!!!

    1) perchè devo scrivere persona x[NMAx]?

    2)perchè scrivo printf("inserisci nome"); scanf(x[Contatore].... e non x[NMax]?

    3) al posto di Contatore potevo mettere un'altra cosa es Rubrica o altro?

    grazie

    NB: vedi anche i messaggi sopra

    Eleonora



    Eleonora
Devi accedere o registrarti per scrivere nel forum
26 risposte