• 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!
5
0
0

Testo completo

(1)

Università degli Studi di Udine

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

Matricola ____________________________

Nome ____________________________

Cognome ____________________________

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

Esercizio 1 (2 punti)

La funzione leggi_matrice deve riempire una matrice di dimensione massima 100x100 leggendo dei numeri da tastiera e restituire il numero di righe e il numero di colonne effettivamente riempite. Si indichi la corretta combinazione di prototipo e di chiamata della funzione (si assuma che nella funzione chiamante siano definite due variabili intere righe e colonne):

prototipo: int leggi_matrice (int m[100][100], int righe, int colonne);

chiamata: leggi_matrice (m, righe, colonne);

prototipo: int, int leggi_matrice (int m[100][100]);

chiamata: righe, colonne = leggi_matrice (m);

prototipo: void leggi_matrice (int m[100][100], int *pnr, int *pnc);

chiamata: leggi_matrice (m, &righe, &colonne);

Esercizio 2 (4 punti)

Si deve definire un tipo struct esperimento per descrivere un esperimento balistico. Le informazioni da memorizzare sono:

- data dell’esperimento

- alzo del cannone (angolo verticale dall’orizzonte) - peso del proiettile (in grammi)

- nome della località dove si è svolto l’esperimento (massimo 30 caratteri) Si definiscano le strutture dati necessarie.

struct data {

int giorno;

int mese;

int anno;

};

struct angolo {

int gradi;

int primi;

double secondi;

};

struct esperimento {

struct data data_esperimento;

struct angolo alzo;

double peso;

char luogo[31];

};

Esercizio 3 (3 punti)

Con riferimento all’esercizio precedente, si completi il seguente frammento di codice, che assegna a una variabile di tipo struct esperimento le seguenti informazioni: data 14 novembre 2014, alzo 10o, 3', 25.5", peso 215.33 g, luogo Udine.

struct esperimento exp;

exp.peso = 215.33;

(completare nel riquadro a lato)

exp.peso = 215.33;

exp.data_esperimento.giorno = 14;

exp.data_esperimento.mese = 11;

exp.data_esperimento.anno = 14;

exp.alzo.gradi = 10;

exp.alzo.primi = 3;

exp.alzo.secondi = 25.5;

strcpy (exp.luogo, "Udine");

(2)

Esercizio 4 (4 punti)

Cosa stampa la seguente funzione, se chiamata con argomento n = 5?

void f (int n) {

if (n > 0) f (n-1);

printf ("%d, ", n);

return;

}

0, 1, 2, 3, 4, 5,

Esercizio 5 (3 punti)

Cosa stampa la seguente funzione?

void f (void) {

char s[16];

strcpy (s, "testodiprova");

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

printf ("%s", s);

return;

}

(indicare con una X la risposta ritenuta corretta) testo di prova

testo testodi testodiprova prova

Esercizio 6 (3 punti)

Prendendo come riferimento un elaboratore a 32 bit, scrivere le dimensioni in byte delle seguenti variabili e costanti:

int v[4] ____________________ 16 0 ____________________ 4 '\0' ____________________ 1

"0" ____________________ 2 float a; ____________________ 4 double b; ____________________ 8

(3)

Esercizio 1 (4 punti)

In una matrice di interi di dimensioni 10x10 si possono individuare 81 quadrati composti da 2x2 celle, 64 da 3x3 celle, 49 da 4x4 celle e così via. 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 funzione riceve come argomenti una matrice di interi 10x10 e un intero che rappresenta la lunghezza del lato dei quadrati da considerare. La funzione calcola la media dei valori contenuti in ogni quadrato e restituisce la minima media ottenuta.

La si completi.

double minimo_medie(int m[10][10], int dim_quadrato) {

int i, j;

double minimo, media;

minimo = media_quadrato (________________________);

for (i = 0; i < 10 - ___________________; i++) for (j = 0; j < 10 - ______________________; j++)

if ((media = media_quadrato (m, i, j, dim_quadrato)) < ____________) _____________________________________;

return minimo;

}

double media_quadrato (int m[10][10], int i_inizio, int j_inizio, int dim_quadrato) {

int i, j, somma;

somma = 0;

for (i = i_inizio; i < _______________________; i++) for (j = j_inizio; j < ________________________; j++) somma ________ m[i][j];

return somma ____________________________________;

}

double minimo_medie(int m[10][10], int dim_quadrato) {

int i, j;

double minimo, media;

minimo = media_quadrato (m, 0, 0, dim_quadrato);

for (i = 0; i < 10 - dim_quadrato + 1; i++) for (j = 0; j < 10 - dim_quadrato + 1; j++)

if ((media = media_quadrato (m, i, j, dim_quadrato)) < minimo) minimo = media;

return minimo;

}

double media_quadrato (int m[10][10], int i_inizio, int j_inizio, int dim_quadrato) {

int i, j, somma;

somma = 0;

for (i = i_inizio; i < i_inizio + dim_quadrato; i++) for (j = j_inizio; j < j_inizio + dim_quadrato; j++) somma += m[i][j];

return somma / (double) (dim_quadrato * dim_quadrato);

}

(4)

Esercizio 8 (2 punti)

Dovete azzerare gli elementi di un vettore di interi che contengono un certo valore. Il vostro programma quindi chiama iterativamente una funzione di ricerca finché il dato non è più presente nel vettore.

Quale di queste funzioni di ricerca fa al caso vostro?

cerca1 cerca2 cerca3 cerca4 cerca5

int cerca1

(int v[], int dim, int dato_cercato) {

int i = 0 ; while (i < dim) {

if (v[i] == dato_cercato) return i;

else

return -1;

i++;

} }

int cerca2

(int v[], int dim, int dato_cercato) {

int i = 0 ; while (i < dim) {

if (v[i] == dato_cercato) return i;

else

return v[i];

i++;

} }

int cerca3

(int v[], int dim, int dato_cercato) {

int i = 0 ; while (i < dim) {

if (v[i] == dato_cercato) return v[i];

i++;

}

return -1;

}

int cerca4

(int v[], int dim, int dato_cercato) {

int i = 0 ; while (i < dim) {

if (v[i] == dato_cercato) return i;

i++;

}

return -1;

}

int cerca5

(int v[], int dim, int dato_cercato) {

int i = 0 ; while (i < dim) {

if (v[i] == dato_cercato) return v[i];

else

return -1;

i++;

} }

Esercizio 9 (5 punti)

Si scriva la funzione filtra_stringa_no_cifre che riceve come argomenti due stringhe s e t e copia i caratteri di s in t eliminando le cifre decimali eventualmente presenti.

Esempio:

s = "codice n.1: s2234bis" → t = "codice n.: sbis"

(5)

void filtra_stringa_no_cifre (char s[], char t[]) {

int i, j;

i = j = 0;

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

if (!(s[i] >= '0' && s[i] <= '9')) {

t[j] = s[i];

j++;

} i++;

}

t[j] = '\0';

return;

}

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

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