int qunif(float A[], int n, float d) che ritorna
la lunghezza del più lungo sottovettore del vettore A che è
d-uniforme. Ad esempio, se A = {3.0, 3.1, 2.5, 2.4, 2.6, 3.0, 3.1}
(n = 7) e d = 0.1, la funzione ritorna 3 (la lunghezza del sottovettore
dall'indice 2 all'indice 4).
int blkcnt(char *s, char start, char end) che ritorna
il numero di sottostringhe della stringa s che iniziano con il carattere
start, terminano con il carattere end e non contengono
come caratteri intermedi né start né end.
Si assume che start != end.
Ad esempio, se s = "((a))()b(((bbb)", start = '(' e
end = ')', la funzione ritorna 3, se invece start = 'a'
e end = 'b', ritorna 1.
int **zerosum(int n, int M[n][n], int *size) che
ritorna, in una matrice allocata dinamicamente, la più grande sottomatrice quadrata
della matrice M che ha somma zero e in *size restituisce la dimensione
della sottomatrice. Se nessuna sottomatrice quadrata ha somma zero, ritorna NULL e in
*size restituisce 0. La matrice ritornata deve essere allocata in modo tale che
gli elementi siano accessibili tramite la sintassi delle parentesi quadre. Ecco un esempio,
1 -1 2 0 0 3 3 -3 2 1 -1 2 0 sottomatrice di dimensione 3 che 1 -4 1 0 2 ====> 3 -3 2 inizia nella riga 0 e colonna 1 0 0 2 2 2 -4 1 0 0 0 1 1 1
typedef struct EStr {
char * str; //stringa allocata dinamicamente
struct EStr *next;
} EStr, *LStr;
Scrivere una funzione void inscat(LStr L) che per ogni coppia di elementi
consecutivi della lista L che hanno stringhe uguali inserisce un
nuovo elemento tra di essi la cui stringa è la concatenazione delle stringhe
dei due elementi. Esempio:
L = "A" → "A" → "B" -> "B" → "B"
Dopo inscat(L), L = "A" → "AA" → "A" → "B" → "BB" → "B" → "BB" → "B"
void fextract(char *fname1, char *fname2, int g, int m, int a)
che presi in input i nomi di due file di testo fname1 e fname2
tali che il primo contiene una sequenza di linee ognuna nel formato S
G/M/A (dove S è una sequenza di caratteri
alfabetici e G, M e A sono il giorno, mese ed anno di una data),
aggiunge al secondo file, una per linea, le sequenze S delle linee
del primo file la cui data è posteriore od uguale alla data
g/m/a.
Si assume che le sequenze S abbiano al più 40 caratteri. Esempio:
Secondo file dopo l'esecuzione di
Primo file Secondo file fextract con g = 13, m = 7, a = 2011
Red 3/10/2011 Red Red
Green 23/8/2010 White White
Blue 3/7/2009 Red
Brown 13/7/2011 Brown
typedef struct Elem {
char val[30]; //contiene una stringa di lunghezza < 30
struct Elem *next;
} Elem, *List;
Due elementi di tipo Elem sono equivalenti se le stringhe dei campi val
sono uguali.
Scrivere una funzione List symdiff(List A, List B) che modifica la lista A
in modo tale che contenga tutti e soli gli elementi di A che non sono equivalenti a nessun elemento
della lista B e le copie degli elementi di B che non sono equivalenti
a nessun elemento in A. Ritorna il puntatore alla lista A modificata.
La lista B non deve essere modificata e la memoria degli eventuali elementi rimossi da
A deve essere rilasciata. L'ordine degli elementi della lista modificata non ha importanza.
Esempio:
A = "Cyan" → "Azure" → "Aqua" → "Ceil" → "Aqua" B = "Blue" → "Ceil" → "Cyan" → "Ceil" Dopo symdiff A = "Azure" → "Aqua" → "Aqua" → "Blue"