Benvenuti nel sito del corso di Laboratorio di informatica applicata.
Obiettivo del corso e' quello di sviluppare due progetti, uno in C ed uno PHP. Le lezioni e le esercitazioni servono per imparare ad implementare idee nei due linguaggi ed a capire cosa succede nel nostro sistema quando eseguite un programma. Il corso contiene molti esempi. E' importante che ogni esempio venga non solo letto e capito, ma soprattutto provato, modificato, anche riutilizzato.
OBIETTIVO DELLA LEZIONE
Capire cosa e' un programma, come possa diventare eseguibile su un processore attraverso la compilazione, quali sono gli strumenti per iniziare a scrivere programmi ed a eseguirli e e dove trovarli in rete.
#include <stdio.h> int main() { printf("Hello World!"); }Vediamo la stessa stampa a video in linguaggio Java.
class helloworld { public static void main(String args[]) { System.out.println("Hello World!"); } }Nel linguaggio Fortran, ancora diffuso per simulazioni numeriche, sarebbe stato:
PROGRAM HELLOWORLD C Le prime sei colonne sono vuote WRITE(UNIT=*,FMT=*) 'Hello World!' END
#include <stdio.h> int main() { int x; int i; x = 1; i=x+3; printf("Il risultato di i=x+3 e' %d" , i); getchar(); // trucco per far rimanere aperta la finestra di testo }L'istruzione C
i=x+3;diventa qualcosa del tipo (Microsoft Assembler)
mov eax, [x] add eax, 3 mov [i], eax
eax
è un registro del processore; [x]
è il contenuto della cella di memoria di indirizzo x
.
#include <stdio.h> int main() { char sex; int eta; printf("Inserire il proprio sesso:\n M sta per maschio:\n F sta per femmina:\n"); scanf("%c", &sex); printf("Inserire l'eta\n"); scanf("%d", &eta); if((sex=='M') || (sex=='m')) printf("Sei un maschio e hai %d anni", eta); else printf("Sei una femmina e hai %d anni",eta); printf("\n\nPremi un tasto per uscire"); fflush(stdin); getchar(); // trucco per far rimanere aperta la finestra di testo }
Un programma scritto il linguaggio C deve contenere, nell'ordine:
... if((sex=='M') || (sex=='m')) printf("Sei un maschio e hai %d anni", eta); else printf("Sei una femmina e hai %d anni",eta); ....Modo2:
.... if((sex=='M') || (sex=='m')) { printf("Sei un maschio e hai %d anni", eta); } else { printf("Sei una femmina e hai %d anni",eta); } ...
Abbiamo visto cosa serve un compilatore. Ma come si utilizza? Il modo più semplice è attraverso un "Ambiente di sviluppo", cioè un software che ci permette di editare il file, di produrre l'eseguibile premendo un tasto e di controllarne l'esecuzione nel caso ci siano comportamenti anomali ("debug" del codice).
Microsoft Visual Studio .NET è un tipico ambiente di sviluppo per piattaforma Windows.
Un ambiente freeware alternativo è Dev-C++. Vi suggeriamo di utilizzare questo IDE durante le esercitazioni. Lo si può scaricare da qui.
In alternativa possiamo utilizzare direttamente il compilatore da riga di comando. Come?
Apriamo un "prompt" dei comandi (Start->Programmi->Accessori->Prompt dei comandi).
Invochiamo il compilatore (GCC è un compilatore freeware multipiattaforma, lo stesso utilizzato a nostra insaputa da Dev-C++.) con:
C:>gcc -o helloworld.exe helloworld.c
Oppure in due "passate" (prima produco il codice oggetto poi lo unisco ("link") alle librerie necessarie:
C:>gcc -c helloworld.c C:>gcc -o helloworld.exe helloworld.o
La compilazione avviene sostanzialmente in due fasi. Nella prima il file sorgente viene passato attraverso il precompilatore (chiamato anche preprocessore o macroprocessore); nella seconda viene prodotto il codice binario. Il preprocessore permette di definire delle "direttive" che per esempio permettono di includere dei files, come:
#include <stdio.h>
Oppure di definire delle costanti:
#define FEIGENBAUM_NUMBER 4.669201
titano\miaDir\ \lez1\ hallo.c eccc \lez2\ tutti i file della lezione 2 ....eccma anche su un tuo supporto (dischetto, chiavetta USB, posta elettronica..).
Esercizio 1
Usando NOTEPAD, creare il file halloword.c copiando il programma sotto riportato e compilarlo con DEV-C
# include <stdio.h> int main() { printf("Hello World!"); }
Esercizio 2
Compilare il file halloword.c creato nell'esercizio 1 con Microsoft Visual Studio .NET. La procedura e' in questo caso piu' laboriosa perche' dobbiamo necessariamente definire un progetto. Quindi:
- Per prima cosa apriamo MSVS .NET;
- Dal menu' file, selezioniamo nuovo progetto. Scegliamo un progetto "Visual C++" (anche se noi inseriremo solo un file C), per win32. IMPORTANTE: nel menu' successivo, tra le opzioni avanzate, ricordarsi di selezionare che volete una applicazione di CONSOLE che sia VUOTA (il file lo aggiungeremo manualmente al prossimo punto).
- A questo punto dal menu file, aggiungiamo al progetto il nostro file halloword.c
- Possiamo compilare il progetto ed eseguirlo.
Esercizio 3
Compilare il file halloword.c con il compilatore gcc da riga di comando. Esplorare le varie opzioni di compilazione chiamando l'help.
- Per prima cosa apriamo un command prompt;
- VERIFICHIAMO di essere nella cartella dove abbiamo messo il file da compilare!
- Aggiungiamo al PATH la cartella dove è installato il GCC, con
set PATH=%PATH%;c:\dev-cpp\bin- Invochiamo il compilatore come spiegato a lezione.
Se non diversamente specificato, da adesso in poi, useremo sempre in aula TUTTI DEV-C. A casa, prova sempre ad usare altri compilatori e a compilare da riga di comando.
Esercizio 4
Usando l'interfaccia grafica di DEV-C, creare il file sesso.c copiando il programma sotto riportato , compilarlo con DEV-C
#include <stdio.h> int main() { char sex; int eta; printf("Inserire il proprio sesso:\n M sta per maschio:\n F sta per femmina:\n"); scanf("%c", &sex); printf("Inserire l'eta\n"); scanf("%d", &eta); if((sex=='M') || (sex=='m')) printf("Sei un maschio e hai %d anni", eta); else printf("Sei una femmina e hai %d anni",eta); printf("\n\nPremi un tasto per uscire"); fflush(stdin); getchar(); // trucco per far rimanere aperta la finestra di testo }
Esercizio 5
Iniziamo a vedere come si manifestano gli errori di sintassi in C. Togliere getchar(); compilare, cosa cambia?
Togliere il punto e virgola a int eta; cosa accade? Dove si manifesta l'errore? Perche'?
Togliere una graffa in varie posizione del costrutto if. cosa accade? Dove si manifesta l'errore? Perche'?
Modificare (sex=='m') in (sex='m') cosa cambia?
Esercizio 6 (facoltativo)
Questo esercizio è FACOLTATIVO.
Svolgilo SOLO se hai ultimato gli esercizi precedenti, che sono necessari per l'esame finale.
Usando Dev-C++, creare il file inmemoria.c riportato sotto. Compilalo e prova ad eseguirlo da linea di comando
Inserisci un breakpoint alla linea printf("Inserisci un numero intero: "); e fai partire il debugger.
Segui l'esecuzione del programma passo passo. Visualizza il contenuto di ciascuna variabile.
#include <stdio.h> int main() { int numero_intero; char carattere, parere; float numero_reale; do { printf("Inserisci un numero intero: "); scanf("%d", &numero_intero); fflush(stdin); printf("Inserisci un carattere: "); scanf("%c", &carattere); fflush(stdin); printf("Inserisci un numero reale: "); scanf("%f", &numero_reale); fflush(stdin); printf("Hai inserito: %d, %c, %f.\n", numero_intero, carattere, numero_reale); printf("Vuoi continuare [S]/N? "); scanf("%c", &parere); fflush(stdin); } while((parere=='S') || (parere=='s')); // Attenzione al ; }
©2004 Roberto Sassi