18.08.2013 Views

Dalla A alla Z passando per C - Robotica

Dalla A alla Z passando per C - Robotica

Dalla A alla Z passando per C - Robotica

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

int i;<br />

float f;<br />

printf("i = %d (%x)\n", i, i);<br />

printf("i = %7.2f\n", f);<br />

Il carattere “\n” indica l’andata a capo.<br />

14.3 La libreria standard stdlib<br />

La libreria standard dichiara costanti e funzioni di utilità generale, quali quelle <strong>per</strong> l’allocazione<br />

della memoria, conversione tra tipi e altre.<br />

Per utilizzare le funzioni della libreria standard è necessario includere il file di intestazione<br />

stdlib.h, con l’istruzione:<br />

#include <br />

Tra i tipi di dato definiti in stdlib.h c’è size_t, un tipo intero che è il tipo del valore<br />

restituito dall’o<strong>per</strong>atore sizeof.<br />

Tra le costanti definite in stdlib.h c’è la macro NULL, generalmente viene definita come 0, 0L,<br />

oppure (void*)0, che rappresenta il puntatore nullo. Inoltre, la costante RAND_MAX (maggiore o<br />

uguale a 32767), rappresenta il valore massimo che viene restituito d<strong>alla</strong> funzione rand() (vedi<br />

Sezione 14.3.4).<br />

14.3.1 Ricerca e ordinamento<br />

La libreria standard implementa due funzioni molto utili <strong>per</strong> la manipolazione di insiemi omogenei<br />

di dati: la funzione bsearch implementa l’algoritmo di ricerca binaria in modo generalizzato,<br />

ovvero applicabile a qualsiasi insieme di dati. Lo stesso vale <strong>per</strong> la funzione qsort, la quale<br />

implementa in maniera generica l’algoritmo di ordinamento QuickSort.<br />

Le funzioni sono dichiarate come segue:<br />

• void *bsearch ( void *key, void *base, size_t nmemb, size_t size, compar_fn_t compar);<br />

effettua una ricerca binaria dell’elemento key all’interno dell’insieme base; l’insieme consiste<br />

di nmemb elementi, ciascuno avente dimensione size; viene usata la funzione compar<br />

<strong>per</strong> confrontare due elementi dell’insieme;<br />

• void qsort (void *base, size_t nmemb, size_t size, compar_fn_t compar);<br />

effettua l’ordinamento dinmemb elementi dell’insiemebase, ciascuno dei quali ha dimensione<br />

size; viene usata la funzione compar <strong>per</strong> confrontare due elementi dell’insieme;<br />

Essendo funzioni generiche, esse o<strong>per</strong>ano allo stesso modo su ogni tipo di insieme, trattando<br />

ciascun elemento dell’insieme semplicemente come una sequenza di bit avente una determinata<br />

lunghezza. Per questo motivo in ciascuna funzione deve essere specificata la dimensione del singolo<br />

elemento. In particolare, la funzione qsort utilizza questa informazione anche <strong>per</strong> scambiare<br />

due valori. Alla funzione non interessa il significato dei bit che compongono i valori da scambiare,<br />

ma soltanto la loro posizione in memoria e la dimensione.<br />

Allo stesso modo, potendo lavorare su insiemi arbitrari di dati, si deve specificare quanti sono<br />

tali elementi.<br />

140

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!