[c] non so da dove devo partire per fare questo esercizio
ciao a tutti..
l'esercizio è questo. lo ritengo molto utile in ottica esame, ma il punto è che non so da dove partire
il testo è questo:
http://img638.imageshack.us/img638/3088/immaginehcv.jpg
io direi di andare per punti, quindi di iniziare dal leggere i dati del cliente.
prima di tutto devo sapere se servono funzioni e/o struct per risolverlo.. io direi di no...
l'esercizio è questo. lo ritengo molto utile in ottica esame, ma il punto è che non so da dove partire
il testo è questo:
http://img638.imageshack.us/img638/3088/immaginehcv.jpg
io direi di andare per punti, quindi di iniziare dal leggere i dati del cliente.
prima di tutto devo sapere se servono funzioni e/o struct per risolverlo.. io direi di no...
Risposte
Io farei la lettura e scrittura del file nello stesso ciclo in modo da non dover memorizzare tutti i valori, ma solo quelli dell'ultima riga letta. Puoi farlo senza funzioni o struct anche se non c'è nessuna regola. È comunque certamente abbastanza corto da poter essere scritto tutto nel main se è questa la tua intenzione. La logica del programma è comunque principalmente dettata dall'opzione -F o -S. Se non sai da dove iniziare prova a limitarti ad una delle due e scrivere solo quello. Scrivere il codice per la lettura della linea di comando è un'altro punto da cui potresti iniziare.
La lettura dei parametri dalla linea di comando non dovrebbe essere un problema data la definizione del main.....
int main(int argc, char *argv)
.....
int main(int argc, char *argv)
.....

"apatriarca":
Io farei la lettura e scrittura del file nello stesso ciclo in modo da non dover memorizzare tutti i valori, ma solo quelli dell'ultima riga letta. Puoi farlo senza funzioni o struct anche se non c'è nessuna regola. È comunque certamente abbastanza corto da poter essere scritto tutto nel main se è questa la tua intenzione. La logica del programma è comunque principalmente dettata dall'opzione -F o -S. Se non sai da dove iniziare prova a limitarti ad una delle due e scrivere solo quello. Scrivere il codice per la lettura della linea di comando è un'altro punto da cui potresti iniziare.
ok allora partirei dal main.
che variabilli servono e quale sarebbe una possibile scrittura del blocco per dire che è impossibile aprire il file?[/code]
Quella parte del codice è abbastanza standard. Ma hai fatto la lettura dei file in C?
"apatriarca":
Quella parte del codice è abbastanza standard. Ma hai fatto la lettura dei file in C?
finalmente ho scritto un programma decente.
che ve ne pare? avrei un problema. per vedere se funziona, devo lanciare il programma da riga di comando. come faccio?
#include <stdio.h> #include <stdlib.h> #define N_AZIENDE 5 int main (int argc, char* argv[]) { FILE *fin, *fout; int cliente, azienda, operazione, v[N_AZIENDE], salva, totale = 0; float qta; if(argc != 7) { fprintf (stderr,"Errore nel numero di argomenti passati al programma\n"); return (-1); } if((fin = fopen(argv[1],"r")) == NULL) { fprintf (stderr,"Errore in apertura file di ingresso\n"); return (-2) } /* il file di output lo apriamo solo se necessario */ cliente = atoi(argv[2]); azienda = atoi(argv[3]) - 1; operazione = argv[4][0]; qta = atof(argv[5]); if (argv[6][1] == ‘S’) { salva = 0; } else /* non sono previsti errori ....*/ { salva = 1; /* apriamo il file di output */ if((fout fopen(argv[7],"w")) == NULL) fprintf (stderr,"Errore in apertura file di uscita\n"); } /* tutte e tre le operazioni richiedono di scandire il file */ while(fscanf(fin,"%d %d %d %d %d %d", &cc, &q[0], &q[1], &q[2], &q[3], &q[4]) == 6) { if(cc == cliente) { switch(operazione) { case 'A': q[azienda] += qta; break; case 'V': q[azienda] -= qta; break; case 'G': q[azienda] = q[azienda] * (1 + qta/100.0); break; } } if (salva) { fprintf(fout,"%d %d %d %d %d %d\n", cc, q[0], q[1], q[2], q[3], q[4]); } else { /* accumulo il totale dell’azienda, da stampare alla fine */ totale += q[azienda]; } } if (!salva) { printf(“Numero totale di azione dell’azienda %d: %4d\n”, azienda, totale); } fclose(fin); if (salva) { fclose(fout); } }
Immagino tu stia lavorando in Windows. In questo caso devi far partire il prompt di MS-DOS (non sono sicuro che fosse questo il nome italiano perché sto usando un Windows in inglese) che trovi tra gli accessori, spostarti nella cartella corretta usando il comando cd seguito dal nome della tua cartella e infine digitare il nome del programma seguito dagli argomenti che gli vuoi passare. Se stai però usando un qualche IDE (Visual Studio, Dev-C++, Code::Blocks..) è però possibile fare tutto senza uscire dal programma andando nelle opzioni del progetto e scrivendo gli argomenti da passare al programma all'esecuzione (i dettagli cambiano ovviamente da programma a programma).
Il programma contiene comunque qualche piccolo errore come la richiesta che argc sia 7 quando il testo richiede in un caso che sia 8. Non ho ancora ben studiato il codice e quindi commento il codice più tardi.
P.S. Non creare due discussione sulla stessa domanda.
Il programma contiene comunque qualche piccolo errore come la richiesta che argc sia 7 quando il testo richiede in un caso che sia 8. Non ho ancora ben studiato il codice e quindi commento il codice più tardi.
P.S. Non creare due discussione sulla stessa domanda.
"apatriarca":
Immagino tu stia lavorando in Windows. In questo caso devi far partire il prompt di MS-DOS (non sono sicuro che fosse questo il nome italiano perché sto usando un Windows in inglese) che trovi tra gli accessori, spostarti nella cartella corretta usando il comando cd seguito dal nome della tua cartella e infine digitare il nome del programma seguito dagli argomenti che gli vuoi passare. Se stai però usando un qualche IDE (Visual Studio, Dev-C++, Code::Blocks..) è però possibile fare tutto senza uscire dal programma andando nelle opzioni del progetto e scrivendo gli argomenti da passare al programma all'esecuzione (i dettagli cambiano ovviamente da programma a programma).
Il programma contiene comunque qualche piccolo errore come la richiesta che argc sia 7 quando il testo richiede in un caso che sia 8. Non ho ancora ben studiato il codice e quindi commento il codice più tardi.
P.S. Non creare due discussione sulla stessa domanda.
grazie.
per il codice c'è tempo.
ho un problema. dalla prompt sono arrivato alla cartella in cui è contenuto il programma:
http://img829.imageshack.us/img829/9937/immaginepv.jpg
il nome direi che è "esa" ma quando provo a scrivere nella prompt mi dice:
http://img828.imageshack.us/img828/1318/immaginera.jpg
(ho fatto un po' di tentativi
Il tuo programma si chiama main e non gestione. Devi quindi rinominare il file oppure scrivere main al posto di gestione.
"apatriarca":
Il tuo programma si chiama main e non gestione. Devi quindi rinominare il file oppure scrivere main al posto di gestione.
OK
ora funziona.. effettivamente il numero di argomenti dev'essere uguale a 8.
rimane comunque il fatto che se voglio stampare a video e non su file, il numero di argomenti necessari torna a essere 7...