Lezione 10 L`arte della programmazione

Transcript

Lezione 10 L`arte della programmazione
Lezione 10
Linguaggi di programmazione: il C
?Le variabili e le costanti
?L’assegnazione
?Gli operatori
?La documentazione
?L’input/output
L’arte della programmazione
? La soluzione di un problema tramite un
programma è un procedimento che non si
esaurisce solo nello scrivere linee di codice in un
dato linguaggio di programmazione, ma
comprende una fase di progetto che precede e
di verifica che segue la scrittura del codice
1
L’arte della programmazione
? Definizione del problema
? Algoritmo per la soluzione del problema
? Codifica
? Debugging
? Validazione
? Documentazione
? Manutenzione
Definizione del problema
? Definizione degli ingressi e delle uscite
? quali variabili
? quale dominio per ogni variabile
? Risoluzione delle ambiguità
? Scomposizione in problemi più semplici
2
Algoritmo
? Soluzione in pseudocodice
? Soluzione in diagramma a blocchi strutturato
Codifica
? Traduzione dell’algoritmo in istruzioni del
linguaggio di programmazione
3
Debugging
? Correzione degli errori sintattici e semantici
? Errori sintattici
? espressioni non valide o non ben formate nel
linguaggio di programmazione
? Errori semantici
? comportamento non aderente alle aspettative/alla
intenzionalità del programmatore
Validazione
? Test su tutte le condizioni operative del
programma
? Caso degli input estremi (vettori di dimensione
0 o 1, variabili nulle)
4
Documentazione
? Inserimento di commenti esplicativi nelle varie
parti del programma per facilitarne la
comprensione dopo molto tempo dalla sua
stesura o per terze persone
Manutenzione
? Modifica del programma per soddisfare il
cambiamento delle specifiche con cui deve
operare
5
Struttura di un programma
? Un algoritmo rappresentato da un diagramma a
blocchi strutturato può essere tradotto in una
serie di espressioni del linguaggio C
? Il C possiede 32 parole chiave per definire il tipo
dei dati e le istruzioni di controllo
? Operazioni più complesse ma di uso comune
sono realizzate tramite funzioni rese disponibili
da apposite librerie
Struttura di un programma
? I blocchi BEGIN e END sono rappresentati in C
come:
void main(){ … }
? Un programma deve essere descritto dentro il
blocco main
? Un blocco di istruzioni è racchiuso da {}
? Una istruzione è terminata da ;
6
Le costanti e le variabili
? Le variabili sono dichiarate indicandone il tipo e
il nome
type name;
? I tipi possibili in C sono:
? char: usato per rappresentare le lettere
? int: usato per rappresentare gli interi
? float: usato per rappresentare i numeri in virgola
mobile
? Es:
? int num;
? char my_character;
Il nome delle variabili
? Il nome di una variabile è una sequenza di:
? caratteri alfabetici maiuscoli o minuscoli
? numeri (non come primo carattere)
? il carattere ‘_’ (si usa al posto dello spazio)
Valido
Non Valido
risultato_max
carta23
ilMioConto
%conto#
max risultato
variabile.di.interesse
una-citta’
il/risultato
3Identificativo
7
Le costanti
? Premettendo il qualificatore const ai vari tipi di
variabile si ottengono le costanti
const int numero_elementi=20;
? Nota:
? alle costanti è possibile attribuire un valore solo al
momento della dichiarazione, cioè quando la si
introduce per la prima volta insieme al suo tipo
? non è più possibile cambiarne il valore in alcun modo
per tutto il resto del programma
Constanti e variabili
? Tutte le costanti e le variabili vanno dichiarate
all’inizio del blocco in cui sono utilizzate
? Es:
void main(){
printf(“stampa”);
int a; /*ERRORE esiste printf prima di int a;*/
a=3;
}
8
Char
? E’ usato per rappresentare i caratteri
? Occupa 1 byte
? Può assumere 256 valori distinti
? Si assegna come:
char nome=‘c’;
? cioè si mette fra apici singoli un solo carattere
Int
? Si usa per rappresentare gli interi con segno
? Occupa 2 byte (in genere)
? Può assumere un valore compreso tra
-32.000 e +32.000
? Si assegna come:
int anno_nascita=1980;
9
Float
? Si usa per rappresentare numeri decimali in
virgola mobile
? Occupa (in genere) 4 byte
? Si assegna come:
float pi=3.4145;
float miaVar=1.2e-5;
? si può cioè usare la notazione scientifica:
? 1.2e-5 significa mantissa=1.2 e=esponente
esponente=-5 cioè 1.2e-5= 0.000012
? Nota: si possono scrivere numeri con notazione
scientifica ma in forma non normale, cioè con la
mantissa qualsiasi (anche maggiore di uno)
L’assegnazione
? L’assegnazione viene dichiarata tramite
l’operatore ‘=‘
? ad una variabile si può assegnare
? un valore (es. a=4;)
? il valore di una altra variabile (es. b=a;)
? il risultato di una espressione (c=a+b*2;)
10
Vettori
? Un insieme di valori tutti dello stesso tipo può
essere memorizzato ed elaborato tramite un
dato di tipo vettore
? un vettore si dichiara specificando il tipo di
elementi, un nome per la variabile ed il numero
massimo di elementi che pensiamo di dover
memorizzare
? si usa la seguente sintassi:
tipo nome[dimensione];
? Es:
? int insieme[10];
? char nome[100];
Vettori
? Un vettore può essere inizializzato così come lo
possono essere le variabili
? per farlo si devono indicare tutti i valori fra
parentesi graffe separati da virgole
? la sintassi è:
tipo nome[num]={val1,val2,val3};
tipo nome[]={val1,val2,val3};
? nel caso di inizializzazione si può non
specificare il numero di elementi che viene
calcolato automaticamente contando quanti
elementi si usano per l’inizializzazione
? Es:
? int vec[]={1,4,2,8,5,6,2,43,567,3,23};
? char cvec[]={‘e’,’s’,’e’,’m’,’p’,’i’,’o’};
11
Vettori
? I vettori non sono dei dati di tipo “primitivo”
? questo significa che non si possono utilizzare
gli operatori del linguaggio sui vettori
? In particolare:
? non è possibile usare l’assegnazione
• int a[3]={1,2,3}; int b[3]=a;
? non è possibile farci operazioni
• int a[3]={1,2,3}; int b[3]={4,5,6}; a+b;
? non è possibile usare operatori di confronto
• int a[3]={1,2,3}; int b[3]={4,5,6}; a<b;
Stringhe
? Le parole o le frasi sono dei vettori di caratteri in
cui l’ultimo carattere è equivalentemente uno fra
? il numero 0
? il carattere ‘\0’
? L’inizializzazione per le stringhe è diversa cheda
quella per i vettori
? la sintassi è:
tipo nome[]=“frase di inizializzazione”;
? Esempio:
? char parola[]=“il mio programma”;
12
Stringhe
? Nota: le dimensioni del vettore se date
esplicitamente devono poter contenere tutti i
caratteri della frase
? char vparola[3]=“programma”;
? /*vparola non contiene niente di significativo*/
Gli operatori
? Operatori aritmetici:
+ (somma)
- (sottrazione)
* (moltiplicazione)
/ (divisione)
% (resto o modulo)
13
Gli operatori
? Operatori relazionali:
== (ugualianza)
!= (diversità)
> (maggiore)
>= (maggiore o eguale)
< (minore)
<= (minore o eguale)
Operatori
? Operatori logici:
&& (and)
|| (or)
!
(not)
14
Operatori
? Operatori con assegnazione
+= (somma)
-= (sottrazione)
*= (moltiplicazione)
/= (divisione)
? Il loro significato è:
? x+=2 equivale a x=x+2
? x/=2 equivale a x=x/2
Operatori
? Operatori di incremento e decremento
++ (incremento)
-- (decremento)
? Il loro significato è:
? x++ equivale a x=x+1
? x-- equivale a x=x-1
15
Operatori
? Nota: gli operatori di incremento/decremento
possono essere utilizzati come prefisso o
postfisso di una variabile
? se si usa come postfisso il valore viene
incrementato dopo l’assegnazione, altrimenti
prima
? Es:
? x=2; y=x++; allora y=2 e x=3
? x=2;y=++x; allora y=3 e x=3
Operatori
? Operatori bit a bit
& (and)
| (or)
^ (xor)
<< (shift a sinistra dell’operando di sinistra di un
numero di bit specificato dall’operando di destra)
>> (shift a destra)
16
La documentazione
? I commenti si inseriscono fra coppie
/* testo */
? anche su più righe
/* testo uno
testo due
testo tre*/
Le librerie
? Chi realizza un compilatore (il programma che
permette di passare dal programma scritto con
un linguaggio di alto livello ad uno scritto in
modo comprensibile per il calcolatore) fornisce
anche una serie di programmi già pronti per
eseguire i compiti più frequenti o di basso
livello (cioè di interazione con l’hardware)
? questi programmi sono raccolti insieme in
pacchetti chiamati librerie
17
Librerie
? Per utilizzare queste funzioni si procede nel
modo seguente:
? come prima istruzione in un programma si scrivono
tutte le librerie che si pensa di usare:
#include <nomelibreria1.h>
#include <nomelibreria2.h>
? dopo si possono utilizzare liberamente le funzioni
definite in queste librerie in ogni punto del programma
Librerie
? Le librerie più utilizzate sono:
? stdlib.h: per la funzione rand e varie altre cose basilari
? stdio.h: per input/output
? math.h: per funzioni matematiche avanzate (sin, exp)
? string.h: per manipolare stringhe
? Nota: il prefissostd significa standard
18
L’input/output
? Le istruzioni per acquisire o trasferire
informazioni sono costituite da una serie di
funzioni contenute in una libreria chiamata
stdio.h
? Se se ne vuole fare uso (cioè sempre!) si deve
includere la libreria nel seguente modo:
#include<stdio.h>
void main(){}
Output
? Per visualizzare informazioni sullo schermo si
usa l’istruzione printf
? il nome sta a indicare print f(ormattato)
? si usa nel seguente modo:
printf(“Messaggio da stampare\n”);
printf(“Il valore di x è %d”,x);
19
Output
? Il significato è il seguente:
? printf(“Messaggio da stampare\n”);
? stampa a video la stringa “Messaggio da
stampare\n” e sostituisci a \n un ritorno a capo
? printf(“Il valore di x è %d”,x);
? come sopra ma con l’indicazione di sostituire a
%d il valore contenuto in x e di rappresentarlo
come numero decimale
Output
? All’interno della stringa da stampare si possono
inserire codici di formattazione preceduti da % o
caratteri speciali preceduti da \
? i caratteri con \ davanti sono caratteri speciali
(come il ritorno a capo o il tabulatore)
? i codici di formattazione con % servono per
indicare come rappresentare il contenuto di una
variabile
20
Output
? Si possono visualizzare più variabili:
printf(“Il valore di %s è %d”,str,x);
? conta la posizione all’interno della stringa
? cioè il primo % formatta la prima variabile data
dopo la stringa
Codici di formattazione
? I codici di formattazione sono:
? %c
? %s
carattere
stringa
? %d
? %f
intero
float
? \n
? \t
ritorno a capo
tabulatore
? I caratteri speciali sono:
? NOTA: non ci sono spazi tra il carattere % e ‘c’ o ‘s’ etc
21
Input
? Per acquisire informazioni dalla tastiera si usa la
funzione scanf
? il nome significa scan f(ormattato), cioè
scansiona (esamina) quanto segue e formattalo
nel modo indicato
? la sintassi è un po’ più complicata del printf
? Esempi:
scanf(“%d”,&num);
scanf(“%f”,&num);
scanf(“%s”,str);
Input
? Il significato è il seguente
? scanf(“%d”,&num);
? scansiona la riga che viene scritta da tastiera
? (fermati cioè dopo che è stato premuto il tasto
invio)
? considera (formatta) ciò che è stato scritto come
un “%d”= numero intero
? assegna questo numero alla variabile num
? Nota: si deve premettere il simbolo ‘&’ al nome
della variabile
22
Input
? Solo nel caso in cui stiamo acquisendo una
stringa allora non si deve premettere il caratter
‘&’ al nome della variabile stringa
? Es: scanf(“%s”,str);
? Nota: la stringa deve essere sufficientemente
grande da contenere quanto digitato
Esempi si scrittura e lettura dati
? Scrivere:
? Oggi è il giorno x del mese y
? la somma di x e y è z
23
Esercizi
? Scrivere un programma che:
? stampi la frase “Ciao Mondo”
? stampi il risultato della somma di due numeri
? scrivere il proprio nome e cognome
? prenda in ingresso i dati anagrafici di una famiglia
? calcoli l’area di varie figure geometriche
? risolva un equazione di 2°grado
24