Newsgroup: it.comp.lang.pascal
Titolo: it.comp.lang.pascal

Ho un problema a risolvere alcuni esercizi di programmazione in turbo
Pascal.
Poichè è da poco che mi occupo di programmazione, non sono ancora pratico
della materia. vi prego se possibile aiutatemi....
Esercizio 1
In  ogni rigo di un file di testo sono riportati nome e cognome di un
corridore ciclista, l anno di nascita, il numero di vittorie riportate e
il numero di piazzamenti tra i primi 5. Scrivere un algoritmo che
attribuisca ad ogni ciclista un punteggio nel seguente modo: 
10 punti per ogni vittoria riportata, 2 punti per ogni piazzamento e che
permetta la  stampa di tutti i ciclisti in ordine decrescente a partire
dal ciclista che ha ottenuto il punteggio maggiore. A parità di punteggio
prevale il corridore più anziano. Specificare quali definizioni di tipi  e
dichiarazioni di variabili occorrono.
Es.
Input:
Davide Rebellin           1970 4 5 <eoln>
Salvatore Commesso   1975 2 1 <eoln>
Sergio Barbero            1969 3 4 <eoln>
Oscar Camenzid 	        1969 1 6 <eoln><eof>
Output:
Davide Rebellin          punti 25
Sergio Barbero            punti 19
Oscar Camenzid          punti 11
Salvatore Commesso   punti  11
________________________________________________________________________________________________
Esercizio 2
In ogni rigo di un file di testo  sono riportati i dati anagrafici del
tipo seguente:
Abbate Carlo^ 	15	9	68<eoln>
Esposito Luigi^	23	11	61<eoln>
-----------------------------------------------------
-----------------------------------------------------
<eof>
Scrivere un algoritmo che dia in uscita solo i soggetti di età superiore a
16 anni.
________________________________________________________________________________________________
Esercizio 3
Scrivere un programma che, dato un file testo prova.txt estragga dal testo
tutti i caratteri di tipo numerico sostituendoli con spazi vuoti.
Memorizzare il file così corretto con il nome di prova1.txt.
Fare la somma dei numeri estratti.
Es.
	Ab73cqSw1yt
	Ab cq Sw yt
Mentre a video deve comparire 73 1 
Somma = 74
________________________________________________________________________________________________
Esercizio 4
Si abbia un file di tipo.txt contenente le seguenti informazioni relative
ai prodotti alimentari contenenti in un magazzino:
codice_prodotto (4 char), nome_prodotto (max 15 char),
quantità_acquistata(integer), quantità_venduta (integer),
data_scadenza_prodotto(8 char)<eoln>
Scrivere un algoritmo che legge i dati dal file.txt, li introduce in un
array di record e permette di :
ritrovare un singolo prodotto dato il codice, mostrando quanti pezzi sono
ancora disponibili e assegnata  una data a piacere mostrare quali prodotti
pesenti in magazzino non sono ancora scaduti a quella data.
Input:
AA35     Burro     500	20	13/06/2001<eoln>
YO21	Aceto 	250	100	05/06/2001<eoln>
ZK31 	Vino	150	130	07/06/2001<eoln>
W131	Acqua	200	50	15/06/2001<eoln>
Output:
Dammi il codice prodotto :Y021
Ci sono ancora 150 pezzi del prodotto Aceto
Dammi  una data : 12/06/2001
I prodotti non ancora scaduti alla data 12/06/2001 sono:
AA35     Burro     500	20	13/06/2001<eoln>
W131	Acqua	200	50	15/06/2001<eoln>
________________________________________________________________________________________________
Esercizio 5
Sia assegnato un testo nel quale sia stata mascherata, con un codice
cifrato, una sequenza di numeri interi. Si scriva un programma che
estragga i numeri nascosti nel testo, tenendo conto che:
- il testo è organizzato in righe ;
- ogni rigo del testo contiene un numero costituito al massimo di cinque
cifre;
- le cifre di un numero si ottengono contando le ripetizioni delle diverse
vocali presenti nel rigo (si faccia l ovvia ipotesi       
  che ogni vocale in un rigo, possa ripetersi al massimo 9 volte);
- la posizione di una cifra nel numero è data dall ordine in cui la
corrispondente vocale compare per la prima volta 
  nel rigo. Così se la prima vocale che compare nel rigo è la i , il
numero delle i nel rigo fornisce la prima cifra del                       
              numero, se la seconda vocale diversa è la u, il numero
complessivo di u,determina la seconda cifra del numero e  così  via.
Esempio:
Questa prova sembra	ueaoaea		1231
Essere davvero		eeeaeo		411
Semplice		eie		21
In uscita si produca la stampa dei successivi righi di testi con, a fianco
di ciascuna, il numero in esso nascosto.
________________________________________________________________________________________________
Esercizio 6
Sia dato un file di testo riguardante un insieme di soggetti di cui è
fornito il cognome seguito dalla nazionalità e dalla data di nascita,
giorno mese e anno. Nel primo rigo sono indicati nome e cognome
dell autore della registrazione e il numero di soggetti registrati.
Il file sarà così composto:
tipo dato                                                                 
esempio                                                                   
         rigo
stringa, integer<eoln>                                             Carlo
Tedesco ^10 08 1976                                                1
stringa  stringa^integer integer integer<eoln>        Rossi Italiano  ^22
12 1930                                                2
stringa  stringa^integer integer integer<eoln>        Smith Inglese  ^28
09 1990                                                3
------------------------------------------------------------------------------------------------------------------------------------
------------------------------------------------------------------------------------------------------------------------------------
<eof>
Leggere il file mostrando a video i nomi ordinati per nazionalità e con la
data di nascita.
________________________________________________________________________________________________
 
Esercizio 7
Sia dato un file testo di nome fisico  studenti.txt  contenente
informazioni sugli studenti di un corso . Il primo rigo contiene il nome
dello studente seguito dal carattere ^  da uno spazio e da un intero N
indicante il numero di esami sostenuti.
Le N righe successive contengono le informazioni sugli esami sostenuti.
Ognuna di queste righe è composta da un intero rappresentante un  codice
dell esame sostenuto, un intero rappresentante il voto, e un intero
rappresentante l anno in cui l esame è stato superato.
Dati un intero rappresentante un codice d esame, un intero M
rappresentante la media voto dello studente , ed un intero rappresentante
l anno, scrivere un algoritmo che dia in output il nome degli studenti con
media >=M che hanno sostenuto l esame prima dell anno stabilito.
Esempio:
Studenti.txt
Marco Rossi^3   <eoln>
3070 26	2001     <eoln> 
3080 24 2002     <eoln>
3090 25 2000     <eoln>
Antonio Sassi^1 <eoln>
Input
3070 24 2002
Output
Marco Rossi
________________________________________________________________________________________________
Esercizio 8
Un file di testo studenti.txt contiene informazioni su tutti gli studenti
di un corso di laurea. Nel primo rigo compare il nome dello studente
seguito dal numero di esami fatti. I righi successivi contengono ognuno il
nome dell esame fatto seguito dal voto riportato.
Esempio
Marco Gelsi ^3 <eoln>
Esame1^25<eoln>
Esame2^30<eoln>
Esame3^24<eoln>
Matteo Risi^2<eoln>
Esame1^27<eoln>
Esame2^28<eoln><eof>
Dato un valore n rappresentante la media scrivere un programma per
stampare i nomi degli studenti che hanno una media maggiore o uguale ad n.
________________________________________________________________________________________________
---------------------------------------------------------------------------
Messaggio inviato attraverso 
http://www.trucchiperpc.it
 - sezione newsgroup

 Esercizio 8
Leggi, al solito, il tuo file e già in fase di lettura potresti generare la
media per ogni studente poi dato un valore in input lo confronti con le
medie già calcolate.
Spero di esserti stata d'aiuto
--
LaFata | 
www.sosweetpages.it
 | 105400693
[CIT]L'amore è quando la mamma da al papà il
pezzo più buono del pollo. (Elena, 5 anni)[/CIT]

...

Si questi sono quasi sicuro al 100% sono gli esercizi del prof
tramontano di informatica delle federico II vero??Hai per caso un file
pdf con tutti gli esercizi, mi servirebbe.. Cmq volevo chiedere una
cosa a fratino, gli esercizi che hai detto si devono risolvere con i
record possono essere risolti senza? Io praticamente utilizzo solo
array non ho mai usato record nei miei programmi.Inoltre mi dite
qual'è la differenza tra stringa e array di caratteri?
Grazie
P.s Anche tu hai l'esame il 18? :)

 P.s Anche tu hai l'esame il 18? :)
No, già dato l'anno scorso :)
In bocca al lupo :)
PS: Per curiosità, sai dirmi che progetto d'esame c'è quest'anno? Sono
lontana da Napoli e non sono riuscita a trovare notizie in merito sul sito
Grazie


...

Beh io mi sono messo a risolvere i primi due esercizi con i record e
devo dire che sono molto piu' comodi dei semplici array bidimensionali
Ecco il primo esercizio per chi lo richiedeva:
Program ciclista;
Uses crt;
CONST
vittoria=5;
piazzamento=3;
spazio=' ';
type
vettore=array[1..50] of record
 ciclisti:record
 punteggio:integer;
 nome:string;
 anno:integer;
 vittorie,piazzamenti:integer;
 end;
 end;
Var
indice,temp,i,k,j:integer;
temp2:string;
ciclistif:text;
vett:vettore;
Procedure verifica;
Begin
 while not eof(ciclistif) do
  while not eoln(ciclistif) do
   begin
   indice:=indice+1;
   repeat
   i:=i+1;
   read(ciclistif,vett[indice].ciclisti.nome[i]);
   until  vett[indice].ciclisti.nome[i]=spazio;
   repeat
   i:=i+1;
   read(ciclistif,vett[indice].ciclisti.nome[i]);
   until  vett[indice].ciclisti.nome[i]=spazio;
   for j:=1 to i do
    vett[indice].ciclisti.nome:=vett[indice].ciclisti.nome+vett[indice].ciclisti.nome[j];
   i:=0;
   read(ciclistif,vett[indice].ciclisti.anno);
   read(ciclistif,vett[indice].ciclisti.vittorie);
   read(ciclistif,vett[indice].ciclisti.piazzamenti);
   vett[indice].ciclisti.punteggio:=(vett[indice].ciclisti.vittorie)*5+(vett[indice].ciclisti.piazzamenti)*1;
   readln(ciclistif);
   end;
   for i:=1 to indice-1 do
    for k:=indice-1 downto i do
     if vett[k].ciclisti.punteggio<vett[k+1].ciclisti.punteggio then
      begin
      temp:=vett[k].ciclisti.punteggio;
      temp2:=vett[k].ciclisti.nome;
      vett[k].ciclisti.punteggio:=vett[k+1].ciclisti.punteggio;
      vett[k+1].ciclisti.punteggio:=temp;
      vett[k].ciclisti.nome:=vett[k+1].ciclisti.nome;
      vett[k+1].ciclisti.nome:=temp2;
      end;
      for i:=1 to indice do
       writeln(vett[i].ciclisti.nome:5,vett[i].ciclisti.punteggio);
 end;
Begin
clrscr;
assign(ciclistif,'c:\ciclisti.txt');
reset(ciclistif);
verifica;
close(ciclistif);
readln;
end.
Ecco il secondo 
Program dati;
Uses crt, dos;
CONST
sentinella='^';
TYPE
vettore=array[1..100] of record
 anagrafici:record
 nome:string[50];
 giorno,mese,anno:integer;
 end;
 end;
var
indice,i,j:integer;
anagraficif:text;
giorno,mese,anno,day:word;
vett:vettore;
Procedure verifica;
Begin
 while not eof(anagraficif) do
  while not eoln(anagraficif) do
  begin
  indice:=indice+1;
  repeat
  i:=i+1;
  read(anagraficif,vett[indice].anagrafici.nome[i])
  until vett[indice].anagrafici.nome[i]=sentinella;
   read(anagraficif,vett[indice].anagrafici.giorno);
   read(anagraficif,vett[indice].anagrafici.mese);
   read(anagraficif,vett[indice].anagrafici.anno);
   vett[indice].anagrafici.anno:=1900+vett[indice].anagrafici.anno;
   if (anno-vett[indice].anagrafici.anno>16) then
    begin
     for j:=1 to i do write(vett[indice].anagrafici.nome[j]);
     writeln;
     end
     else if (anno-vett[indice].anagrafici.anno=16) then
      if (mese<= vett[indice].anagrafici.mese) and
     (giorno<=vett[indice].anagrafici.giorno)  then
     begin
     for j:=1 to i do write(vett[indice].anagrafici.nome[j]);
     writeln;
     end;
   readln(anagraficif);
   i:=0;
end;
end;
Begin
clrscr;
getdate(anno, mese, giorno ,day);
assign(anagraficif,'c:\dati.txt');
reset(anagraficif);
verifica;
close(anagraficif);
readln;
end.
Magari se mi dite pure se c'è qualche errore o qualcosa andava fatto
diversamente mi fate un piacere. Un'altra cosa dato che negli esercizi
non era specificato se ad esempio tra una parola e l'altra o tra un
numero ed un'altro c'erano degli spazi o dei caratteri di tabulazione,
io ho ipotizzando la seconda ipotesi in alcuni punti.
Fatina questo è il mio indirizzo e-mail kras...@TOGLIMIfremmail.it e
ne discutiamo in privato, mi farebbe ricevere i .pas e se puoi anche i
vecchi testi d'esame ma se non puoi vanno bene solo i pas :). Il
progetto d'esame non lo sò poichè mi pare lo facciano fare solo a chi 
deve dare modulo b .. cmq io per adesso non lo sò.

Inoltre mi dite qual'è la differenza tra stringa e array di caratteri?
Una stringa e' un array di caratteri in cui l'elemento zero contiene
la lunghezza della stringa stessa codificata come l'ordinale associato
al carattere ASCII (quindi per usarlo a "basso livello" si devono
usare le funzioni Chr e Ord), grazie a cio' vi si possono usare le
funzioni predefinite tipo Copy, Delete, Concat, ecc.
-- 
Omega e' omega e basta