Esercizi di programmazione -------------------------- Scrivere dei programmi C per risolvere i seguenti problemi (in ordine di difficolt\`a). 1) Studiate i vari casi particolari delle istruzioni C (ad esempio while e for senza istruzioni nel corpo) e trovate esempi in cui si possono utilizzare. 2) Studiate il comportamento delle assegnazioni all'interno di espressioni (ad esempio, definire un programma di prova per verificare la differenza tra ((a=c++)>0) e ((a=++c)>0) ecc.). Studiate il funzionamemnto delle espressioni booleane (short circuit). 3) Data una sequenza di N numeri in input, produrre una tabella con il numero di occorrenze di ogni componente nell'input Se l'input \`e 12 9 4 9: 12 --> 1 9 --> 2 4 --> 1 4) Leggere una stringa di caratteri e produrre come output la stringa ottenuta togliendo tutti i caratteri compresi tra due '*' (scorrendo la lista da sinistra a destra). Ad esempio: "abc*fgh*ert*il*koo*" ---> "abcertkoo*" (commenti tra '*'). 5) Aggiungere il controllo di bilanciamento di '*'. 6) Data una stringa in input controllare se ha la seguente forma: a1 a2...ai a{i+1} ai...a2 a_1 (palindrome). 7) Data una matrice di 0(casella vuota) e 1(casella libera) che rappresenta un labirinto, e date le coordinate dell'entrata e dell'uscita, definire un programma che trova il cammino dall'entrata all'uscita (se esiste) e stampa in successione le coordinate delle caselle che compongono il cammino. 8) Dato un array A di N elementi, e un array S (da 1..N a 1..N) che rappresenta una permutazione degli indici 1..N, applicare la permutazione S ad A possibilmente senza l'ausilio di un array di appoggio. 9) Mergesort(k): definite una versione generalizzata di mergesort nella quale si spezza l'array da ordinare in k-parti (k>=2 intero). 10) Dato n>= 2 intero in input produrre il seguente output: Per n=1 1 Per n=2 2 212 22222 Per n=3 3 323 32123 3222223 333333333 ecc. Cioe' dato il triangolo interno costruito al passo i-esimo, al passo i+1-esimo occorre aggiungere un ulteriore triangolo che ha come lati sequenze del numero i+1. 11) Ridefinite l'algoritmo di mergesort utilizzando la compatibilit'a tra array e puntatori e l'aritmetica dei puntatori: invece di operare sugli indici operate sui puntatori.