Lezione 01 – corso di programmazione in C

Nuova avventura didattica.

Negli scorsi giorni ho avuto la fortuna di incontrare un gruppo di studenti che hanno una caratteristica molto bella, hanno la voglia di mettersi in discussione e di esplorare nuove frontiere, l’obiettivo partecipare ad un concorso molto particolare ZeroRobotics.

Le agenzie Spaziali Europea (ESA), Italiana (ASI), il Politecnico di Torino e l’universit di Padova, in collaborazione con il Massachusetts Institute of Technology (MIT), lanciano anche quest’anno il concorso Zero Robotics Europe 2012 in cui viene chiesto alle scuole superiori di creare programmi per il controllo di piccoli satelliti collocati nella Stazione Spaziale Internazionale (ISS).

Per poter pilotare i robot bisogner saper programmare in C ed io avr la funzione di “mentor”, dovr supportare la squadra dell’IIS Galilei Ferrari di Torino, una bella responsabilit, ma sicuramente dal punto di vista dell’insegnante una bella sfida e comunque vada sia io che loro impareremo molto.

A causa dei tempi strettissimi per apprendere e partecipare al concorso ho deciso di realizzare un corso “super concentrato” 🙂 di programmazione in C che si svolger in circa 4 settimane in cui gli allievi seguiranno lezioni pratiche in laboratorio con studio e sperimentazione a casa, il tutto condito da una buona dose di scambio informazioni via facebook.

Non mi dilungher sulla storia del C o su paragoni su altri linguaggi, ma la mia attenzione sar rivolta esclusivamente al linguaggio di programmazione.

Partiamo!

In questa lezione:

  • Componenti di un programma C
  • Struttura di base di un programma C
  • Variabili
  • Tipi di dati
  • Operatori aritmetici
  • Regole di precedenza degli operatori aritmetici
  • Esercizi

Qual l’ambiente di sviluppo di un programma C?

  1. l’ambiente di sviluppo del programma, quello che viene tipicamente indicato con IDE
  2. il linguaggio
  3. la libreria standard del C

Un programma in C prima di essere eseguito deve attraversare 6 fasi:

  1. editare
    scrittura (editing) del programma che si realizza con un editor, nella maggior parte dei casi incluso nell’IDE di programmazione;
  2. preelaborare
    in questa fase il preprocessore esegue alcuni comandi detti “direttive” che eseguono delle variazioni sul programma prima che questo venga compilato, in genere le “direttive” consistono nell’inclusione di altri file allinterno del programma che dovr essere compilato.
  3. compilare
    il compilatore traduce il programma C in linguaggio macchina, detto anche codice oggetto.
  4. linkare
    ovvero collegare, l’operazione che consente di collegare il programma da voi scritto con funzioni definite al di fuori del programma ad esempio le librerie standard. Il linker collega il codice oggetto con quello delle funzioni mancanti per creare un programma eseguibile.
  5. caricare
    il programma prima di essere eseguito deve essere caricato in memoria, questa operazione sar eseguita dal loader;
  6. eseguire
    il programma verr eseguito una istruzione alla volta, tutto ci sotto il controllo della CPU
Questo lo schema grafico delle fasi di realizzazione ed esecuzione di un programma in C:

Il primo programma in C

Il primo esempio che realizzeremo il classicoHello World!

Quando eseguiamo il programma l’output sar:

Vediamo in dettaglio cosa fa il programma.

la prima parte del programma:

un commento. I commenti in C iniziano con */ e terminano con */ ma la maggior parte dei compilatori accettano anche i commenti alla C++ quelli che incominciano con // e terminano con la fine della riga, pertanto il primo commento poteva essere scritto come:

Quindi potrete scrivere anche:

Ma cosa bisogna scrivere all’interno di un commento?

Tutte le informazioni necessarie che necessitano al programmatore e al team di sviluppo per comprendere ogni parte del programma. Un esempio potrebbe essere quello indicato sopra, in cui si indicano il nome del programma, eventualmente con la versione, il nome dell’autore o del gruppo di lavoro, data di creazione. Ma in alcuni casi potrebbe essere necessario indicare anche note sul
All’interno di un commento possibile scrivere informazioni sul programma, o commenti su un copyright o annotazioni sulle modifiche effettuate.

In generale buona norma commentare il pi possibile il programma, soprattutto se il programma dovr essere analizzato da altre persone.

Errori tipici con i commenti

  • inversione dei simboli, iniziare con */ e terminare con /*
  • dimenticare di concludere il commento con */

La seconda parte del programma :

questa una direttiva al preprocessore, cio un’istruzione che dice al computer che nelle istruzioni che seguono verranno utilizzate delle funzioni che sono state definite nel file stdio.h cio le funzioni che eseguono l’input e l’output standard, ad esempio quelle che permettono di scrivere un messaggio a monitor, di leggere i pulsanti premuti dalla tastiera, manipolare file ecc…
printf ad esempio una funzione in grado di stampare a monitor il testo incluso tra parentesi e questa funzione definita in stdio.h.

Quindi se non si inserisse la riga #include <stdio.h> non si potrebbe usare la funzioneprintf.

La terza parte del programma

la funzione main() che il punto di inizio di ogni programma C.

int scritto prima del main, indica che il programma restituir al termine dell’esecuzione a chi lo chiama, nel nostro caso il sistema operativo, un valore intero (da cui int), infatti il programma termina con return 0.

Notate che la parentesi graffa aperta { apre il corpo del main, cio il nucleo che definisce la funzionalit del programma e la parentesi graffa chiusa } chiude il corpo del main.

La quarta parte del programma:

una funzione che esegue un’azione, ciostampa il messaggio incluso tra apici, nel nostro caso “Hello world!\n” sullo standard output, nel nostro caso lostandard output il monitor.

Il carattere \ detto escapee la sequenza \n viene detta sequenza di escape, che serve per andare a capo dopo aver scritto ci che contenuto prima della sequenza \n.

Quindi dopo aver scritto Hello world! il cursore andr a capo.

\n vuol dire “new-line“, cio “nuova riga“.

Queste le principali sequenze di escape usate nel C:

  • \n new line. Il cursore viene posizionato all’inizio della riga successiva.
  • \t tabulazione orizzontale. Il cursore viene posizionato alla tabulazione successiva.
  • \b indietro di un carattere. Corrisponde al tasto backspace.
  • \a allarme. fa emettere un suono all’altoparlante di sistema.
  • \” stampa i doppi apici
  • \’stampa un apice singolo

IMPORTANTE:

  • tutta la riga compreso il contenuto incluso tra parentesi tonde fino al punto e virgola dettaistruzione;
  • tutte le istruzioni in C terminano con un ;

Laquinta parte del programma:

un’istruzione inclusa alla fine di ogni funzione main e dice al programma di restituire il valore intero 0 al sistema operativo ed uscire dall’esecuzione, ci indica che il programma si concluso con successo.

IMPORTANTE

Identare il programma. Per identificare il blocco di istruzioni appartenente ad una funzione buona norma far rientrare di una stessa quantit di spazi tutte le istruzioni incluse all’interno delle parentesi graffe. Di seguito viene evidenziato il rientro della porzione di codice del programma con il carattere –

Programma: utilizzare sei funzioni printf per scrivere una frase su una stessa linea

L’output sar

In questo caso ogni printf inizia la stampa dove aveva terminato la printf precedente.

Programma: utilizzare sei funzioni printf per scrivere sei frasi su 6 righe diverse

Come avrete intuito per visualizzare diverse righe sar sufficiente inserire al termine di ogni frase la sequenza escape \n e quindi se variamo il programma precedente come segue:

avremo

VARIABILI

Programma: somma di due numeri interi

Questo il risultato se introduciamo gli interi 4 e 6:

Analizziamo il programma tralasciando le sezioni gi spiegate in precedenza:

sono delle dichiarazioni e intero1, intero2 e somma sono i nomi delle variabili.

Le variabili possono essere intesi come dei ”contenitori” che al loro interno possono contenere numeri interi, numeri in virgola mobile, caratteri, ecc… nel programma di esempio le variabili dichiarate conterranno dei numeri interi.

I “contenitori” non sono altro che delle locazioni di memoria dove vengono immagazzinati i numeri che vengono poi utilizzati dal programma.

IMPORTANTE

tutte le variabili DEVONO essere dichiarate con un TIPO ed un NOME DI VARIABILE

e quindi in C avremo sempre:

Si noti che la dichiarazione delle variabili poteva anche essere scritta su un’unica linea:

questa notazione ha il vantaggi di rendere pi compatto il programma, ma lo svantaggio di descrivere nella stessa linea ogni variabile.

Tralasciando l’uso delle printf che gi conosciamo analizziamo la funzione scanf.

la scanf vine utilizzata per ottenere dall’utente un valore, prende un dato dallo standard input che nel nostro caso la tastiera.

La scanf ha due argomenti

  • il primo argomento indica il tipo di dato che dovr essere introdotto, in questo caso un intero e viene detta “specifica di conversione“.
  • La lettera d specifica che stiamo trattando un numero intero in base 10.
  • % un carattere speciale che indica una specifica conversione
  • il secondo argomento incomincia con &(ampersand) ed in C questo carattere detto “operatore di indirizzo” e quando seguito dal nome della variabile indica alla funzione che la utilizza (in questo caso la scanf) la locazione di memoria in cui viene memorizzata la variabile intero1.

calcola la somma delle variabili intero1 e intero2ed il risultato immagazzinato tramite l’operatore di assegnamento=” nella variabile somma.

analizzaimo la porzione di codice:

la funzione printf ha due argomenti:

  1. “Somma dei due numeri: %d\n”
  2. somma

Il primo argomento costituito dalla:

  • stringa di testo “Somma dei due numeri: ” che verr stampato a monitor
  • stringa del formato %d che definisce il formato del numero stampato (numero decimale intero).

Sulla base di quanto imparato fino a questo punto proviamo a realizzare il programma che stampa il precedente e il successivo di un numero.

Programma: precedente e successivo

Analizziamo la sezione di programma:

Si noti che entrambe le printf sono costituite da una porzione di testo in cui sono inclusi due %dseguite dal nome delle variabili usate nella stringa. L’ordine di scrittura delle due variabili definisce l’ordine di stampa, ovvero il primo %d accoglier il valore immagazzinato in numero ed il secondo %d per la prima printf accoglier il valore immagazzinato in prec mentre per la seconda printf accoglier il valore immagazzinato in succ.

TIPI DI DATI

A questo punto avreste dovuto intuire come vengono utilizzate le variabili nei vostri programmi, ricordate che una variabile in C ha la seguente struttura:

possibile anche assegnare un valore iniziale ad una variabile:

Ma quali sono i tipi utilizzati in C?

Ecco quelli pi utilizzati:

Tipo Uso tipico Dimensione (in bit) (riferimento: architettura x86)
char Caratteri di testo ASCII, valori binari generici da 1 byte 8
short int Numeri interi piccoli (da -32768 a 32767) 16
unsigned short int Numeri positivi interi piccoli (da 0 a 65535) 16
int Numeri interi (da -2147483648 a 2147483647) 32
unsigned int Numeri interi positivi (da 0 a 4294967295) 32
long int Numeri interi (la dimensione coincide con quella di un normale int su una macchina x86) 32
long long int Numeri interi grandi (da circa -9.22*10^18 a circa 9.22*10^18) 64
unsigned long long int Numeri interi grandi positivi (da 0 a circa 1.84*10^19) 64
float Numeri a virgola mobile (precisione singola) 32
double Numeri a virgola mobile (doppia precisione, notazione scientifica) 64

Esempi sui tipi di variabili:

OPERATORI ARITMETICI

Come avete notato negli esercizi precedenti abbiamo fatto largo uso di operatori aritmetici utilizzandoli cos come siamo abituati a fare normalmente, vediamo per in dettaglio nella tabella che segue quali sono i principali operatori aritmetici utilizzati in C:

Operazioni con gli int Simbolo Esempio
Addizione + 3 + 21 = 24
Sottrazione 53 12 = 41
Moltiplicazione * 3 * 8 = 24
Divisione intera / 15 / 4 = 3(3 il n di volte divisibili senza resto)
Divisione con modulo % 11 / 3 = 2(2 il resto della divisione)

Se utilizziamo numeri reali (float o double) lunica operazione che non si utilizzer sar la “divisione con modulo” che non ha senso di esistere in quanto la divisione pu contenere parti frazionarie:

Operazioni con gli int Simbolo Esempio
Addizione + 3.7 + 15.2 = 18.9
Sottrazione 57.9 19.3 = 38.6
Moltiplicazione * 3.7 * 5.2 = 19.24
Divisione intera / 7.0 / 2.0 = 3.5

REGOLE DI PRECEDENZA DEGLI OPERATORI ARITMETICI

Le regole adottate sono simili a quelle adottate nell’algebra:

  1. le espressioni tra parentesi saranno valutati per prima, in questo modo potrete utilizzare le parentesi per forzare l’ordine con cui vengono effettuati i calcoli. Le parentesi hanno la priorit massima rispetto a tutte le operazioni. Nel caso siano presenti parentesi annidate la precedenza di calcolo spetta alle coppie di parentesi pi interne: (X+(Y+Z)) l’operazione Y+Z sar svolta per prima.
  2. verranno calcolate prima le operazioni di moltiplicazione, divisione e resto che si trovano allo stesso livello di priorit. Nel caso un’operazione contenga pi operazioni di moltiplicazioni, divisioni e resto, lavalutazione avverr da sinistra verso destra.
  3. verranno valutate in ultimo le operazioni di addizione e sottrazione che si trovano allo stesso livello di priorit per pi basso delle operazioni al punto 2, la valutazione avviene da sinistra verso destra.

Programma: media tra due numeri

ESERCIZI

Esercizio 1: Realizzare una semplice calcolatrice

Specifiche:

scrivere un programma in grado di eseguire le 4 operazioni (somma, sottrazione, moltiplicazione e divisione) tra due numeri reali inseriti da tastiera.
Dopo che sono stati inseriti i due numeri X e Y il programma dovr visualizzare i 4 valori: X+Y; X-Y; X*Y; X/Y. Si ipotizzi che Y diverso da 0.

Esercizio 2: Calcolo di aree

Specifiche:

scrivere un programma che dato un numero reale X inserito da tastiera calcoli e stampi:

  1. l’area del quadrato di lato X
  2. l’area del triangolo equilatero di lato X
  3. l’area del cerchio di diametro X

Articoli simili:

Questa voce è stata pubblicata in i miei allievi, programmazione e contrassegnata con , , , . Contrassegna il permalink.

2 risposte a Lezione 01 – corso di programmazione in C

  1. giacomo scrive:

    non ho capito come fare poi per “avviare” e “salvare” questo programma ?

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

Questo sito usa Akismet per ridurre lo spam. Scopri come i tuoi dati vengono elaborati.