Le possibilità offerte dal linguaggio C sono infinite, soprattutto quando c'è da gestire, in modo ordinato e preciso, i propri algoritmi. Scrivere una propria funzione, e riutilizzarla, è una prerogativa di quasi tutti i linguaggi di programmazione, ma il C lo fa in modo esemplare. L'articolo che segue affronta il tema con estrema chiarezza, approfondendo anche l'argomento del passaggio e del ritorno dei parametri e dei valori.
Introduzione
Il mio primo linguaggio di programmazione fu il Basic per lo ZX81 Sinclair, uno dei primi Home Computer. La sua memoria era estremamente limitata, solo 1Kb di Ram (avete letto bene, solamente 1 kilobyte) con i quali si riusciva a fare ben poco, ma i rimedi estremi, a volte, esortavano a fare miracoli. Ebbene, il limitato potere del sistema mi costringeva, spesso, a ripetere tanto codice. E molte volte tale ripetizione riguardava uno stesso algoritmo, magari eseguito in precedenza. Per fortuna esistevano i Gosub e i Return che risolvevano alcuni problemi.
Le funzioni UDF
Il C è un linguaggio interamente basato su funzioni. Tutto è una funzione, anche la main(), che contiene il programma principale. Una UDF (user-defined function) è una funzione creata dall'utente che ha lo scopo di soddisfare ed eseguire compiti non contemplati da altre funzioni già esistenti. Con esse, in pratica, si arricchisce il linguaggio di nuove possibilità.
Il seguente esempio, anche se funziona, non utilizza una UDF, pertanto il numero delle righe è elevato e il sorgente non risulta snello e leggibile. Il programma deve determinare se quattro numeri sono primi o meno. Ricordiamo che un numero primo è un numero naturale che può essere diviso solo per 1 e per se stesso.
Il listato è volutamente lungo e tedioso, proprio per rimarcare l'importanza dell'esistenza delle UDF. In esso viene determinato se i numeri 23, 10007, 10011, 30000001 e 750000007 sono primi. Per ognuno di essi una variabile itera tra 2 e n-1 alla ricerca di un divisore (vedi n%k==0). Il programma non è per nulla ottimizzato e si potrebbe velocizzarlo ulteriormente. Per gli ultimi due numeri esso impiega qualche secondo per decretare la soluzione. Si compili, dunque, con il solito comando:
gcc -Wall prova.c
e si esegua il programma. Il risultato è visibile in figura 1.
#include <stdio.h> int main(){ unsigned long k,n; char FlagPrimo; /*----------------------------------*/ n=23; FlagPrimo=1; for(k=2;k<n;k++) if(n%k==0) FlagPrimo=0; if(FlagPrimo==1) printf("%ld e' un numero Primo\n",n); else printf("%ld e' un numero Composto\n",n); /*----------------------------------*/ n=10007; FlagPrimo=1; for(k=2;k<n;k++) if(n%k==0) FlagPrimo=0; if(FlagPrimo==1) printf("%ld e' un numero Primo\n",n); else printf("%ld e' un numero Composto\n",n); /*----------------------------------*/ n=10011; FlagPrimo=1; for(k=2;k<n;k++) if(n%k==0) FlagPrimo=0; if(FlagPrimo==1) printf("%ld e' un numero Primo\n",n); else printf("%ld e' un numero Composto\n",n); /*----------------------------------*/ n=30000001; FlagPrimo=1; for(k=2;k<n;k++) if(n%k==0) FlagPrimo=0; if(FlagPrimo==1) printf("%ld e' un numero Primo\n",n); else printf("%ld e' un numero Composto\n",n); /*----------------------------------*/ n=750000007; FlagPrimo=1; for(k=2;k<n;k++) if(n%k==0) FlagPrimo=0; if(FlagPrimo==1) printf("%ld e' un numero Primo\n",n); else printf("%ld e' un numero Composto\n",n); /*----------------------------------*/ return 0; }
Nel listato si nota una caratteristica particolare: viene ripetuto tante volte lo stesso algoritmo. Immaginate se avessimo dovuto controllare 1000 numeri, quanto lungo [...]
ATTENZIONE: quello che hai appena letto è solo un estratto, l'Articolo Tecnico completo è composto da ben 2497 parole ed è riservato agli ABBONATI. Con l'Abbonamento avrai anche accesso a tutti gli altri Articoli Tecnici che potrai leggere in formato PDF per un anno. ABBONATI ORA, è semplice e sicuro.
Salve, ma questo articolo è in più rispetto alle uscite su EOS Book? Non mi ricordo di averlo visto.
Nella sezione “articoli correlati” sulla destra trovi le puntate precedenti 😉
Forse ho posto male la domanda, intedevo chiedere se per il corso c su raspberry oltre alle uscite su eos-book ci sono anche articoli come questo pubblicato a parte.
Che intendi pubblicato a parte ? Questo e’ pubblicato su eos book cosi’ come i precedenti e i prossimi 🙂
Ho capito adesso, ho fatto confusione con le date perché l’eos-book uscito ieri si riferiva agli articoli di settembre.