Fondamenti di Programmazione    a.a. 2011-2012
Prova intermedia - 18 Novembre 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 presi in input due caratteri c1, c2 e un intero positivo n, stampa una forma come si deduce dai seguenti esempi (c1 = '#' e c2 = '-'):
n = 1    n = 2      n = 3          n = 4
#-#      ###-#      #####-#        #######-#
          #-###      ###-###        #####-###
                      #-#####        ###-#####
                                      #-#######
Esercizio 2 (max 8 punti)
Scrivere una funzione int valcom(int A[], int B[], int n) che presi in input due array di dimensione n, ritorna il numero di valori distinti in comune tra i due array. Ad esempio, se A = {-1,0,-1,2,1} e B = {5,-1,-1,7,0}, la funzione ritorna 2, se invece A = {1,2,3,4} e B = {0,0,6,7}, ritorna 0.
Esercizio 3 (max 10 punti)
Scrivere una funzione int wcount(char *text) che presa in input una stringa text ritorna il numero di parole nella stringa che iniziano e finiscono con la stessa lettera (senza differenziare tra maiuscole e minuscole). Con parola si intende una sequenza di caratteri alfabetici maiuscoli o minuscoli di lunghezza massimale. Ecco alcuni esempi:
"L'aiuola e' piena di istrici"     -->  4      "That's great! Wow!"     -->  3
"Invio' l'SOS (risposero Aloha)"   -->  3      "cotto (tonto)"          -->  0
Esercizio 4 (max 11 punti)
Scrivere una funzione int *chareplace(char **strA, int n, char c1, char c2) che preso in input un array di n stringhe strA sostituisce, in tutte le stringhe, il carattere c1 con il carattere c2 e ritorna un array di n interi, allocato dinamicamente, che nell'i-esimo elemento contiene il numero di sostituzioni effetuate nella i-esima stringa. Ecco un esempio, con c1 = 'o' e c2 = 'X':
Array di stringhe    Array dopo la sostituzione     Array ritornato
0 --> "Rosso"        0 --> "RXssX"                  {2,0,1,1}
1 --> "Verde"        1 --> "Verde"
2 --> "Giallo"       2 --> "GiallX"
3 --> "Oro"          3 --> "OrX"
Esercizio 5 (max 11 punti)
Scrivere una funzione int submatrix(int n, char M[n][n], char x, int k, int *pr, int *pc) che presa in input una matrice M di n×n caratteri, se M contiene una sottomatrice di k×k caratteri tutti uguali a x, ritorna 1 e restituisce in *pr, *pc gli indici di riga e colonna dove inizia la sottomatrice, altrimenti ritorna 0. Se c'è più di una sottomatrice restituisce gli indici di una qualsiasi di queste. Ad esempio, se la matrice M è
ABBCX
Zaaaa
ZBaaa
Baaaa
aNMJK
la chiamata submatrix(5, M, 'a', 3, &r, &c) ritorna 1 e restituisce 1 in r e 2 in c.