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"}