• Non ci sono risultati.

Matricola ____________________________ Nome ____________________________ Cognome ____________________________ Aula ____ Fila (dalla cattedra) ____ Posto (dalla porta) _____

N/A
N/A
Protected

Academic year: 2021

Condividi "Matricola ____________________________ Nome ____________________________ Cognome ____________________________ Aula ____ Fila (dalla cattedra) ____ Posto (dalla porta) _____"

Copied!
2
0
0

Testo completo

(1)

Università degli Studi di Udine

Corsi di laurea in Ing. Elettronica / Gestionale Fondamenti di programmazione / Inform. 1 23 novembre 2012 - Prova intermedia

Matricola ____________________________

Nome ____________________________

Cognome ____________________________

Aula ____ Fila (dalla cattedra) ____ Posto (dalla porta) _____

Esercizio 1 (5 punti)

Si consideri un programma per gestire dei cinema multisala. Ogni cinema multisala dispone al massimo di 12 sale, tutte di capacità differente ma mai superiore a 200 posti disposti su un massimo di dieci file da massimo venti posti ciascuna. In ciascuna sala viene proiettato un solo film per un numero massimo di cinque proiezioni.

Si completi la definizione della struttura dati sotto riportata che rappresenta uno di tali cinema multisala in un dato giorno.

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 e minuti) dell’inizio delle proiezioni. Per ciascun posto è rappresentato, per ciascuna delle proiezioni, l’informazione “libero”, “prenotato” o “venduto” mediante le lettere ‘L’, ‘P’ e ‘V’, rispettivamente, in una stringa lunga al massimo cinque caratteri (uno per proiezione: per esempio in una sala che prevede quattro proiezioni l’occupazione di un posto può essere rappresentata dalla stringa “LVLP”).

struct tipo_orario {

int ora;

int minuti;

};

struct tipo_proiezioni {

___________________ /* titolo del film */

___________________ /* numero di proiezioni */

___________________ /* orari */

};

struct tipo_posto {

char stato______; /* occupazione del posto */

};

struct tipo_sala {

int n_file;

int n_posti_per_fila;

_____________________________ /* posti */

_____________________________ /* proiezioni */

};

struct tipo_cinema {

_________________________

_________________________

};

Esercizio 2 (6 punti)

Una sequenza (di lunghezza massima 100) di numeri interi positivi scritti in basi diverse (comprese tra 2 e 16) è rappresentata da stringhe ASCII. La struttura che le memorizza è riportata a lato.

Si completino le seguente funzioni, che permettono di calcolare la somma dei valori della sequenza.

int calcola_somma (struct sequenza seq) {

int i, somma = 0;

for (_________________________________) somma += ______________________________;

return somma;

}

int calcola_valore (struct numero num) {

int i, valore = 0;

for (____________________________________) valore = valore * ____________ + _____________________________;

return valore;

}

int valore_cifra (char cifra) {

if (_____________________________) return cifra - '0';

else

return toupper (cifra) ________________;

}

struct numero {

int base;

char rappr[64];

};

struct sequenza {

int lunghezza;

struct numero num[100];

};

(2)

Esercizio 3 (8 punti)

Un deposito multipiano per autoveicoli è rappresentato dal vettore tridimensionale definito nel riquadro a lato (si assumano già definite le costanti intere LMAXTARGA, NPIANI, NFILE_PER_PIANO, NPOSTI_PER_FILA).

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 indice zero) che è possibile liberare, cioè il cui numero di veicoli è minore o uguale alla somma dei posti liberi negli altri piani.

Se nessun piano risulta liberabile, la funzione deve restituire -1.

(svolgere sul retro) Esercizio 4 (2 punti)

Si consideri la funzione riportata a lato.

Date due variabili intere n e m, quale/i delle seguenti espressioni è/sono equivalente/i a m = op(&n); ?

[ ] m = 2 * ++n;

[ ] m = ++n + ++n;

[ ] m = 2 * (n+1);

[ ] m = (n+1) + (n+1);

[ ] m = 2 * n++;

[ ] m = n++ + n++;

Esercizio 5 (4 punti)

La funzione riportata a lato rappresenta una delle possibili implementazioni della funzione di libreria strncmp, che confronta due stringhe per un massimo di n caratteri. Alcune righe del codice, però, sono riportate in più varianti contenenti errori lessicali, sintattici e semantici. Per ciascun gruppo di alternative si indichi la riga corretta.

Esercizio 6 (3 punti)

Cosa stampa il seguente frammento di codice?

int i, l; char s[6];

strcpy (s, "prova");

for (i=l=strlen(s)/2; i>0; i--, l++) s[i]=s[l];

printf ("%s\n", s);

_______________________________

Esercizio 7 (2 punti)

Completare l’istruzione di lettura da tastiera:

double x; char y[10]; int z;

scanf ("%lf %c %d", _____, ____0__, ___);

y[1] = '\0';

int op (int *p) {

(*p) = (*p) + 1;

return 2 * (*p);

} struct posto {

unsigned char occupato;

char targa [LMAXTARGA];

};

struct posto deposito

[NPIANI][NFILE_PER_PIANO][NPOSTI_PER_FILA];

CORRETTA int mystrncmp (char s[]; char t[]; int n) [ ]

int mystrncmp (char *s[], char *t[], int n) [ ] int mystrncmp (char *s; char *t; int n) [ ] int mystrncmp (char *s, char *t, int n) [ ] {

int i = 0;

while (i<n && s[i]!='\0' && t[i]!='\0') [ ] while (i<n || s[i]!='\0' || t[i]!='\0') [ ] while (i<n && (s[i]!='\0' || t[i]!='\0')) [ ] {

if (s[i] != t[i]) [ ]

if (s[i] <> t[i]) [ ]

if (s[i] = t[i]) [ ]

if (s[i] == t[i]) [ ]

return t[i]-s[i]; [ ]

return t-s; [ ]

return i; [ ]

return s[i]; [ ]

return t[i]; [ ]

i+1; [ ]

i-1; [ ]

i += 1; [ ]

--i; [ ]

}

if (i >= n) return 0;

else if (s[i] = '\0') [ ]

else if (s[i] > '\0') [ ] else if (s[i] < '\0') [ ]

else if (s[i] == '\0') [ ]

return -1;

else

return 1;

}

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

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

La funzione righe_uguali_in_matrice restituisce 1 se la matrice passata come argomento contiene almeno due righe uguali e -1 altrimenti. La

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