[C++] Problema [Ciclo Iterativo]

Sentenza1
Ecco il problema proposto sul libro:

- Si vuole automatizzare il calcolo delle ore lavorative settimanali da retribuire a ciascun dipendente di una ditta. Scrivi un algoritmo che, date in input l'ora di entrata e quella di uscita riportate nel cartellino personale, calcoli approssimativamente, il totale delle ore da retribuire.

Come al solito, il libro ci dice di seguire alcuni parametri, forse per aiutarci, boh:

1) E' possibile usare i costrutti: While e Do-While, ma non For;
2) Scrivere un' analisi del problema;
3) I dati non vengono acquisiti tramite file, ma tramite standard input;
4) La condizione del While o Do-While deve essere usata con degli operatori di relazione (=,<,>,>=,<=,!=).

Io ne avevo scritto uno in pseudocodice, proprio con l'acquisizione tramite file. Mi aiutereste? Devo crearlo in C++.
Io avevo pensato così:

-inizializza a 0 i due contatori
-Apri il file con gli orari di entrata
-Finchè non arrivi su EOF (fine del file)
- Leggi il numero successivo (o il primo se è la prima lettura) e memorizzalo in una variabile "orario di ingresso"
-incrementa un contatore per le entrate [ti servirà per un controllo]
-Apri il file con gli orari di uscitaentrata
-Finchè non arrivi su EOF (fine del file)
- Leggi il numero successivo (o il primo se è la prima lettura) e memorizzalo in una variabile "orario di uscita"
-incrementa un contatore per le uscite [ti servità per un controllo]
-Se il contatore delle uscite e delle entrate sono differenti, qualcuno non ha fatto una timbratura! Manda un messaggio di errore
-Altrimenti: paga da corrispondere = (orario uscita - orario entrata) * paga oraria.
-Stampa la paga da corrispondere (su file o su standard output, come preferisci tu).

Come potrei tradurre un programma simile, se giusto, in C++? Non ne sono molto pratico.. mi potreste aiutare a scriverlo, e a capire se l'ho risolto bene?

Risposte
vict85
"Sentenza":
[...]

Come al solito, il libro ci dice di seguire alcuni parametri, forse per aiutarci, boh:

1) E' possibile usare i costrutti: While e Do-While, ma non For;
2) Scrivere un' analisi del problema;
3) I dati non vengono acquisiti tramite file, ma tramite standard input;
4) La condizione del While o Do-While deve essere usata con degli operatori di relazione (=,<,>,>=,<=,!=).


Penso che il punto 3 sia l'unico di una qualche utilità. Degli altri non ne capisco il senso.

"Sentenza":
Io ne avevo scritto uno in pseudocodice, proprio con l'acquisizione tramite file. Mi aiutereste? Devo crearlo in C++.


Non vedo il problema del cambio di input. Devo supporre che il problema nel linguaggio di programmazione? Lo pseudocodice cambia solo da dove arriva il dato e per il resto rimane inalterato.

"Sentenza":
Io avevo pensato così:

-inizializza a 0 i due contatori
-Apri il file con gli orari di entrata
-Finchè non arrivi su EOF (fine del file)
- Leggi il numero successivo (o il primo se è la prima lettura) e memorizzalo in una variabile "orario di ingresso"
-incrementa un contatore per le entrate [ti servirà per un controllo]
-Apri il file con gli orari di uscitaentrata
-Finchè non arrivi su EOF (fine del file)
- Leggi il numero successivo (o il primo se è la prima lettura) e memorizzalo in una variabile "orario di uscita"
-incrementa un contatore per le uscite [ti servità per un controllo]
-Se il contatore delle uscite e delle entrate sono differenti, qualcuno non ha fatto una timbratura! Manda un messaggio di errore
-Altrimenti: paga da corrispondere = (orario uscita - orario entrata) * paga oraria.
-Stampa la paga da corrispondere (su file o su standard output, come preferisci tu).

Come potrei tradurre un programma simile, se giusto, in C++? Non ne sono molto pratico.. mi potreste aiutare a scriverlo, e a capire se l'ho risolto bene?


Personalmente penso sia più costruttivo costruire avere una lista/array/altra stuttura dati simili in cui si memorizzano i vari dipendenti (la decisione della struttura potrebbe dipendere da vari fattori). Diciamo che per ogni dipendente memorizzi nome cognome ore comulare e paga oraria (questa potrebbe essere invariante e quindi nel caso semplicemente una costante esterna).

Io direi...

0) Pone tutte le ore cumulate a 0. Setta i vari salari e i nomi (questo può essere settato dall'utente, dal programmatore o preso da un file). A livello di algoritmo è ininfluente.
1) chiede se hai finito o se vuoi aggiornare un dipendente
-> aggiorni
2) se aggiorni ti chiede chi vuoi aggiornare
3) trova la "scheda del dipendente"
4) Chiede quindi ora di entrata e ora di uscita
5) Sottrae le due e aggiorna le ore cumulate
6) ritorna al punto 1)
-> finito
7) Calcola la somma da pagare per ogni dipendente e la stampa a video.

Tutto sommato la gestione dei file complicherebbe solo le cose...

Umby2
"Sentenza":

-Se il contatore delle uscite e delle entrate sono differenti, qualcuno non ha fatto una timbratura! Manda un messaggio di errore


Questo controllo andrebbe fatto alla fine delle operazioni di lettura.
E' evidente che nel ciclo i due contatori saranno sempre uguali.

Inoltre, i due file dovrebbero contenere anche la matricola del dipendente (numero di badge), altrimenti se ci manca una lettura ( in ingresso o in uscita ), non riuscirai mai a capire quale ci manca, e legare tutte le altre timbrature tra loro.

Rispondi
Per rispondere a questa discussione devi prima effettuare il login.