Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Negri
I appello 12 gennaio 2023
Cognome e nome Codice persona
Quesito 1. 2 3 4 5 Tot
Punti 6 4 5 7 8 30
3. (3 pt.) Per la seguente coppia di valori A = +127 e B= -128 eseguire le seguenti operazioni:
- convertire A e B in binario in CP2 su 8 bit (se i bit non bastano scrivere “non possibile”)
A : 0111 1111
B : 1000 0000
- eseguire la somma algebrica in binario A+B e indicare il valore binario generato dalla somma
- indicare a quale numero decimale corrisponde alla sequenza di bit presente in Ris:
-1
- indicare il valore dei bit di carry/overflow dopo la somma precedente (0 =NO, 1 SI’)
EEEE 00CE +
14 =
EEEE 00E2
pp. 1 /3
2. (2 pt.) Data la definizione float v= - 88 e lo standard IEEE754 FP32:
a) Definire prima il numero nel formato normalizzato intermedio (TRONCARE se necessario la parte
decimale alla seconda cifra decimale): -1.37 * 26
c) Indicare quale sia il valore decimale corrispondente alla codifica binaria generata nella precedente
domanda 5.b). Mostrare sia il valore finale e sia l’espressione per il suo calcolo:
(1+ ¼ +1/16+1/32)*26
Stampa
new s=0 y=88 i=5
new s=15 y=2 i=25
new s=90 y=0 i=125
Matricola
new s=0 y=4 i=5
new s=20 y=0 i=25
Matricola
70
int main() {
int mat[N][M] = {{1,2,3,4,5,6},
{7,8,9,10,11,12},
pp. 2 /3
{13,14,15,16,17,18},
{19,20,21,22,23,24},
{25,26,100,28,29,30},
{31,32,33,34,35,36}};
int peak ;
int peak_i = -1, peak_j = -1;
int count = 0; //verifica che coppia <i,j> sia picco con analisi 8 vicini
if(mat[i][j]>mat[i-1][j]) count++;
if(mat[i][j]>mat[i+1][j]) count++;
if(mat[i][j]>mat[i][j-1]) count++;
if(mat[i][j]>mat[i][j+1]) count++;
if(mat[i][j]>mat[i-1][j-1]) count++;
if(mat[i][j]>mat[i-1][j+1]) count++;
if(mat[i][j]>mat[i+1][j-1]) count++;
if(mat[i][j]>mat[i+1][j+1]) count++;
/* altri modi sono: scrivere if con 8 predicati in and, 2 cicli sulla sottomatrice dei
vicini evitando però 1 delle nove possibilità */
if (count == 8) {
// se <i,j> è picco locale, verifico se sia anche picco globale
if (peak_i ==-1){// è il primo picco globale
peak = mat[i][j];
peak_i = i;
peak_j = j;
} else if(mat[i][j] > peak) {
peak = mat[i][j];
peak_i = i;
peak_j = j;
}
}
}
}
}
if (peak_i!= -1) {//esiste picco
printf("Il picco più alto è %d e si trova in posizione (x, y) = (%d, %d)\n",
peak, peak_i, peak_j);
} else {
printf("Non esistono picchi. (-1,-1) \n");
}
return 0;
}
NOTA: per verificare se un picco è il primo globale non fare check sulla variabile peak magari inizializzata a 0.
I valori del picco sono integer e quindi i picchi potrebbero essere composti solo da valori negativi che quindi invaliderebbero
l’ipotesi sul controllo.
Esercizio 5 (soluzione deve essere scritta sul retro di pagina 2 e su questa pagina)
Sia data la seguente lista globale
struct EL {char valore; struct EL *successivo; };
struct EL *lista=NULL;
Scrivere una funzione C di nome InsDel che riceve come parametro il nome di un file
di caratteri da aprire in lettura e un carattere CA dell’alfabeto (maiuscolo o minuscolo).
La funzione riceve anche la lista di cui sopra come parametro. La funzione legge i
caratteri del file uno alla volta e per ogni carattere genera una variabile dinamica nella
quale inserisce nel campo valore il carattere letto. L’elemento creato è inserito nella
lista col seguente criterio: se il valore dell’elemento creato è maggiore del valore del
primo elemento della lista allora l’elemento creato va inserito in coda, altrimenti in testa
alla lista.
pp. 3 /3
Nel caso di lista non contenente nulla l’elemento predisposto prima diventa il primo e
l’unico elemento della lista.
Finito l’inserimento la funzione chiede al terminale un carattere e scandisce la lista alla
ricerca del primo elemento contenente il carattere ricevuto e lo elimina dalla lista.
Un file non contenente nulla non altera lo stato iniziale della lista ricevuta. In caso di
errore oppure se non trova l’elemento cercato la funzione ritorna -1 altrimenti se
l’operazione ha successo la funzione ritorna +1.
Traccia di soluzione
#include <stdio.h>
#include <stdlib.h>
struct EL {
char valore;
struct EL *successivo;
};
char c;
while ((c = fgetc(fp)) != EOF) {// va bene spezzare clausola del ciclo while
struct EL *nuovo = (struct EL*)malloc(sizeof(struct EL));
nuovo->valore = c;
nuovo->successivo = NULL;
fclose(fp);
if trovato {
pp. 4 /3
if (prec==null)
{*lista = current->successivo;
free(current);}
else
{prec->successive=current->successive;
free (current);
}
return 1;
}
Return -1;
pp. 5 /3