MODIFICARE LA STRUTTURA DATI ARRAY IN MODO TALE CHE SIA POSSIBILE ESEGUIRE ANCHE LE SEGUENTI OPERAZIONI: 1) void array_set(TArray *v, int i, TInfo *t); CHE SOSTITUISCE L'i-ESIMO ELEMENTO DEL VETTORE CON t E RESTITUISCE 1 SE L'OPERAZIONE è ANDATA A BUON FINE, 0 ALTRIMENTI 2) int array_insert_at(TArray *v, int i, TInfo *t); CHE INSERISCE t ALL'i-ESIMA POSIZIONE DEL VETTORE v (SENZA CANCELLARE NULLA) E RESTITUISCE 1 SE L'OPERAZIONE è ANDATA A BUON FINE, 0 ALTRIMENTI ATTENZIONE: GLI ELEMENTI DELL'ARRAY DEVONO ESSERE SEMPRE CONTIGUI 3) TArray *subarray(TArray v, int i, int len); CHE RESTITUISCE UN ARRAY CHE CORRISPONDE ALLA PORZIONE DELL'ARRAY v CHE VA DALL'i-ESIMA POSIZIONE ED è LUNGA len POSIZIONI. LA FUNZIONE DEVE RESTITUIRE null SE I VALORI DI i E len SONO FUORI DAL RANGE DI ELEMENTI DI v NOTA BENE: GLI ELEMENTI DEL SOTTOARRAY POSSONO CORRISPONDERE AGLI ELEMENTI DELL'ARRAY ORIGINALE (CIOè SE MODIFICO IL SOTTOARRAY VIENE MODIFICATO ANCHE L'ORIGINALE) 4) TArray *array_copy(TArray v); CHE RESTITUISCE UNA COPIA DI v. NOTA BENE: GLI ELEMENTI DELLA COPIA *NON* DEVONO ESSERE ESATTAMENTE GLI STESSI DELL'ARRAY ORIGINALI (CIOè SE MODIFICO LA COPIA NON VIENE MODIFICATO ANCHE L'ORIGINALE)