vuoi
o PayPal
tutte le volte che vuoi
Soluzioni appello di febbraio 2016
Esercizio 1 - Matlab - (4 punti)
Si consideri la seguente richiesta:
Un programma deve controllare che un numero N inserito dall’utente sia: primo, dispari, compreso tra 3 e
100, estremi inclusi. Quando il numero N inserito non soddisfa tutte le condizioni sopra, l’inserimento viene
ripetuto.
Vittorio, un programmatore alle prime armi, ha scritto il seguente frammento di codice Matlab, sfruttando la
primo
funzione che restituisce 1 se il suo argomento è un numero primo, 0 altrimenti:
N = 0
while(primo(N) && (3<=N) && (N<=100) && mod(N,2))
N = input('Inserire un numero: ');
end
Domanda 1 while
La condizione del ciclo è chiaramente sbagliata rispetto alla richiesta iniziale; tuttavia e’ possibile
modificarla leggermente in modo tale da renderla coerente con la richiesta iniziale. Si riscriva la condizione
di cui sopra aggiungendo solo quello che manca e senza cancellare nulla di esistente:
(primo(N) && (3<=N) && (N<=100) && mod(N,2)) == 0
Domanda 2
L’espressione risultante al passo precedente potrebbe essere ridondante ovvero vi potrebbero essere alcune
while
operazioni che, anche se eliminate, non cambierebbero la funzionalità del ciclo corrispondente.
Quale eliminereste?
☐ Eliminerei 3<=N
☐ Eliminerei N<=100
☐ Eliminerei primo(N)
Eliminerei mod(N,2)
☑︎
☐ Non eliminerei nulla, non c'è nulla di ridondante
Poiché tutti i numeri primi tra 3 e 100 sono dispari.
Esercizio 2 - Linguaggio C - (10 punti)
Si considerino le seguenti definizioni di tipo, utilizzate all’interno del sistema di gestione di unsocial network:
typedef char Stringa[30];
typedef struct{
Stringa nome;
Stringa cognome;
Stringa username;
int annoIscrizione;
Foto fotoUtente[50];
int nFoto;
} Utente;
Domanda 1 Foto
Si definisca un tipo di dato atto a rappresentare una foto di un utente; Ogni foto è caratterizzata da
DIM_MAX DIM_MAX titolo tag
un’immagine (matrice di x di interi da 0 a 255), da un e da un (entrambi
Stringa):
rappresentabili con il tipo
typedef struct{
int immagine[MAX_DIM][MAX_DIM];
Stringa tag;
Stringa titolo;
} Foto;
Domanda 2
Si ipotizzi di avere le seguenti definizioni aggiuntive:
#define T 125
#define UTENTI 100
Utente libroFaccia[UTENTI]; LibroFaccia,
Si scriva una porzione di codice che, tra tutte le foto di tutti degli utenti inseriti in stampi a
immagine
schermo il titolo della foto la cui matrice ha il maggior numero di elementi che superano la
T tag
soglia ed il corrispondente sia “Montagna” oppure “Neve”.
Stringa foto;
int sum_soglia;
for (i = 0; i < MAX_UTENTI; i++)
for (j = 0; j < libroFaccia[i].nFoto; j++)
Stringa tag;
strcpy(tag,libroFaccia[i].fotoUtente[j].tag);
if(strcmp(tag,”Montagna”)==0 || strcmp(tag,”Neve”)==0) {
sum_soglia = 0;
for (k = 0; k < MAX_DIM; k++)
for (h = 0; h < MAX_DIM; h++)
if (libroFaccia[i].fotoUtente[j].immagine[k][h] > soglia)
sum_soglia++;
if (sum_soglia >= max_sum_soglia){
strcpy(foto,libroFaccia[i].fotoUtente[j].titolo);
}}
printf("%s", foto);
Esercizio 3 - Matlab - (10 punti) roll(testo, n)
Si implementi in linguaggio Matlab un funzione ricorsiva che ritorni una matrice di
caratteri dove:
• n testo.
la prima riga consiste nei primi caratteri di
• n testo
la seconda riga consiste negli caratteri di a cui e’ stato tolto il primo carattere.
• n testo
la terza riga consiste negli caratteri di a cui sono stati tolti i primi due caratteri e così via.
• testo n -.
Nel caso la stringa non abbia caratteri inserire il carattere
• La matrice e’ considerata completa quando sono stati tolti tutti i caratteri dalla stringa originaria
roll('buon viaggio', 10)
Per esempio, la matrice risultante di deve essere:
buon viagg
uon viaggi
on viaggio
n viaggio-