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.