• Non ci sono risultati.

Matricola _________________________________ Corso di Laurea _________________________________ Nome _________________________________ Cognome _________________________________ Aula ____ Fila (dal basso) ___ Posto (da sinistra)___

N/A
N/A
Protected

Academic year: 2021

Condividi "Matricola _________________________________ Corso di Laurea _________________________________ Nome _________________________________ Cognome _________________________________ Aula ____ Fila (dal basso) ___ Posto (da sinistra)___"

Copied!
4
0
0

Testo completo

(1)

Università degli Studi di Udine Corsi di laurea in

Ing. Elettronica e Ing. Gestionale Fondamenti di programmazione 25 novembre 2011 - Prova intermedia

Matricola _________________________________

Corso di Laurea _________________________________

Nome _________________________________

Cognome _________________________________

Aula ____ Fila (dal basso) ___ Posto (da sinistra)___

Esercizio 1 (3 punti)

Si consideri la funzione riportata a lato.

Cosa stamperà il seguente frammento di codice?

int y, z, x = 2;

char str[10];

z = f (x, &y, str);

printf ("%d %d %s", z, y, str);

Risposta: ________________________________

Esercizio 2 (4 punti)

In una gara motociclistica i tempi sono misurati in ore, minuti, secondi e millesimi di secondo, tutti interi. Si completino le seguente funzione, che calcolano il tempo totale di gara sommando i tempi delle due prove parziali passati come parametri.

struct tempo somma_tempi

(struct tempo tempo1, struct tempo tempo2) {

tempo1.h = _______________________;

tempo1.m = _______________________;

tempo1.s = _______________________;

tempo1.ms = ______________________;

return normalizza (tempo1);

}

struct tempo normalizza (struct tempo t) {

int riporto;

riporto = __________________;

t.ms = __________________;

t.s = __________________;

riporto = __________________;

t.s = __________________;

t.m = __________________;

riporto = __________________;

t.m = __________________;

t.h = __________________;

return t;

}

Esercizio 3 (3 punti)

Mettere in corrispondenza (tracciando delle linee) le dichiarazioni di variabili riportate a destra con le espressioni riportate a sinistra. Ogni elemento a sinistra deve avere una e una sola corrispondenza con un elemento a destra.

int b; 1000000000 / 3

double z; -5

char k; ""

char s[2] "NO"

char s[10] 1.0

int f (int a, int *p, char s[]) {

int *q = &a;

*p = *q + 1;

s[0] = a++ + '0';

s[1] = '\0';

return a;

}

(2)

Esercizio 4 (7 punti)

Si scriva la funzione void specchia (char s[]) che raddoppia in modo speculare il contenuto della stringa s, aggiungendo al fondo i caratteri in essa contenuti in modo da renderne il contenuto palindromo. Si considerino spazi e simboli di interpunzione alla stregua delle lettere e si raddoppi anche il carattere centrale del risultato. Si assuma che la lunghezza massima della stringa s sia ignota, ma che sia comunque sufficiente a contenere tutti i caratteri necessari.

Esempio: “testo di prova!” → “testo di prova!!avorp id otset”

Esercizio 5 (3 punti)

Arrivati ad un certo punto della progettazione di un programma avete definito la rappresentazione dei dati mediante un vettore di strutture:

struct tipo_miei_dati {

char nome[16];

int numero;

};

struct tipo_miei_dati dati[100];

Ora iniziate a progettare una funzione che riempia l’elemento di indice i del vettore, leggendo i valori dalla tastiera ed eseguendo alcuni controlli di correttezza dei dati stessi. La funzione, oltre a riempire l’elemento del vettore, deve anche restituire uno se l’operazione è avvenuta correttamente e zero se i dati inseriti non erano corretti e quindi l’inserimento non è stato eseguito.

a) Si scriva la dichiarazione (non la definizione!) di tale funzione, tale da consentirne l’utilizzo sopra descritto.

_____________________________________________________________________________

b) Assumendo che nel programma chiamante la variabile risultato dovrà contenere uno se la lettura è andata a buon fine e zero altrimenti, si scriva un esempio di chiamata di tale funzione.

_____________________________________________________________________________

Esercizio 6 (5 punti)

Un programma C legge una sequenza dati da un file di testo e li memorizza in un vettore di strutture del tipo:

struct tipo_esame {

char nome_esame[64];

int voto;

char lode;

};

Il campo lode vale uno o zero.

(3)

Il formato dei dati di ingresso si evince dal seguente esempio:

Fondamenti di programmazione: 30L Algebra linare: 27

Le seguenti funzioni contengono diversi errori sintattici e semantici. Li si identifichino e li si correggano.

int carica_vettore_esami (FILE *fp, struct tipo_esame miei_esami[], int maxdim) {

char str[];

int i = 0;

while (i <= maxdim && fgets(str, 128, fp) != NULL) {

miei_esami[i] = estrai_dati (str[i]);

i++;

}

return i;

}

int estrai_dati (char s[]) {

struct esame;

char voto_in_cifre[8];

int i, j;

i = 0;

while (s[i] != ':') {

esame.nome_esame[i] = s[i];

i++;

} i++;

while (!isdigit(s[i])) i++;

j++;

while (isdigit(s[i])) {

voto_in_cifre[j] = s[i];

i++;

j++;

}

esame.voto = atoi (voto_in_cifre);

if (strcmp (s[i], 'L') == 0) esame.lode = 1;

else

esame.lode = 0;

return esame;

}

Esercizio 7 (5 punti)

Un treno, identificato da un codice numerico, è formato da un numero massimo NCMAX di carrozze, di cui nc effettivemente presenti; ciascuna carrozza dispone di un numero massimo NPMAX di posti a sedere, di cui np effettivi. Ogni posto è identificato dalla sua posizione (da 0 a np-1) e contiene due informazioni: il tipo (‘c’ per corridoio, ‘f’ per finestrino) e un vettore di prenotazione. Il vettore di prenotazione è lungo MAXTRATTE e rappresenta tutte le tratte del treno (cioè i percorsi tra stazioni adiacenti). Per esempio, se tale vettore contiene uno nelle posizioni 0, 1 e 2 e zero in tutte le altre significa che il posto è prenotato nelle prime tre tratte (cioè fino alla quarta stazione, contando anche la stazione di partenza).

Si consideri il segmento di codice riportato a fianco, utilizzato per rappresentare tale treno.

struct tipo_posto {

char tipo;

int prenotazioni[MAXTRATTE];

};

struct tipo_carrozza {

int numero_carrozza;

int np;

struct tipo_posto posti[NPMAX];

};

struct tipo_treno {

int codice_treno;

int nc;

struct tipo_carrozza carrozze[NCMAX];

};

(4)

Si completi la seguente funzione che cerca nel treno un posto libero del tipo specificato (corridoio o finestrino) dalla tratta tr_inizio alla tratta tr_fine e restituisce by reference il numero di carrozza e il numero di posto. Il codice di ritorno della funzione è uno se un posto con tali caratteristiche è disponibile e zero altrimenti.

Si consideri già disponibile la funzione

verifica_posto_libero (int tratte_prenotate[], int indice_prima_tratta, int indice_ultima_tratta)

che riceve un vettore di prenotazioni del posto a sedere e verifica se in esso non risultano prenotate tutte le tratte comprese tra i due indici passati come argomenti (estremi inclusi).

int cerca_posto_libero (struct tipo_treno treno, int tratta_inizio, char tipo, int tratta_fine, int *p_ncarrozza, int *p_nposto) {

int indice_carrozza, indice_posto;

indice_carrozza = 0;

while (_________________________________) {

indice_posto = 0;

while (___________________________________________) {

if (______________________________________________________

______________________________________________________

______________________________________________________) {

______________________________

______________________________

return 1;

}

indice_posto++;

}

indice_carrozza++;

}

return 0;

}

Riferimenti

Documenti correlati

Ogni quadrato può essere rappresentato dalle coordinate della cella in alto a sinistra (la più vicina a quella con coordinate 0, 0) e dalla lunghezza del lato. La seguente

Ogni quadrato può essere rappresentato dalle coordinate della cella in alto a sinistra (la più vicina a quella con coordinate 0, 0) e dalla lunghezza del lato.. La seguente

Ogni quadrato può essere rappresentato dalle coordinate della cella in alto a sinistra (la più vicina a quella con coordinate 0, 0) e dalla lunghezza del lato. La seguente

Ora iniziate a progettare una funzione che riempia l’elemento di indice i del vettore, leggendo i valori dalla tastiera ed eseguendo alcuni controlli di correttezza dei dati

Si scriva la funzione piano_liberabile che riceve in ingresso il vettore rappresentante il deposito e che restituisce l’indice del primo piano (partendo dal piano terra, di

Tale struttura contiene il numero di sale effettivamente presenti e, per ciascuna sala, il numero di posti, il titolo del film (massimo 40 caratteri) e la sequenza di orari (ore

Il numero di bit rappresentati dalla stringa è fisso (l’eventuale riporto a sinistra della prima cifra va

Il numero di bit rappresentati dalla stringa è fisso (l’eventuale riporto a sinistra della prima cifra va