Fondamenti di Programmazione    a.a. 2011-2012
Esercizi di preparazione alla prova intermedia 2011
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 prende in input un intero n e stampa una matrice nxn di caratteri 'X' e 'O' che si deduce dai seguenti esempi:
   n = 1   n = 2   n = 3   n = 4   n = 5   n = 8      n = 9   
   X       XX      XXX     XXXX    XXXXX   XXXXXXXX   XXXXXXXXX
           XO      XXX     XXXX    XXXXX   XXXXXXXX   XXXXXXXXX
                   XXO     XXOO    XXXXX   XXXXXXXX   XXXXXXXXX
                           XXOO    XXXOO   XXXXXXXX   XXXXXXXXX
                                   XXXOO   XXXXOOOO   XXXXXXXXX
                                           XXXXOOOO   XXXXXOOOO
                                           XXXXOOOO   XXXXXOOOO
                                           XXXXOOOO   XXXXXOOOO
                                                      XXXXXOOOO
Esercizio 2 (max 11 punti)
Scrivere una funzione, int distinctsort(int A[], int n), che preso in input un vettore A di dimensione n, ordina i valori distinti di A e ritorna il numero di valori distinti. Ad esempio, se A = [7, 2, 3, 7, 1, 1] (n = 6) allora la funzione modifica il vettore così [1, 2, 3, 7] e ritorna 4 (i valori degli elementi oltre i primi 4 possono essere qualsiasi).
Esercizio 3 (max 10 punti)
Scrivere una funzione int repstr(char *s, int k) che ritorna il numero di caratteri distinti che si ripetono almeno k volte nella stringa s. Ad esempio, se s = "le mele non sono solo rosse" e k = 3, allora la funzione ritorna 6. Infatti, i caratteri che si ripetono almeno 3 volte sono ' ', 'l', 'e', 'n', 'o', 's'.
Esercizio 4 (max 9 punti)
Scrivere una funzione int strcnt(char *strA[], int n, char *s) che ritorna il numero di volte che la stringa s occorre nell'array di stringhe strA la cui dimensione è n. Ad esempio, se strA = ["rosso", "verde", "nero", "verde"] (quindi n = 4) e s = "verde", allora la funzione ritorna 2.
Esercizio 5 (max 11 punti)
Scrivere una funzione double *threshold(int n, double M[n][n], double t, int *pcnt) che ritorna in un array, allocato dinamicamente, i valori contenuti nella matrice M che sono maggiori od uguali al valore t e restituisce in *pcnt il numero di tali valori. Se non ci sono valori maggiori od uguali a t, allora ritorna NULL e in *pcnt restituisce 0. Ad esempio, se n = 3, la matrice M è
  0.2   3    5
 11.1   3  1.6
  2.8  22  2.7
e t = 2.8, allora la funzione ritorna un array che contiene [3, 5, 11.1, 3, 2.8, 22] (l'ordine dei valori non conta) e in *pcnt restituisce il valore 6.