Fondamenti di Programmazione a.a. 2011-2012
Esercizi di preparazione alla prova intermedia 2011
Si possono consultare libri e appunti ma non è permesso usare computer.
Avvertenze: non usare variabili globali; definire tutte le funzione ausiliarie usate; è
consentito usare le funzioni della libreria standard; se una soluzione non è scritta in modo
chiaro ed ordinato non sarà presa in considerazione.
Esercizio 1 (max 8 punti)
- Scrivere un programma che presi in input un carattere
c
e un
intero dispari n
, stampa una forma, simile a una clessidra,
come si deduce dai seguenti esempi (c = '*'
):
n = 1 n = 3 n = 5 n = 7
* *** ***** *******
* *** *****
*** * ***
*** *
***** ***
*****
*******
Esercizio 2 (max 11 punti)
- Dato un array
A
, diciamo che A
ha un gap di misura
g
se esistono due valori x < y
in A
tali che
y - x = g
e non esistono in A
valori z
tali
che x < z < y
.
Scrivere una funzione int maxgap(int A[], int n)
che preso in input un array
A
di n
interi, ritorna la misura massima di un gap in A
.
La funzione non deve modificare l'array preso in input.
Ad esempio, se
A = {1, 3, 1, 7}
la funzione ritorna 4
(7 - 3 = 4
),
se A = {7, 5, 2, 13}
ritorna 6
(13 - 7 = 6)
, se A = {2, -3, 5, 2, 6}
ritorna 5
(2 - (-3) = 5
).
Esercizio 3 (max 10 punti)
- Scrivere una funzione
int longest_run(char *s, char c)
che ritorna
la posizione della più lunga sottostringa della stringa s
composta solamente dal carattere c
. Se il carattere c
non appare
in s
, ritorna -1
. Ad esempio, se s = "not running"
e
c = 'n'
ritorna 6
, se s = "10*(100+1000) = 11000"
e c = '0'
ritorna 9
.
Esercizio 4 (max 9 punti)
- Scrivere una funzione
int charcount(char *sA[], int n, char c)
che ritorna il numero totale di occorrenze del carattere c
in tutte le
stringhe dell'array sA
. Ad esempio, se sA = {"rosso", "verde", "giallo", "grigio"}
e c = 'o'
, la funzione ritorna 4
.
Esercizio 5 (max 11 punti)
- Data una matrice
M
e un suo valore v
, diciamo che
v
è un massimo locale se v
è maggiore od uguale
a tutti i valori che si trovano sulla riga e sulla colonna di v
.
Scrivere una funzione double *localmaxval(int n, double M[n][n], int *cnt)
che ritorna in un array, allocato dinamicamente, i valori della matrice
M
che sono massimi locali e restituisce in
*cnt
il numero di tali valori.
Ad esempio, se n = 4
e la matrice M
è
0.2 5.0 5.0 5.0
2.8 3.0 1.6 4.3
11.2 22.4 2.7 3.5
4.5 10.2 3.4 0.7
allora la funzione ritorna un array che contiene
{5.0, 5.0, 22.4}
(l'ordine dei valori non conta) e in *cnt
restituisce il valore 3
.