Programmare in C – Librerie

Le librerie sono molto importanti in C perchè il linguaggio C è fondato solo su caratteristiche “base”. Il C non prevede operatori o costrutti propri del linguaggio per leggere dalla tastiera o scrivere sullo schermo.

Tutto ciò che estende il linguaggio base deve essere scritto da un programmatore. Le porzioni di codice risultante vengono messe nelle cosiddette librerie, in modo che possano essere riutilizzabili.
Abbiamo visto la libreria standard di I/O, chiamata stdio. Esistono librerie standard per le funzioni matematiche, per la manipolazione di stringhe, per manipolare i dati temporali e così via. Si possono usare librerie per suddividere i programmi in moduli. Ciò li rende più facili da capire, testare e fare il debug. Inoltre, è possibile riutilizzare lo stesso codice in più programm. Si possono creare le proprie librerie molto facilmente. Ad esempio, prenderemo del codice dalle lezioni precedenti e creeremo una libreria: Ecco il codice con cui lavoreremo:

#include <stdio.h>

#define MAX 10

int a[MAX];
int rand_seed=10;

int rand()
/* from K&R
   - produces a random number between 0 and 32767.*/
{
    rand_seed = rand_seed * 1103515245 +12345;
    return (unsigned int)(rand_seed / 65536) % 32768;
}

void main()
{
    int i,t,x,y;

    /* fill array */
    for (i=0; i < MAX; i++)
    {
        a[i]=rand();
        printf("%d\n",a[i]);
    }

    /* bubble sort the array */
    for (x=0; x < MAX-1; x++)
        for (y=0; y < MAX-x-1; y++)
            if (a[y] > a[y+1])
            {
                t=a[y];
                a[y]=a[y+1];
                a[y+1]=t;
            }

    /* print sorted array */
    printf("--------------------\n");
    for (i=0; i < MAX; i++)
        printf("%d\n",a[i]);
}

Come già visto, questo codice riempie un array con numeri random, li ordina con il metodo bubble sort e poi stampa su standard output la lista ordinata di numeri.

Prendiamo quindi il codice del bubble_sort e creiamo a partire da questo una funzione. Poiché sia l'array a e la costante MAX sono globali, la funzione che si può creare non necessita né di parametri, né di restituire un risultato. Comunque, useremo le variabili locali per x,y e t.

Una volta che si è verificato che la funzione “funziona”, conviene per una maggiore riutilizzabilità del codice passare il numero di elementi dell'array come parametro (e non fare affidamento al valore fisso della costante) nella funzione bubble_sort()

#include <stdio.h>

#define MAX 10

int a[MAX];
int rand_seed=10;

/* from K&R
   - returns random number between 0 and 32767.*/
int rand()
{
    rand_seed = rand_seed * 1103515245 +12345;
    return (unsigned int)(rand_seed / 65536) % 32768;
}

void bubble_sort(int m)
{
    int x,y,t;
     for (x=0; x < m-1; x++)
        for (y=0; y < m-x-1; y++)
            if (a[y] > a[y+1])
            {
                t=a[y];
                a[y]=a[y+1];
                a[y+1]=t;
            }
}

void main()
{
    int i,t,x,y;
    /* fill array */
    for (i=0; i < MAX; i++)
    {
        a[i]=rand();
        printf("%d\n",a[i]);
    }
    bubble_sort(MAX);
    /* print sorted array */
    printf("--------------------\n");
    for (i=0; i < MAX; i++)
        printf("%d\n",a[i]);
}

Si può inoltre generalizzare la bubble_sort() passando anche a come parametro:
bubble_sor(int m, int a[])
Questa linea dice “accetta l'array intero a di qualsiasi dimensione come parametro”. Niente nel corpo della funzione bubble_sort() deve essere cambiato. Per chiamare la funzione bubble_sort:
bubble_sort(MAX, a);

Da notare che &a non è stato usato in questa chiamata alla funzione bubble_sort. Ciò nonostante l'ordinamento cambierà i valori in a. La ragione di ciò sarà chiara una volta che introdurremo il concetto e il funzionamento dei puntatori.

Scarica subito una copia gratis

Scrivi un commento

Seguici anche sul tuo Social Network preferito!

Send this to a friend