• Non ci sono risultati.

Esercizio 1 (2 punti)

N/A
N/A
Protected

Academic year: 2021

Condividi "Esercizio 1 (2 punti)"

Copied!
2
0
0

Testo completo

(1)

Università degli Studi di Udine

Corsi di laurea in Ing. Elettronica Gestionale Fondamenti di programmazione

18 novembre 2016 - Prova intermedia

Matricola ____________________________

Nome ____________________________

Cognome ____________________________

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

Esercizio 1 (2 punti)

Si completi il seguente frammento di codice che inizializza tutti gli n elementi di un vettore v di numeri reali di tipo double ad un valore che rappresenti come frazione (da 0 a 1) la distanza tra la posizione dell’elemento stesso e la posizione dell’ultimo elemento del vettore. Quindi, per esempio, in un vettore di 20 elementi l’elemento di indice 19 sarà inizializzato a 0.0 (distanza nulla dall’ultimo), l’elemento di indice 0 sarà inizializzato a 0.95 (distanza 19 elementi, divisa per 20) e l’elemento di indice 9 sarà inizializzato a 0.5 (distanza 10 elementi, divisa per 20).

for (i = __________________________) v[i] = _____________________;

Esercizio 2 (2 punti)

Che risultato si ottiene al termine dell’esecuzione del seguente frammento di codice?

a = 2; b = 3;

c = a++ + --b;

[ ] il risultato è indefinito [ ] c = 4

[ ] c = 5 [ ] c = 6

Esercizio 3 (4 punti)

Si calcoli il valore stampato dal seguente programma, che chiama la funzione f, ricorsiva. (Si considerino già presenti nel file sorgente le direttive al preprocessor per includere i necessari header file).

int main() {

printf ("%d", f (24, 36));

return EXIT_SUCCESS;

}

int f(int x, int y) {

if (y == 0) return x;

return f(y, x%y);

}

Risposta: ___________________________

Esercizio 4 (3 punti)

La seguente funzione cerca un numero intero k, passato come argomento, in una matrice di interi int m[5][10], anch’essa passata come argomento. La funzione restituisce uno se il valore cercato è presente nella matrice e zero altrimenti. Se il valore è presente, nelle variabili passate by reference si troveranno i valori degli indici di riga e di colonna della cella dove l’elemento è stato trovato.

Si indichi quale, tra le seguenti, è la versione corretta della funzione.

int cerca_in_mat (int m[5][10],

int k, int *pr, int *pc) {

for (*pr = 0; *pr < 5; (*pr)++) for (*pc = 0; *pc < 10; (*pc)++) if (m[*pr][*pc] == k)

return 1;

return 0;

}

int cerca_in_mat (int m[5][10],

int k, int *pr, int *pc) {

for (*pr = 0; *pr < 5; (*pr)++) for (*pc = 0; *pc < 10; (*pc)++) if (m[*pc][*pr] == k)

return 1;

return 0;

}

int cerca_in_mat (int m[5][10],

int k, int *r, int *c) {

for (r = 0; r < 5; r++) for (c = 0; c < 10; c++) if (m[r][c] == k) return 1;

return 0;

}

int cerca_in_mat (int m[][],

int k, int *r, int *c) {

for (*r = 0; *r < 5; (*r)++) for (*c = 0; *c < 10; (*c)++) if (m[*r][*c] == k)

return 1;

return 0;

}

(2)

Esercizio 5 (4 punti)

Cosa stampa la seguente funzione?

void stampa (void) {

char s[16], t[16];

strcpy (s, "aquila");

strcpy (t, "rinoceronte");

s[7] = t[7] = '\0';

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

return;

}

Risposta: ___________________________

Esercizio 6 (3 punti)

Quanti byte occupano i seguenti dati?

"" _____________

"a" _____________

'\n' _____________

char s[3]; _____________

"123"; _____________

"testo\n" _____________

Esercizio 7 (6 punti)

Si scriva la funzione void

scorrimento_circolare (int v[], int dim) che riceve come argomenti un vettore di interi e la sua dimensione e fa scorrere in avanti tutti gli elementi del vettore di una posizione, spostando l’ultimo al posto del primo. Per esempio, se il vettore di ingresso ha 5 elementi e contiene i valori { 10, 13, 9, -4, 5 }, al termine dell’esecuzione della funzione dovrà contenere { 5, 10, 13, 9, -4 }.

Suggerimento: si copi in una variabile temporanea l’ultimo elemento del vettore, si copi poi ogni elemento del vettore nella posizione immediatamente seguente, si copi infine il valore salvato nella variabile temporanea nella prima posizione.

Esercizio 8 (6 punti)

Si completi la funzione int traduci_numero (char s[]) che riceve in ingresso una stringa rappresentante un numero intero le cui cifre sono scritte in forma testuale in inglese, separate da virgola e terminate da un punto, senza spazi, e restituisce il valore del numero rappresentato.

Per esempio, se la stringa s contiene

"nine,zero,three.", la funzione restituisce il valore intero 903, se invece s contiene "four,two.", la funzione restituisce 42.

Suggerimento: l’algoritmo è identico a quello della lettura del numero da tastiera visto a lezione. In questo caso, però, il valore di ogni cifra va calcolato mediante una opportuna funzione di traduzione di una cifra dalla forma testuale al valore rappresentato (per esempio

"seven" deve restituire il valore 7).

int traduci_numero (char s[]) {

int i, j, risultato;

char temp[16];

i = 0; j = 0;

_____________________;

while (s[i] != '\0') {

if (s[i] != ',' && s[i] != '.') {

/* copia il carattere in temp */

_____________________

j++;

i++;

} else {

/* termina la stringa temp e

aggiorna il risultato parziale */

_______________________;

risultato = ________________________;

j = 0;

i++;

} }

return risultato;

}

int traduci_cifra (char s[]) {

int i;

char cifre[10][8] = { "zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine"};

for (_____________________________) if (________________________________) return i;

return -1; /* cifra non valida */

}

Riferimenti

Documenti correlati

Due forze con uguale direzione e verso opposto hanno intensità di 12N e 7N.. Rappre- senta graficamente le due forze e la

- miglioramenti nella realizzazione del rivestimento vetrato dell’edificio 3 ovvero eventuale esecuzione del rivestimento sulla totalità della facciata Nord, eventuale esecuzione

Si rimuovono, uno alla volta, gli elementi dello heap, posizionando ciascuno nel vettore, a partire dalla fine (perché viene rimosso prima

[r]

[r]

Ora, un punto che partendo da O si sposta prima nel punto di coordinate v1 , v2 , 0 e poi si sposta di v3 unita’ nella direzione dell’asse z, descrive i due cateti di un

Nello spazio ordinario, si ha che la proiezione ortogonale di un vettore b su un piano e’, fra i vettori del piano, quello piu’ vicino al vettore b.. Osserviamo che, per ogni vettore

Piu’ in generale, si definiscono un’operazione di addizione fra matrici dello stesso tipo, un’operazione di moltiplicazione di una matrice per uno scalare, e si prova che il prodotto