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.