Laboratorio di Programmazione. AA 2007/08.
Esercitazione n. 9

Scopo di questa esercitazione è di familiarizzarsi con i puntatori, array e stringhe.

Al solito, si suggerisce di creare una directory apposita per i files relativi a questa esercitazione.
I prototipi delle function di libreria per operare sulle strighe risiedono nel file di header string.h.Per utilizzare malloc invece è  necessario il file di header  stdlib.h.


     
  1. Modificare opportunamente il programma usato per ordinare una sequenza di numeri (bubblesort) in modo da poterlo impiegare sotto forma di function per ordinare sequenze di stringhe secondo l' ordine lessicografico (quello del dizionario).Suggerimento: per il confronto tra stringhe e per lo scambio, utilizzare le function di libreria strcmp e strcpy la cui modalita' di utilizzo e' reperibile mediante il comando man.

  2. La function strtok  ha  il prototipo   char *strtok(char *s, const char *delim);   La function permette di "spezzare"  la  stringa primo argomento in sottostringhe (token)  mediante la specifica di un insieme di caratteri di separazione mediante la seconda stringa argomento. Se il primo argomento e' la costante NULL, la ricerca della sottostringa si intende effettuata sulla stringa primo argomento della precedente chiamata a strtok con primo argomento diverso da NULL.  Ad ogni successiva chiamata con primo argomento NULL,  la ricerca inizia dall' ultima posizione raggiunta nella stringa. La stringa contenente i delimitatori puo' essere cambiata da una chiamata alla successiva.
    Esempio:
    #include <stdio.h>
    #include <string.h>
    int main(void)

    {

    char *token;
    char line[] = "...Linea esempio.Che non e' troppo lunga. Forse.";
    char *search = " .";

    token = strtok(line, search);
    printf("%s \n", token);
    token = strtok(NULL, search);
    printf("%s \n", token);
    token = strtok(NULL, search);
    printf("%s \n", token);
    token = strtok(NULL, search);
    printf("%s \n", token);
    token = strtok(NULL, search);
    printf("%s \n", token);
    token = strtok(NULL, search);
    printf("%s \n", token);
    token = strtok(NULL, search);
    printf("%s \n", token);
    token = strtok(NULL, search);
    return 0;
    }
    Modificare l' esempio in modo da estrarre tutti i token separati dal solo punto copiando le stringhe corrispondenti ad ogni token, ciascuna su una diversa componente di un array di stringhe (dichiarare l' array di stringhe come un array di puntatori a carattere).

  3. Scrivere un programma che dichiari ed inizializzi due  array a due indici (matrici) di dimensione 2x2 e poi calcoli la matrice prodotto i cui elementi sono dati da

    cij = Somma_su_k_da_1_a_2     aik bkj

    per 1 <= i<= 2 e 1 <= j<= 2

    Tener conto dei diversi limiti degli indici degli arrays C. L'algoritmo da cui partire può   essere descritto come: per ogni i nell' intervallo [0,1]; per ogni j nell' intervallo [0,1]; si inizializzi c[i][j] = 0; per ogni k nell' intervallo [0,1]; si sommi al precedente valore di c[i][j] il prodotto a[i][k]*b[k][j].


  4. Scrivere un programma che, letta una matrice di interi o reali,  ne individui la colonna in cui la somma degli elementi è  massima.

  5. Scrivere un programma che allochi spazio e poi legga una matrice NxM di interi e la visualizzi  scambiando la i-  e la j-  esima colonna.

  6. Scrivere una function che abbia come argomento una matrice NxM di interi e la scriva in rappresentazione esadecimale.