Fondamenti di Informatica I / Fondamenti di Programmazione Prova scritta del 23 febbraio 2009
Compito A
Esercizio 1 (punti 15) Si consideri un file che contiene uno per riga degli spostamenti di veicoli da una locazione ad un’altra. Ciascuna riga `e composta da: il nome della locazione di partenza, la sequenza di caratteri --> e il nome della locazione di arrivo (separati da uno o pi`u spazi bianchi). I nomi delle locazioni sono lunghi al massimo 10 caratteri e non contengono spazi bianchi.
Come esempio si consideri il seguente file:
Roma --> Milano Milano --> Torino Roma --> Genova Roma --> Genova
Si consideri inoltre il seguente tipo di dato che memorizza per ogni locazione il nome e il numero di veicoli presenti.
struct Deposito {
char locazione[11];
int num_veicoli;
};
Si scriva una funzione C che prenda come parametri il nome di un file il cui contenuto ha il formato descritto e un vettore di elementi di tipo struct Deposito (e la sua lunghezza). Il vettore descrive la situazione iniziale dei veicoli nelle varie locazioni. La funzione deve modificare il vettore in modo che corrisponda alla situazione dopo aver eseguito gli spostamenti presenti nel file.
Ad esempio, se il vettore contiene i valori qui sotto a sinistra e il file `e quello dell’esempio, allora all’uscita della funzione il vettore dovr`a avere i valori descritti a destra.
Roma 3
Milano 8 Torino 5 Genova 10
Roma 0
Milano 8 Torino 6 Genova 12
La funzione deve inoltre restituire il valore 1 nel caso in cui almeno una delle locazioni del file non sia presente nel vettore; deve restituire 2 nel caso in cui si verifichi una situazione (anche temporanea) in cui il numero di veicoli in una locazione `e minore di 0. Deve restituire 0 in caso di funzionamento normale.
Esercizio 2 (punti 15) Si scriva una funzione C che prenda come parametri due stringhe, di cui la prima contiene una data nel formato gg mese in lettere aaaa. La funzione deve scrivere nella seconda stringa la data tradotta in inglese nel formato illustrato dai seguenti esempi (si noti che nel formato inglese non `e presente lo 0 davanti ai giorni composti da una sola cifra).
Stringa in ingresso Stringa in uscita 12 gennaio 1982 January 12th, 1982 03 febbraio 1977 February 3rd, 1977 05 marzo 1977 March 5th, 1977 21 maggio 1977 May 21st, 1977 Si consideri disponibile la funzione:
void CalcolaSuffisso(char giorno[], char suffisso[]);
che scrive nel parametro suffisso la stringa corretta ("th", "st", "nd" o "rd") corrispondente al giorno scritto nella stringa giorno.
Per il compito in classe non `e richiesto di scrivere esplicitamente tutti i 12 casi dei nomi dei mesi, ma `e sufficienti scrivere 2-3 casi e lasciare in bianco gli altri.
Fondamenti di Informatica I / Fondamenti di Programmazione Prova scritta del 23 febbraio 2009
Compito B
Esercizio 1 (punti 15) Si consideri un file che contiene uno per riga degli spostamenti di veicoli da una locazione ad un’altra. Ciascuna riga `e composta da: la parola da, il nome della locazione di partenza, la parola a e il nome della locazione di arrivo (separati da uno o pi`u spazi bianchi). I nomi delle locazioni sono lunghi al massimo 20 caratteri e non contengono spazi bianchi.
Come esempio si consideri il seguente file:
Da Roma a Milano
Da Milano a Torino
Da Roma a Genova
Da Roma a Genova
Si consideri inoltre il seguente tipo di dato che memorizza per ogni locazione il nome e il numero di veicoli presenti.
struct Locazione {
char nome[21];
int veicoli;
};
Si scriva una funzione C che prenda come parametri il nome di un file il cui contenuto ha il formato descritto e un vettore di elementi di tipo struct Locazione (e la sua lunghezza). Il vettore descrive la situazione iniziale dei veicoli nelle varie locazioni. La funzione deve modificare il vettore in modo che corrisponda alla situazione dopo aver eseguito gli spostamenti presenti nel file.
Ad esempio, se il vettore contiene i valori qui sotto a sinistra e il file `e quello dell’esempio, allora all’uscita della funzione il vettore dovr`a avere i valori descritti a destra.
Roma 3
Milano 8 Torino 5 Genova 10
Roma 0
Milano 8 Torino 6 Genova 12
La funzione deve inoltre restituire il valore 1 nel caso in cui almeno una delle locazioni del file non sia presente nel vettore; deve restituire -1 nel caso in cui si verifichi una situazione (anche temporanea) in cui il numero di veicoli in una locazione `e minore di 0. Deve restituire 0 in caso di funzionamento normale.
Esercizio 2 (punti 15) Si scriva una funzione C che prenda come parametri due stringhe, di cui la prima contiene una data nel formato gg mese in lettere aaaa. La funzione deve scrivere nella seconda stringa la data tradotta in inglese nel formato illustrato dai seguenti esempi (si noti che nel formato inglese non `e presente lo 0 davanti ai giorni composti da una sola cifra).
Stringa in ingresso Stringa in uscita 12 gennaio 1982 January 12th, 1982 03 febbraio 1977 February 3rd, 1977 05 marzo 1977 March 5th, 1977 21 maggio 1977 May 21st, 1977 Si consideri disponibile la funzione:
void TrovaSuffisso(char giorno[], char suffisso[]);
che scrive nel parametro suffisso la stringa corretta ("th", "st", "nd" o "rd") corrispondente al giorno scritto nella stringa giorno.
Per il compito in classe non `e richiesto di scrivere esplicitamente tutti i 12 casi dei nomi dei mesi, ma `e sufficienti scrivere 2-3 casi e lasciare in bianco gli altri.
Fondamenti di Informatica I / Fondamenti di Programmazione Prova scritta del 23 febbraio 2009
Compito C
Esercizio 1 (punti 15) Si consideri un file che contiene uno per riga degli spostamenti di veicoli da una locazione ad un’altra. Ciascuna riga `e composta da: il nome della locazione di partenza, la sequenza di caratteri --> e il nome della locazione di arrivo (separati da uno o pi`u spazi bianchi). I nomi delle locazioni sono lunghi al massimo 30 caratteri e non contengono spazi bianchi.
Come esempio si consideri il seguente file:
Roma --> Milano Milano --> Torino Roma --> Genova Roma --> Genova
Si consideri inoltre il seguente tipo di dato che memorizza per ogni locazione il nome e il numero di veicoli presenti.
struct Deposito {
char locazione[31];
int veicoli;
};
Si scriva una funzione C che prenda come parametri il nome di un file il cui contenuto ha il formato descritto e un vettore di elementi di tipo struct Deposito (e la sua lunghezza). Il vettore descrive la situazione iniziale dei veicoli nelle varie locazioni. La funzione deve modificare il vettore in modo che corrisponda alla situazione dopo aver eseguito gli spostamenti presenti nel file.
Ad esempio, se il vettore contiene i valori qui sotto a sinistra e il file `e quello dell’esempio, allora all’uscita della funzione il vettore dovr`a avere i valori descritti a destra.
Roma 3
Milano 8 Torino 5 Genova 10
Roma 0
Milano 8 Torino 6 Genova 12
La funzione deve inoltre restituire il valore -1 nel caso in cui almeno una delle locazioni del file non sia presente nel vettore; deve restituire -2 nel caso in cui si verifichi una situazione (anche temporanea) in cui il numero di veicoli in una locazione `e minore di 0. Deve restituire 0 in caso di funzionamento normale.
Esercizio 2 (punti 15) Si scriva una funzione C che prenda come parametri due stringhe, di cui la prima contiene una data nel formato gg mese in lettere aaaa. La funzione deve scrivere nella seconda stringa la data tradotta in inglese nel formato illustrato dai seguenti esempi (si noti che nel formato inglese non `e presente lo 0 davanti ai giorni composti da una sola cifra).
Stringa in ingresso Stringa in uscita 12 gennaio 1982 January 12th, 1982 03 febbraio 1977 February 3rd, 1977 05 marzo 1977 March 5th, 1977 21 maggio 1977 May 21st, 1977 Si consideri disponibile la funzione:
void CalcolaLettere(char giorno[], char lettere[]);
che scrive nel parametro lettere la stringa corretta ("th", "st", "nd" o "rd") corrispondente al giorno scritto nella stringa giorno.
Per il compito in classe non `e richiesto di scrivere esplicitamente tutti i 12 casi dei nomi dei mesi, ma `e sufficienti scrivere 2-3 casi e lasciare in bianco gli altri.
Fondamenti di Informatica I / Fondamenti di Programmazione Prova scritta del 23 febbraio 2009
Compito D
Esercizio 1 (punti 15) Si consideri un file che contiene uno per riga degli spostamenti di veicoli da una locazione ad un’altra. Ciascuna riga `e composta da: la parola da, il nome della locazione di partenza, la parola a e il nome della locazione di arrivo (separati da uno o pi`u spazi bianchi). I nomi delle locazioni sono lunghi al massimo 40 caratteri e non contengono spazi bianchi.
Come esempio si consideri il seguente file:
Da Roma a Milano
Da Milano a Torino
Da Roma a Genova
Da Roma a Genova
Si consideri inoltre il seguente tipo di dato che memorizza per ogni locazione il nome e il numero di veicoli presenti.
struct Locazione {
char nome[41];
int num_veicoli;
};
Si scriva una funzione C che prenda come parametri il nome di un file il cui contenuto ha il formato descritto e un vettore di elementi di tipo struct Locazione (e la sua lunghezza). Il vettore descrive la situazione iniziale dei veicoli nelle varie locazioni. La funzione deve modificare il vettore in modo che corrisponda alla situazione dopo aver eseguito gli spostamenti presenti nel file.
Ad esempio, se il vettore contiene i valori qui sotto a sinistra e il file `e quello dell’esempio, allora all’uscita della funzione il vettore dovr`a avere i valori descritti a destra.
Roma 3
Milano 8 Torino 5 Genova 10
Roma 0
Milano 8 Torino 6 Genova 12
La funzione deve inoltre restituire il valore -1 nel caso in cui almeno una delle locazioni del file non sia presente nel vettore; deve restituire 1 nel caso in cui si verifichi una situazione (anche temporanea) in cui il numero di veicoli in una locazione `e minore di 0. Deve restituire 0 in caso di funzionamento normale.
Esercizio 2 (punti 15) Si scriva una funzione C che prenda come parametri due stringhe, di cui la prima contiene una data nel formato gg mese in lettere aaaa. La funzione deve scrivere nella seconda stringa la data tradotta in inglese nel formato illustrato dai seguenti esempi (si noti che nel formato inglese non `e presente lo 0 davanti ai giorni composti da una sola cifra).
Stringa in ingresso Stringa in uscita 12 gennaio 1982 January 12th, 1982 03 febbraio 1977 February 3rd, 1977 05 marzo 1977 March 5th, 1977 21 maggio 1977 May 21st, 1977 Si consideri disponibile la funzione:
void TrovaLettere(char giorno[], char lettere[]);
che scrive nel parametro lettere la stringa corretta ("th", "st", "nd" o "rd") corrispondente al giorno scritto nella stringa giorno.
Per il compito in classe non `e richiesto di scrivere esplicitamente tutti i 12 casi dei nomi dei mesi, ma `e sufficienti scrivere 2-3 casi e lasciare in bianco gli altri.