Lezione 19
Discussione esercizio 35:
#include <stdlib.h>
#include <string.h>

typedef struct {
    char     cognome[40];    //stringa
    char     nome[20];
} Persona;

//Confronta due persone in base al cognome
int cmpP(const void *e1, const void *e2) {
    Persona *p1 = (Persona *)e1, *p2 = (Persona *)e2;
    return strcmp(p1->cognome, p2->cognome);
}

void sort_pers(Persona P[], int n) {
    qsort(P, n, sizeof(Persona), cmpP);
}

Discussione esercizio 36:
#include <stdlib.h>

typedef struct Elem {
    int          val;
    struct Elem *next;
} Elem, *List;

List filter(List L, int (*f)(int v)) {
    Elem **p = &L;  //Puntatore alla locazione che contiene il puntatore all'elemento corrente
    while (*p != NULL) {
        Elem *e = *p;
        if (f(e->val)) {
            *p = e->next;
            free(e);
        } else
            p = &((*p)->next);
    }
    return L;
}

 File  ad accesso sequenziale (file di testo) e file ad accesso casuale (file binari). Rappresentazione, da un punto di vista logico, di un file: il cursore e l'effetto delle operazioni di lettura/scrittura su di esso. Il riferimento ad un file aperto: la struct FILE. Le principali funzioni, della libreria standard (stdio.h), per la manipolazione dei files. Le funzioni fscanf, fprintf e fgets sono usate prevalentemente per file di testo (anche se nulla vieta di usarle per file binari). Le funzioni più adatte a leggere e scrivere file binari sono trattate nella prossima lezione.

Ecco alcuni esempi. Esercizio 37    Scrivere un programma che prende come argomenti del main i nomi di due file di testo, legge tutte le parole contenute nel primo file memorizzandole in un array di stringhe, ordina l'array tramite qsort() e scrive nel secondo file le parole distinte (senza ripetizioni) e ordinate, una per linea.
Suggerimenti: il primo file va aperto in lettura ("r"), il secondo in scrittura ("w"), per leggere le parole modificare la funzione next_word() del programma che conta le parole distinte.
Esercizio 38    Scrivere un programma che prende come argomenti del main i nomi di due file di testo e appende il contenuto del secondo file al primo file. Ad esempio, se il primo file contiene Testo primo file e il secondo file contiene Testo secondo file allora il programma modifica il primo file così Testo primo fileTesto secondo file.