Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
Pascal - Help me...non riesco a risolvere questo problema in linguaggio di programmazione PASCAL =(
Forum - Pascal - Help me...non riesco a risolvere questo problema in linguaggio di programmazione PASCAL =( - Pagina 2

Pagine: [ 1 2 3 ] Precedente | Prossimo
Avatar
Poggi Marco (Member)
Guru


Messaggi: 969
Iscritto: 05/01/2010

Segnala al moderatore
Postato alle 22:32
Lunedì, 15/02/2010
Ciao!

Per risolvere l' esercizio, io userei dei record, da scrivere e leggere su file, in questo modo:

Codice sorgente - presumibilmente Delphi

  1. program RisultatiFineAnno;
  2. uses crt;
  3.  type tclasse=record  // record riguardante ogni classe.
  4.    classe:byte;
  5.    Iscritti, promossi, bocciati:word;
  6.    PercPromossi,PercBocciati:real;
  7.   end;
  8.  
  9.   var f: file of tclasse; // Nome logico del file
  10.       v:tclasse; // record che userò per leggettura e scrittura su file
  11.       percorso:string;
  12.       i:integer;
  13.  
  14. procedure GeneraCasuale(var c:tclasse; n:integer);
  15. begin
  16.  with c do // accedo ai campi di c
  17.  begin
  18.   classe:=n;
  19.   iscritti:=random(200);
  20.   promossi:=1+random(iscritti);
  21.   bocciati:=iscritti-promossi;
  22.   PercPromossi:=100*(promossi/iscritti);
  23.   PercBocciati:=100*(bocciati/iscritti);
  24.  end;
  25. end;
  26.  
  27. begin
  28.  clrscr;
  29.  GetDir(0, percorso); // ricerca della cartella in cui si trova il file.
  30.  assign(f, percorso+'\classi.dat');  // apertura del file
  31.  
  32.  rewrite(f); { attenzione! Non faccio alcun controllo su
  33.                un eventuale file "classi.dat" preesistente! }
  34.  
  35.  { inserzione dati }
  36.  
  37.  randomize;
  38.  for i:=1 to 5 do
  39.  begin
  40.   GeneraCasuale(v, i); // per brevita genero casualmente i dati da inserire
  41.   write(f, v); // scrittura su file del record
  42.  end;
  43.  
  44.  { non faccio il confronto con i dati dell' anno precedente siccome non conosco
  45.    la struttura esatta del file testuele}
  46.  
  47.   close(f); // chiusura del file, necessaria per salvare i dati
  48.  
  49.  { Eseguo una rilettura del file}
  50.  
  51.  reset(f); { riapertura del file. Attenzione!
  52.             Per brevità do per scontato che il file "classi.dat" esista.}
  53.  
  54.  for i:=0 to 4 do { i file tipicizzati si possono considerare vettori
  55.                     di record. Essi partono sempre da 0 e hanno una lunghezza
  56.                     indefinita, perciò per leggere i record delle 5 classi,
  57.                     partirò con un' indice a zero per arrivare fino a 4}
  58.  begin
  59.   seek(f, i); // pisizionamento sull' i_esimo record del file
  60.   read(f, v); {lettura del record.
  61.                 comunque, l' istruzione read su file fa avanzare l' indice
  62.                 di lettura di un record sul file}
  63.   with v do // accedo ai campi di v
  64.   begin
  65.    writeln('Classe ',classe,' iscritti: ',iscritti:4);
  66.    writeln('Promossi: ',promossi:4,' bocciati: ',bocciati:4);
  67.    writeln('Percentuali: promossi ',PercPromossi:6:2,'% bocciati ',PercBocciati:6:2,'%');
  68.    writeln('----------------------------');
  69.   end;
  70.  end;
  71.  writeln('####################');
  72.   { infine "conto" quanti record sono presenti nel file.
  73.     Istruzione utile per aggiungere eventuali record alla fine del file}
  74.    writeln('Nel file sono presenti:',FileSize(f),' record.');
  75.  readln;
  76.  close(f);
  77. end.


PM Quote
Avatar
Mariano90 (Normal User)
Newbie


Messaggi: 7
Iscritto: 14/02/2010

Segnala al moderatore
Postato alle 11:43
Venerdì, 05/03/2010
Scusatemi x la lunga assenza dal sito ma ho avuto problemi con la linea. Kmq il confronto bisogna farlo tra i dati dell'anno precedente(strutturato in un file di testo) e con i dati dell'anno in corso. Poi un'altra cosa che non mi è stata molto chiara la procedura che genera casualmente i dati. A scuola facciamo l'inserimento da tastiera solo che in realtà questo è uno dei primi programmi svolti seriamente quindi se x cortesia potreste postarmi anke questo. A prescindere dalle richieste di aiuto che vi sto proponendo, ringrazio tutti di cuore x la collaborazione ;-)

PM Quote
Avatar
Poggi Marco (Member)
Guru


Messaggi: 969
Iscritto: 05/01/2010

Segnala al moderatore
Postato alle 18:53
Venerdì, 05/03/2010
Ciao!
Nel programma non ho fatto il confronto perchè non conosco esattamente con' è strutturato il file di testo. Supponendo di avere un file testuale contenente solo numeri, per la lettura, si userà la funzione " read(file, Variabile ); " dove file è il nome logico del file, mentre in Variabile, verra salvato il valore letto sul file.

Ho cselto di generare casualmente i dati in modo da poter testare velocemente il programma. Per fare ciò ho utilizzato la funzione " random( limite ) ". Essa genera un numero casuale intero compreso tra 0 e limite-1. Prima di utilizzare questa funzione, però bisogna "inizializzarala" tramite la funzione "randomize", altrimenti verrà generata sempre una sequenza fissa di numeri.



PM Quote
Avatar
Mariano90 (Normal User)
Newbie


Messaggi: 7
Iscritto: 14/02/2010

Segnala al moderatore
Postato alle 19:50
Giovedì, 11/03/2010
Allora scusami, forse sono stato io poco chiaro. Ragionando...I file sono entrambi di tipo Txt e sono strutturati in questo modo x farti capire:

ANNO           CLASSE       ISCRITTI      PROMOSSI       BOCCIATI
2009-2010        1^E           20           10                10
2009-2010        3^B           25           22                 3
2009-2010        4^F           16           14                 2
2009-2010        5^C           12           12                  0
2009-2010        2^G           15           10                  5


Stessa cosa per l'altro file solo che cambia l'anno perchè è quello precedente(2008-2009). Una volta creati questi due file bisogna calcolare le percentuali dei bocciati e promossi e memorizzare i risultati in un file. Poi bisogna fare il confronto tra i due archivi(2008-2009 e 2009-2010) e stampare a video le differenze degli iscritti,dei promossi e dei bocciati rispetto all'anno in corso (2009-2010). Questo spiega anche che la procedura genera casuale non va bene,l'inserimento deve essere fatto dall'utente. La mia difficoltà ora sta nel tradurre quello che ho realizzato logicamente al linguaggio di programmazione Pascal. Spero di essere stato più chiaro rispetto a prima e comunque ti ringrazio per la tua collaborazione ;-)

Ultima modifica effettuata da Mariano90 il 11/03/2010 alle 19:52
PM Quote
Avatar
Poggi Marco (Member)
Guru


Messaggi: 969
Iscritto: 05/01/2010

Segnala al moderatore
Postato alle 21:06
Giovedì, 11/03/2010
Davvero un bel problema!
Essendo due file di testo,e pergiunta, con all' interno dei caratteri, l' estrazione dei dati è davvero complicata.

Non è possibile estrarre direttamente i valori, ma bisogna lavorere con le stringhe, sperando che la struttura dei file sia davvero regolare.

PM Quote
Avatar
Mariano90 (Normal User)
Newbie


Messaggi: 7
Iscritto: 14/02/2010

Segnala al moderatore
Postato alle 11:10
Venerdì, 12/03/2010
E se entrambi i file vengono creati con l'estensione .dat?? Non cambia nulla?

PM Quote
Avatar
cassin.simone (Member)
Guru


Messaggi: 1051
Iscritto: 03/06/2009

Segnala al moderatore
Postato alle 11:34
Venerdì, 12/03/2010
L'estensione non c'entra nulla. Quel che interessa è il file all'interno. Io consiglierei per questo programma i file xml ma non ho mai provato ad implementarli in pascal quindi non ti so' dire nulla...

PM Quote
Avatar
Poggi Marco (Member)
Guru


Messaggi: 969
Iscritto: 05/01/2010

Segnala al moderatore
Postato alle 18:56
Venerdì, 12/03/2010
cassin.simone ha ragione, tra l' altro l' estensione non è richiesta nei fita di testo e in quelli binari.
L' ideale in questo caso è utilizzare i file tipicizzati come ho fatto nel precedente esempio.

PM Quote
Pagine: [ 1 2 3 ] Precedente | Prossimo