• Non ci sono risultati.

Esercizio 1 (6 punti)

N/A
N/A
Protected

Academic year: 2021

Condividi "Esercizio 1 (6 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 (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 2 (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 3 (2 punti)

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

a = 6; b = 7;

c = a-- + ++b;

[ ] il risultato è indefinito [ ] c = 12

[ ] c = 13 [ ] c = 14

Esercizio 4 (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 (27, 18));

return EXIT_SUCCESS;

}

int f(int x, int y) {

if (y == 0) return x;

return f(y, x%y);

}

Risposta: ___________________________

Esercizio 5 (4 punti)

Cosa stampa la seguente funzione?

void stampa (void) {

char s[16], t[16];

strcpy (s, "serpente");

strcpy (t, "iguana");

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

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

return;

}

Risposta: ___________________________

(2)

Esercizio 6 (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[*pc][*pr] == 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[*pr][*pc] == 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;

}

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;

}

Esercizio 7 (3 punti)

Quanti byte occupano i seguenti dati?

char s[3]; _____________

"123"; _____________

"" _____________

"testo\n" _____________

"a" _____________

'\n' _____________

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

- un metodo che, data una stringa s che denota il nome di una casa editrice, restituisce l’elenco dei quotidiani venduti da un’edicola che sono pubblicati da s.

Scrivere un metodo statico iterativo che, dato un array bidimensionale a di stringhe, restituisce un array monodimensionale b di stringhe tale che b[i] `e la stringa

- un metodo che, data una stringa s che denota un titolo, restituisce true se un libro con titolo s compare nell’elenco dei libri di uno scolaro;. - un metodo che, data una stringa

Inoltre, definire un metodo che modifica il mezzo di trasporto ed il prezzo per persona, ed un metodo che restituisce una stringa che descrive un soggiorno con trasporto.

Scrivere un metodo che, dati un array bidimensionale di stringhe a ed un intero k &gt; 0, restituisce true se in ogni riga a[i] di a esistono almeno k coppie di stringhe adiacenti

Oltre ai metodi che restituiscono i valori delle variabili istanza, definire un metodo che aggiunge il nome di un monumento nell’elenco di una via storica ed un metodo che

Inoltre, definire un metodo per modificare il nome del docente titolare di un corso, un metodo equals che restituisce true se due corsi sono uguali (altrimenti restituisce false) ed

Inoltre, definire un metodo per modificare il nome del produttore, un metodo che, dati due farmaci, controlla se appartengono alla stessa categoria e hanno lo stesso principio