Programmazione

10 giugno 2004



 

Esercizio 1   

Scrivere una funzione, con prototipo char *DelChar(char *string, char del) che ritorna una stringa,
allocata dinamicamente, ottenuta eliminando dalla stringa string tutte le eventuali occorrenze del carattere del.
La stringa ritornata non deve usare pi memoria di quella strettamente necessaria.

Ad esempio DelChar("programma", 'a') ritorna la stringa "progrmm".

 

Esercizio 2

Scrivere una funzione che presa in input una lista e un intero positivo k modifica la lista spostando il k-esimo elemento in coda alla lista e ritorna il puntatore alla lista modificata. Se la lista ha meno di k elementi la funzione non fa nulla.
Il tipo degli elementi della lista

typedef struct Elem {
    int          info;
    struct Elem *next;
} Elem;
typedef Elem* List;


Il prototipo della funzione List Sposta(List L, int k).

Ad esempio se la lista 7 -> 4 -> 2 -> 8 -> 9  e  k = 3 allora la funzione modifica la lista cos:
7 -> 4 -> 8 -> 9 -> 2.

 

Esercizio 3

Scrivere una funzione che presa in input una lista di interi e un intero positivo k, restituisce un array allocato dinamicamente che
contiene i k interi pi piccoli della lista. Il tipo degli elementi della lista cos definito:
typedef struct Elem {
    int          val;
    struct Elem *next;
} Elem;

Il prototipo della funzione int *Piccoli(Elem *L, int k). Si assume che gli interi della lista sono
tutti distinti e che sono in numero maggiore di k. Si richiede che il vettore sia ordinato in senso crescente.

Ad esempio se la lista 6 -> 2 -> 7 -> 9 -> 5 -> 3 -> 10   e   k = 3
allora la funzione deve restituire il vettore [2, 3, 5].


Esercizio 4  

Scrivere una funzione, con prototipo void PrintNumOcc(char *str1, char *str2),
che per ogni carattere distinto in str1 stampa il numero di occorrenze di quel carattere in str2.

Ad esempio, PrintNumOcc("pennino", "penna") deve stampare:
p 1
e 1
n 2
i 0
o 0

 

Esercizio 5   

Scrivere una funzione che presa in input una lista di interi, modifica la lista in modo tale che i primi n/2 (parte intera inferiore)
elementi, dove n il numero di elementi della lista, vengono posti in fondo alla lista e restituisce la lista cos modificata.
Il tipo degli elementi della lista cos definito:
typedef struct Rec {
    int info;
    struct Rec *next;
} Rec;


Il prototipo della funzione :  Rec *Sposta(Rec *L).

Ad esempio se la lista 1 -> 2 -> 3 -> 4 -> 5 -> 6 -> 7
allora la funzione deve restituire la lista 4 -> 5 -> 6 -> 7 -> 1 -> 2 -> 3.

 

Esercizio 6

Scrivere una funzione che preso in input una stringa e un intero positivo k crea una lista i cui elementi contengono i segmenti
consecutivi di lunghezza k della stringa. Il tipo degli elementi della lista cos definito:
typedef struct
ElemS {
   
    char
*        seg;    /* campo che contiene un segmento (come stringa C) */

    struct
ElemS *next;

} ElemS;
typedef ElemS* ListaS;


Il prototipo della funzione :    
ListaS Segment(char *str, int k).

Chiaramente sia gli elementi della lista che i campi seg di tali elementi devono essere allocati dinamicamente.

Ad esempio se la stringa di input "Stringa di esempio"   e   k = 4    allora la funzione deve restituire la lista:
               "Stri" -> "nga " -> "di e" -> "semp" -> "io"



Numero della prova: 106