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 9 punti)
- Scrivere un programma che prende in input un intero
n
e stampa una matrice
nxn
di caratteri '-'
e '+'
che si deduce dai seguenti esempi:
n = 1 n = 2 n = 3 n = 4 n = 5 n = 8 n = 9
+ ++ -+- -++- --+-- ---++--- ----+----
++ +++ ++++ -+++- --++++-- ---+++---
-+- ++++ +++++ -++++++- --+++++--
-++- -+++- ++++++++ -+++++++-
--+-- ++++++++ +++++++++
-++++++- -+++++++-
--++++-- --+++++--
---++--- ---+++---
----+----
Esercizio 2 (max 8 punti)
- Scrivere una funzione,
void minmax(float A[], int n)
,
che modifica il vettore di input A
, di dimensione n
,
scambiando di posizione il valore minimo e il valore massimo di A
.
Si può asssumere che i valori di A
siano tutti distinti.
Ad esempio, se A
= {2.5, 5, 0.2, 3, 8}
allora la funzione lo
modifica così {2.5, 5, 8, 3, 0.2}
.
Esercizio 3 (max 10 punti)
- Scrivere una funzione,
int maxsubstr(char *s, char *sc)
,
che ritorna la lunghezza della più lunga sottostringa della stringa
s
che è composta solamente di caratteri che appaiono
nella stringa sc
. Ad esempio, se
s = "Troppo corto"
e sc = "porto"
allora la funzione ritorna 5
(la sottostringa
più lunga è "roppo"
).
Esercizio 4 (max 11 punti)
- Scrivere una funzione
int saddle(int n, float M[n][n])
che
ritorna l'indice j
(0 <= j < n
) tale che il massimo
valore della riga j
è uguale al minimo valore della
colonna j
. Se un tale indice non esiste, la funzione ritorna
-1
. Ad esempio, se M
è la matrice
4x4
:
3 4 19 1
2 7 18 5
10 3 12 7
5 6 15 8
allora la funzione ritorna 2
.
Esercizio 5 (max 11 punti)
- Scrivere una funzione
int *maxind(int V[], int n, int *nMax)
che preso
in input un array V
di n
interi, ritorna un array di int allocato
dinamicamente contenente gli indici degli elementi di V
che hanno valore uguale
al massimo intero presente in V
e restituisce in *nMax
il numero di tali
elementi. L'array ritornato non deve usare più memoria di quella strettamente
necessaria. Se V
= {-1,2,7,-5,7}
allora la funzione ritorna l'array
{2,4}
e in *nMax
restituisce 2
.