x e un vettore di numeri V diciamo che
x è catturato da V se esistono due
indici i < j tali che V[i] < x < V[j]
e V[j] - V[i] <= 1.
Scrivere una funzione int catch(float A[], float V[], int n) che
ritorna il numero di elementi del vettore A che sono catturati dal
vettore V (n è la dimensione dei due vettori).
Ad esempio, se A = [6.9, -1, 7.1, -1, 0] e V = [-1.5, 7, -0.5, 7.7, 6],
la funzione ritorna 3 (gli elementi catturati sono -1,
7.1 e -1).
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'.
char *factors(char *str, int k) che ritorna,
in una stringa allocata dinamicamente, la concatenazione delle sottostringhe
distinte di lunghezza k della stringa str
separate dal carattere '_'. Ad esempio, se str = "aaabaaab"
e k = 3, allora la funzione ritorna la stringa "aaa_aab_aba_baa".
typedef struct Num {
float value;
struct Num* next;
} Num, *NList;
Scrivere una funzione NList delsup(NList L) che elimina dalla lista
L il primo elemento il cui valore (il campo value) è
maggiore od uguale ai valori di tutti gli elementi che lo seguono nella lista.
La funzione ritorna la lista modificata e non deve creare nuovi elementi.
Ad esempio, se la lista L
è 2 -> 5 -> 1.3 -> 5 -> 4 allora la lista modificata dalla
funzione è 2 -> 1.3 -> 5 -> 4, se invece L
è 2 -> 5 -> 4 -> 6 allora la lista modificata è
2 -> 5 -> 4.
float **fileToMatrix(char *fname, int *pdim) che legge dal
file, di tipo testo, il cui nome è dato dalla stringa fname
una matrice quadrata di numeri in virgola mobile, ritorna una matrice di float,
allocata dinamicamente, riempita con i valori letti dal file e restituisce in *pdim
la dimensione della matrice. Il file contiene
un intero n che rappresenta la dimensione della matrice e poi separati
da spazi i valori della matrice ordinati per righe (i primi n costituiscono
la prima riga, i successivi
n la seconda riga e così via). Il file quindi contiene l'intero
n e poi n*n numeri in virgola mobile (float).
Gli elementi della matrice ritornata si devono poter accedere tramite la sintassi
delle parentesi quadre. Ad esempio, se il file contiene:
4 0.5 1.4 3 -6 3.6 1 2 6 0.7 4 6 8 11 12 4 7cioè una matrice
4x4, allora la funzione crea e ritorna la seguente
matrice:
0.5 1.4 3 -6 3.6 1 2 6 0.7 4 6 8 11 12 4 7e restituisce in
*pdim il valore 4.
typedef struct Elem {
long val;
char * str; // stringa allocata dinamicamente
struct Elem *next;
} Elem, *List;
Scrivere una funzione List join(List A, List B)
che modifica la lista A in modo tale che per ogni elemento x
se x.val è diverso da tutti i valori dei campi val
degli elementi di B allora x è eliminato da A,
altrimenti il campo str di x diventa la concatenazione
della stringa originale con tutte le stringhe dei campi str degli elementi
di B che hanno il valore del campo val uguale a
x.val. La funzione ritorna la lista modificata e non deve modificare
la lista B. Ad esempio, se le liste di input sono:
A = {2, "Tara"} -> {1, "Pietra"} -> {2, "Casa"} -> {1, "Gioco"} -> {4, "Albero"}
B = {5, "Mela"} -> {1, "Mulo"} -> {4, "Campo"} -> {1, "Erba"}
allora la funzione modifica la lista A così:
{1, "PietraMuloErba"} -> {1, "GiocoMuloErba"} -> {4, "AlberoCampo"}