Corso di Fondamenti di Informatica Ingegneria Clinica Domenico Daniele Bloisi
Informazioni Generali ing. Domenico Daniele Bloisi Dipartimento di Informatica e Sistemistica Stanza B213, secondo piano Via Ariosto 25 (adiacente Piazza Dante, Vittorio Emanuele, Tram 3 fermata via Labicana) mailto:bloisi@dis.uniroma1.it http://www.dis.uniroma1.it/~bloisi Pagina 2
Ricevimento Martedì 15.15-17.15 Giovedì 15.45-17.45 Via Ariosto 25, Stanza B213 Si consiglia di inviare una e-mail per conferma mailto:bloisi@dis.uniroma1.it Pagina 3
Perché il C? Il C è un linguaggio professionale ampiamente utilizzato per varie ragioni: ha strutture di alto livello può maneggiare attività di basso livello produce programmi efficienti Pagina 4
Perché C? UNIX developed (1969) - DEC PDP-7 Assembly Language BCPL - un OS facilmente accessibile che fornisce potenti strumenti di sviluppo prodotti a partire da BCPL. Si tratta di un assemblatore noioso, lungo ed incline agli errori Un nuovo linguaggio "B" come secondo tentativo nel 1970 Un linguaggio "C" totalmente nuovo come successore di "B" nel 1971 Dal 1973 UNIX OS, quasi totalmente scritto in C Pagina 5
C come cautela Il suo principale inconveniente e' quello di avere un metodo scadente per l'identificazione di errori, che può escluderne l'utilizzo ai principianti. Comunque con un minimo di diligenza si può risolvere elegantemente questo problema, in quanto si possono violare le regole del C non appena si sono imparate (non molti linguaggi lo permettono). Nel caso in cui venga fatto correttamente e con attenzione, questo porta a sfruttare le potenzialità della programmazione C. Pagina 6
Iniziamo a programmare Cosa occorre: Carta e Penna Un Editor di Testo Un compilatore Ambiente di Sviluppo Integrato IDE Pagina 7
Ambiente di Sviluppo DevC++ reperibile @ http://www.bloodshed.net/dev/devcpp.html Pagina 8
Ambiente di Sviluppo (2) Nel caso in cui il download non sia automatico Pagina 9
Procedura di installazione Il file di installazione è devcpp-4.9.9.2_setup.exe Si tratta dell ultima release (beta) Passo 1: doppio click su devcpp-4.9.9.2_setup.exe Scegliere Esegui Pagina 10
Procedura di installazione (2) Passo 2: cliccare su OK Passo 3: scegliere italiano Passo 4: selezionare Accetto Pagina 11
Procedura di installazione (3) Passo 5: cliccare su Avanti Passo 6: cliccare su Installa Pagina 12
Procedura di installazione (4) Passo 7: cliccare su Si Passo 9: cliccare su Fine L installazione è terminata Pagina 13
First time Configuration Passo 1: Cliccare su OK Passo 2: Scegliere Italian e Use XP Theme Cliccare su Next Pagina 14
First time Configuration (2) Passo 3: Cliccare su Next Pagina 15
First time Configuration (3) Passo 4: Cliccare su Next Pagina 16
First time Configuration (4) Passo 5: Cliccare su Ok Ora è tutto pronto per iniziare Pagina 17
Creazione Nuovo Progetto Click su File Pagina 18
Nuovo Progetto Nuovo Progetto Pagina 19
Nuovo Progetto (2) 1. Selezionare Empty Project 2. Selezionare C e Linguaggio Predefinito. Scegliere un nome 4. Cliccare su OK Pagina 20
Nuovo Progetto (3) Scegliere Salva Pagina 21
Nuovo Progetto (4) Pagina 22
Nuovo File Sorgente File Nuovo File Sorgente Pagina 23
Nuovo File Sorgente (2) Scegliere Yes Pagina 24
Nuovo File Sorgente (3) Dev-C++ crea un nuovo file denominato SenzaTitolo Si scriva il programma e si scelga salva (Menu File Salva) Pagina 25
Nuovo File Sorgente (4) Importante, il file sorgente deve avere estensione.c il nome scelto è provasorgente.c Scegliere Salva Pagina 26
Nuovo File Sorgente (5) Per compilare Se la compilazione ha successo Pagina 27
Primo programma con Dev-C++ Per compilare Per eseguire Pagina 28
Problemi pratici (tastiera italiana) Come si scrive la graffa aperta ( { )? Alt + 123 oppure AltGr + Shift + è oppure Fn + Alt + 123 (per i portatili) Come si scrive la graffa chiusa ( })? Alt + 125 oppure AltGr + Shift + + oppure Fn + Alt + 125 (per i portatili) Pagina 29
Problemi pratici Perché se clicco su esegui in Dev-C++ non vedo l output o meglio appare e scompare immediatamente dopo? Perché il programma termina immediatamente dopo aver eseguito le istruzioni in esso contenute. Per visualizzare l output aggiungere come ultima istruzione system( PAUSE ); (N.B. va inserita all inizio del file sorgente la riga #include <stdlib.h>) Nel caso in cui ciò non dovesse funzionare, è possibile eseguire il programma direttamente da prompt di DOS, eseguendo il file <nomeprogetto>.exe creato da Dev-C++ in fase di compilazione Pagina 30
La funzione printf L istruzione printf è una funzione C che visualizza ciò che viene passato come argomento ad essa Fa parte della libreria stdio.h int printf(char *format, args ) Ritorna il numero di caratteri stampati Pagina 31
Argomenti di printf (char *format) I formati possibili sono: %c per il singolo carattere %d per numeri decimali %o per numeri ottali %x per numeri esadecimali %u per unsigned int %f per float o double %s per stringhe %e per formato scientifico Tra % e la lettera si può inserire un segno meno che significa giustificazione a sinistra, un numero intero che dà l'ampiezza del campo che può essere seguito da un punto e da un altro intero che da il numero di cifre decimali o il numero di caratteri per una stringa. Pagina 32
Esempio d uso per printf dà come risultato: 1^ volta con il C 123.9877 #include <stdio.h> #include <stdlib.h> main() { int x = 1; printf( %d^ volta con il C\n, x); printf( %3.4f\n",123.987654); system( PAUSE ); } Pagina 33
Alcune sequenze di escape \ \ \? \\ \a (alarm) \n (new line) \t (tab) La lista completa sul libro di testo alla voce: sequenze di escape Pagina 34
Esempio d uso per printf (2) #include <stdio.h> #include <stdlib.h> main() { int y; y = printf( seconda volta con il C\n ); printf( y = %d\n", y); system( PAUSE ); } dà come risultato: seconda volta con il C y = 23 Pagina 35
La funzione scanf La funzione che permette l'input di un elenco di variabili e': int scanf(char *format, args...) che legge dallo standard input e assegna all'elenco di variabili i valori letti. Ritorna il numero di caratteri letti. NB. E' richiesto l'indirizzo della variabile o un puntatore. Pagina 36
Esempio d uso per scanf #include <stdio.h> #include <stdlib.h> main() { printf( inserisci un intero:\n ); int x; ATTENZIONE alla & scanf( %d", &x); printf( Ho letto %d\n, x); system( PAUSE ); } Se inserisco una lettera ottengo comunque un intero (che è la codifica di quella lettera) Pagina 37
Esempio d uso per scanf (2) #include <stdio.h> #include <stdlib.h> main() { printf( inserisci una stringa:\n ); char string[80]; ATTENZIONE niente & scanf( %s", string); printf( Ho letto %s\n, string); system( PAUSE ); } Pagina 38
Esercizio Realizzare un programma C che sia in grado di richiedere all utente Nome Cognome Età Per poi stampare a video le risposte Pagina 39
Soluzione Esercizio #include <stdio.h> #include <stdlib.h> main() { printf("\tsalve\n\n\n"); printf("inserisci il tuo nome:\n"); char string_nome[80]; scanf("%s", string_nome); printf("inserisci il tuo cognome:\n"); char string_cognome[80]; scanf("%s", string_cognome); printf("inserisci la tua eta':\n"); int int_eta; scanf("%d", &int_eta); printf("nome: %s COGNOME: %s ETA\': %d\n", string_nome, string_cognome, int_eta); system("pause"); } Pagina 40
scanf va usata con attenzione #include <stdlib.h> #include <stdio.h> main() { } printf( inserisci una stringa:\n ); char string[8]; ATTENZIONE i caratteri sono solo 8 scanf("%s", string); printf( Ho letto %s\n, string); system( PAUSE ); E se la stringa che l utente inserisce è > 8 caratteri? Pagina 41
scanf va usata con attenzione (2) E se la stringa che l utente inserisce è > 8 caratteri? Risposta: il comportamento non è prevedibile BUFFER OVERFLOW Pagina 42
L istruzione if L'istruzione if può avere tre forme di base: if (expression) statement if (expression) statement1 else statement2 if (expression1) statement1 else if (expression2) statement2 else statement3 Le parentesi graffe non sono obbligatorie in caso di una sola istruzione dopo l if. Altrimenti (due o più operazioni) sono obbligatorie. E consigliabile utilizzarle sempre per aumentare la leggibilità del codice Pagina 43
Operatori relazionali, di uguaglianza e logici I seguenti simboli possono essere utilizzati all interno delle parentesi tonde dell if > < >= <= ==!= &&! Nota bene: dopo l if NON va mai il punto e virgola Pagina 44
Esempio d uso per l istruzione if #include <stdio.h> #include <stdlib.h> main() { printf("inserisci la tua eta':\n"); int int_eta; scanf("%d", &int_eta); if (int_eta >= 18) printf("sei maggiorenne\n"); else if (int_eta < 18 && int_eta >= 0) printf("sei minorenne\n"); else{ printf( Errore\n ); printf( valore negativo\n ); } system("pause"); } Pagina 45
Esercizio Scrivere un programma che studi le soluzioni dell equazione di secondo grado Pagina 46
Soluzione #include <stdio.h> #include <stdlib.h> main() { printf("programma per la soluzione di ax^2+bx+c\n\n"); printf("inserisci a:\n"); int int_a; scanf("%d", &int_a); printf("inserisci b:\n"); int int_b; scanf("%d", &int_b); printf("inserisci c:\n"); int int_c; scanf("%d", &int_c); int delta = int_b*int_b - 4*int_a*int_c; if(delta > 0) printf("le radici sono reali e distinte\n"); else if(delta == 0) printf("le radici sono reali e coincidenti\n"); else printf("le radici sono immaginarie\n"); system("pause"); } Pagina 47
Esercizio Scrivere un programma che data in ingresso una data in formato giorno mese anno stampi il giorno successivo Esempio Se l input è: 1 2 2007 il programma stampa: 2 2 2007 Pagina 48