laboratorio di linguaggi lezione ix marco tarini università dellinsubria facoltà di scienze...
TRANSCRIPT
![Page 1: Laboratorio di Linguaggi lezione IX Marco Tarini Università dellInsubria Facoltà di Scienze Matematiche, Fisiche e Naturali di Varese Corso di Laurea in](https://reader038.vdocuments.pub/reader038/viewer/2022102900/5542eb50497959361e8c0099/html5/thumbnails/1.jpg)
Laboratorio di Linguaggi
lezione IX
Marco Tarini
Università dell’Insubria
Facoltà di Scienze Matematiche, Fisiche e Naturali di Varese
Corso di Laurea in Informatica
Anno Accademico 2004/05
![Page 2: Laboratorio di Linguaggi lezione IX Marco Tarini Università dellInsubria Facoltà di Scienze Matematiche, Fisiche e Naturali di Varese Corso di Laurea in](https://reader038.vdocuments.pub/reader038/viewer/2022102900/5542eb50497959361e8c0099/html5/thumbnails/2.jpg)
M a r c o T a r i n i ‧ L a b o r a t o r i o d i L i n g u a g g i ‧ 2 0 0 4 / 0 5 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a
Espressioni e operatori
operatori su numeri- + * / %
>> << & |
== >= <= > <
|| && !
!=
==!=
-
+
operatori relazionali
operatori logici (booleani)
unari
bin
ari
![Page 3: Laboratorio di Linguaggi lezione IX Marco Tarini Università dellInsubria Facoltà di Scienze Matematiche, Fisiche e Naturali di Varese Corso di Laurea in](https://reader038.vdocuments.pub/reader038/viewer/2022102900/5542eb50497959361e8c0099/html5/thumbnails/3.jpg)
M a r c o T a r i n i ‧ L a b o r a t o r i o d i L i n g u a g g i ‧ 2 0 0 4 / 0 5 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a
Operatori Logici
• In C la semantica degli operatori logici e' lazy
if ((x<5)&&(fscanf(f,"-%c",&c)) ) { ...}
![Page 4: Laboratorio di Linguaggi lezione IX Marco Tarini Università dellInsubria Facoltà di Scienze Matematiche, Fisiche e Naturali di Varese Corso di Laurea in](https://reader038.vdocuments.pub/reader038/viewer/2022102900/5542eb50497959361e8c0099/html5/thumbnails/4.jpg)
M a r c o T a r i n i ‧ L a b o r a t o r i o d i L i n g u a g g i ‧ 2 0 0 4 / 0 5 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a
Assegnamenti
• Assegnamento base
=
<left value> = <expr>
![Page 5: Laboratorio di Linguaggi lezione IX Marco Tarini Università dellInsubria Facoltà di Scienze Matematiche, Fisiche e Naturali di Varese Corso di Laurea in](https://reader038.vdocuments.pub/reader038/viewer/2022102900/5542eb50497959361e8c0099/html5/thumbnails/5.jpg)
M a r c o T a r i n i ‧ L a b o r a t o r i o d i L i n g u a g g i ‧ 2 0 0 4 / 0 5 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a
Left values: oggetti dotati di indirizzo
• Cosa e’ un “left value”– una variabile– una espressione di tipo puntatore...
deferenziata– un elemento di un vettore– un campo di una variabile di tipo struct
• Non sono left values:– qualunque altra espressione– (costanti, risultati di operazioni, etc)
• Test mentale:– posso metterla a sinistra di un assegnamento?
![Page 6: Laboratorio di Linguaggi lezione IX Marco Tarini Università dellInsubria Facoltà di Scienze Matematiche, Fisiche e Naturali di Varese Corso di Laurea in](https://reader038.vdocuments.pub/reader038/viewer/2022102900/5542eb50497959361e8c0099/html5/thumbnails/6.jpg)
M a r c o T a r i n i ‧ L a b o r a t o r i o d i L i n g u a g g i ‧ 2 0 0 4 / 0 5 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a
Left values: oggetti dotati di indirizzo
• Esempi:– quali sono left values?
v[3]
v[3+x]
5
const int N=5;int v[15];int x,y;int * p;Persona r;
p
*p
N
x
x/5
&x
*(p+10)
&p
(*p) + 10v[x]+3
5+x &x + 2
*((&x)+2)
r
r.nome
r.eta + 5
x + y
![Page 7: Laboratorio di Linguaggi lezione IX Marco Tarini Università dellInsubria Facoltà di Scienze Matematiche, Fisiche e Naturali di Varese Corso di Laurea in](https://reader038.vdocuments.pub/reader038/viewer/2022102900/5542eb50497959361e8c0099/html5/thumbnails/7.jpg)
M a r c o T a r i n i ‧ L a b o r a t o r i o d i L i n g u a g g i ‧ 2 0 0 4 / 0 5 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a
Left values:
• Solo un left-value puo' :– essere usato a sx di un assegnamento– subire l’operatore – subire operatori di modifica
• che mutano il valore
&
![Page 8: Laboratorio di Linguaggi lezione IX Marco Tarini Università dellInsubria Facoltà di Scienze Matematiche, Fisiche e Naturali di Varese Corso di Laurea in](https://reader038.vdocuments.pub/reader038/viewer/2022102900/5542eb50497959361e8c0099/html5/thumbnails/8.jpg)
M a r c o T a r i n i ‧ L a b o r a t o r i o d i L i n g u a g g i ‧ 2 0 0 4 / 0 5 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a
Operatori unari di modifica
operatori su numeri- + * / %
>> << & |
== >= <= > <
|| && !
!=
==!=
-
+
operatori relazionali
operatori logici (booleani)
unari
bin
ari
x+=3;
x>>=1;
x=x+3;
x = x >> 1;
-= += *= /= %=
>>= <<= &= |=
operatori di modifica(scorciatoie sintattiche)
![Page 9: Laboratorio di Linguaggi lezione IX Marco Tarini Università dellInsubria Facoltà di Scienze Matematiche, Fisiche e Naturali di Varese Corso di Laurea in](https://reader038.vdocuments.pub/reader038/viewer/2022102900/5542eb50497959361e8c0099/html5/thumbnails/9.jpg)
M a r c o T a r i n i ‧ L a b o r a t o r i o d i L i n g u a g g i ‧ 2 0 0 4 / 0 5 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a
Operatori unari di modifica
• incremento - decremento
x++ x--
++x --x
l'espressione vale il valore non ancora incrementato / decrementato
("prima usa il valore, poi incrementa / decrementa la variabile")
l'espressione vale il valore già incrementato / decrementato("prima incrementa / decrementa la variabile, poi usa il valore ")
![Page 10: Laboratorio di Linguaggi lezione IX Marco Tarini Università dellInsubria Facoltà di Scienze Matematiche, Fisiche e Naturali di Varese Corso di Laurea in](https://reader038.vdocuments.pub/reader038/viewer/2022102900/5542eb50497959361e8c0099/html5/thumbnails/10.jpg)
M a r c o T a r i n i ‧ L a b o r a t o r i o d i L i n g u a g g i ‧ 2 0 0 4 / 0 5 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a
Assegnamenti
• Assegnamento base
=
<left value> = <expr>
tipo T0 tipo T1
typecast automatico se T0 diverso da T1
(ma solo se esiste una conversione automatica).Ma e' sempre meglio (piu' chiaro) usare un typecast esplicito!
![Page 11: Laboratorio di Linguaggi lezione IX Marco Tarini Università dellInsubria Facoltà di Scienze Matematiche, Fisiche e Naturali di Varese Corso di Laurea in](https://reader038.vdocuments.pub/reader038/viewer/2022102900/5542eb50497959361e8c0099/html5/thumbnails/11.jpg)
M a r c o T a r i n i ‧ L a b o r a t o r i o d i L i n g u a g g i ‧ 2 0 0 4 / 0 5 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a
Assegnamenti
• Assegnamento base
=
<left value> = <expr>
tipo T0 tipo T1
expr di tipo T0
typecast automatico se T0 diverso da T1
(ma solo se esiste una conversione automatica).Ma e' sempre meglio (piu' chiaro) usare un typecast esplicito!
x = y = z = 10;
![Page 12: Laboratorio di Linguaggi lezione IX Marco Tarini Università dellInsubria Facoltà di Scienze Matematiche, Fisiche e Naturali di Varese Corso di Laurea in](https://reader038.vdocuments.pub/reader038/viewer/2022102900/5542eb50497959361e8c0099/html5/thumbnails/12.jpg)
M a r c o T a r i n i ‧ L a b o r a t o r i o d i L i n g u a g g i ‧ 2 0 0 4 / 0 5 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a
Esercizio
• Non esiste il tipo bool• Come si puo’ fare ad aggiungerlo?
– in modo che sia possibile scrivere, per esempio:
Bool b;int x;
int main(){ b = ( x == 0); if (b) { ... }; b = !b;}
Bool b0,b1,b2 = TRUE;
int main(){ ... b0 = b1 && b2; while (b0) { ... }}
![Page 13: Laboratorio di Linguaggi lezione IX Marco Tarini Università dellInsubria Facoltà di Scienze Matematiche, Fisiche e Naturali di Varese Corso di Laurea in](https://reader038.vdocuments.pub/reader038/viewer/2022102900/5542eb50497959361e8c0099/html5/thumbnails/13.jpg)
M a r c o T a r i n i ‧ L a b o r a t o r i o d i L i n g u a g g i ‧ 2 0 0 4 / 0 5 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a
Esercizio: alcune soluzioni• soluzione 1:
• soluzione 2:
• soluzione 3:
typedef enum {FALSE, TRUE} Bool;
typedef int Bool;const Bool TRUE = 1;const Bool FALSE = 0;
#define Bool int#define TRUE 1#define FALSE 0
Bool b;int x;
int main(){ b = ( x == 0); if (b) { ... }; b = !b;}
Bool b0,b1,b2 = TRUE;
int main(){ ... b0 = b1 && b2; while (b0) { ... }}
![Page 14: Laboratorio di Linguaggi lezione IX Marco Tarini Università dellInsubria Facoltà di Scienze Matematiche, Fisiche e Naturali di Varese Corso di Laurea in](https://reader038.vdocuments.pub/reader038/viewer/2022102900/5542eb50497959361e8c0099/html5/thumbnails/14.jpg)
M a r c o T a r i n i ‧ L a b o r a t o r i o d i L i n g u a g g i ‧ 2 0 0 4 / 0 5 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a
file "bool.h"
E' gia' una micro-libreria !
typedef enum {FALSE, TRUE} Bool;
Bool b;int x;
int main(){ b = ( x == 0); if (b) { ... }; b = !b;}
Bool b0,b1,b2 = TRUE;
int main(){ ... b0 = b1 && b2; while (b0) { ... }}
#include "bool.h" #include "bool.h"
![Page 15: Laboratorio di Linguaggi lezione IX Marco Tarini Università dellInsubria Facoltà di Scienze Matematiche, Fisiche e Naturali di Varese Corso di Laurea in](https://reader038.vdocuments.pub/reader038/viewer/2022102900/5542eb50497959361e8c0099/html5/thumbnails/15.jpg)
M a r c o T a r i n i ‧ L a b o r a t o r i o d i L i n g u a g g i ‧ 2 0 0 4 / 0 5 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a
Inclusione files
#include "bool.h"
Due sintassi diverse per "includere" un file
#include <bool.h>
"inserisci un file che fa parte di questo progetto"
(il file verrà cercato nella directory corrente)
"inserisci unauna libreria esterna"
(il file verrà cercato nelle apposite "directories di libreria")
![Page 16: Laboratorio di Linguaggi lezione IX Marco Tarini Università dellInsubria Facoltà di Scienze Matematiche, Fisiche e Naturali di Varese Corso di Laurea in](https://reader038.vdocuments.pub/reader038/viewer/2022102900/5542eb50497959361e8c0099/html5/thumbnails/16.jpg)
M a r c o T a r i n i ‧ L a b o r a t o r i o d i L i n g u a g g i ‧ 2 0 0 4 / 0 5 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a
Inclusione files
![Page 17: Laboratorio di Linguaggi lezione IX Marco Tarini Università dellInsubria Facoltà di Scienze Matematiche, Fisiche e Naturali di Varese Corso di Laurea in](https://reader038.vdocuments.pub/reader038/viewer/2022102900/5542eb50497959361e8c0099/html5/thumbnails/17.jpg)
M a r c o T a r i n i ‧ L a b o r a t o r i o d i L i n g u a g g i ‧ 2 0 0 4 / 0 5 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a
Diamo una occhiata
![Page 18: Laboratorio di Linguaggi lezione IX Marco Tarini Università dellInsubria Facoltà di Scienze Matematiche, Fisiche e Naturali di Varese Corso di Laurea in](https://reader038.vdocuments.pub/reader038/viewer/2022102900/5542eb50497959361e8c0099/html5/thumbnails/18.jpg)
M a r c o T a r i n i ‧ L a b o r a t o r i o d i L i n g u a g g i ‧ 2 0 0 4 / 0 5 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a
Definizioni e dichiarazioni
int potenza (int b, int e){ int res=1 , i; for (i=1; i<=e; i++) { res = res * b; } return res;}
tipo del risultato: intero(output della funzione)
lista dei parametri formali,ciascuno preceduto dal tipo(input della funzione)
corpo della funzione“cosa fa”un blocco delimitato da {}
comando “return”: restituzione del risultato, e uscita dalla funzioneci deve essere!
variabili locali
• qui, due• visibili solo nel corpo della funzione.
• dichiarate all’inizio!
nome (identificatore) della funzione: “potenza”
![Page 19: Laboratorio di Linguaggi lezione IX Marco Tarini Università dellInsubria Facoltà di Scienze Matematiche, Fisiche e Naturali di Varese Corso di Laurea in](https://reader038.vdocuments.pub/reader038/viewer/2022102900/5542eb50497959361e8c0099/html5/thumbnails/19.jpg)
M a r c o T a r i n i ‧ L a b o r a t o r i o d i L i n g u a g g i ‧ 2 0 0 4 / 0 5 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a
Definizioni e dichiarazioni
int potenza (int b, int e){ int res=1 , i; for (i=1; i<=e; i++) { res = res * b; } return res;}
int potenza (int b, int e);
dichiarazione della funzione
o prototipo della funzione
- "tutto quello che serve sapere per usare la funzione (a scatola chiusa)"
definizione della funzione
o implementazione della funzione
- "le istruzioni dettagliate per eseguire la funzione"
![Page 20: Laboratorio di Linguaggi lezione IX Marco Tarini Università dellInsubria Facoltà di Scienze Matematiche, Fisiche e Naturali di Varese Corso di Laurea in](https://reader038.vdocuments.pub/reader038/viewer/2022102900/5542eb50497959361e8c0099/html5/thumbnails/20.jpg)
M a r c o T a r i n i ‧ L a b o r a t o r i o d i L i n g u a g g i ‧ 2 0 0 4 / 0 5 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a
Definizioni e dichiarazioni
• Esempioint potenza (int b, int e){ int res=1 , i; for (i=1; i<=e; i++) { res = res * b; } return res;}
int main(){ int x; x = potenza(5, 6); }
![Page 21: Laboratorio di Linguaggi lezione IX Marco Tarini Università dellInsubria Facoltà di Scienze Matematiche, Fisiche e Naturali di Varese Corso di Laurea in](https://reader038.vdocuments.pub/reader038/viewer/2022102900/5542eb50497959361e8c0099/html5/thumbnails/21.jpg)
M a r c o T a r i n i ‧ L a b o r a t o r i o d i L i n g u a g g i ‧ 2 0 0 4 / 0 5 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a
Definizioni e dichiarazioni
• Esempio: invertiamo l'ordine per capriccioint main(){ int x; x = potenza(5, 6); }
int potenza (int b, int e){ int res=1 , i; for (i=1; i<=e; i++) { res = res * b; } return res;}
errore in compilazione:
identificatore
sconosciuto: "potenza"
![Page 22: Laboratorio di Linguaggi lezione IX Marco Tarini Università dellInsubria Facoltà di Scienze Matematiche, Fisiche e Naturali di Varese Corso di Laurea in](https://reader038.vdocuments.pub/reader038/viewer/2022102900/5542eb50497959361e8c0099/html5/thumbnails/22.jpg)
M a r c o T a r i n i ‧ L a b o r a t o r i o d i L i n g u a g g i ‧ 2 0 0 4 / 0 5 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a
Definizioni e dichiarazioni
• Esempioint potenza (int b , int e );
int main(){ int x; x = potenza(5, 6); }
int potenza (int b, int e){ int res=1 , i; for (i=1; i<=e; i++) { res = res * b; } return res;}
(i nomi dei parametri formali si possono anche omettere)
![Page 23: Laboratorio di Linguaggi lezione IX Marco Tarini Università dellInsubria Facoltà di Scienze Matematiche, Fisiche e Naturali di Varese Corso di Laurea in](https://reader038.vdocuments.pub/reader038/viewer/2022102900/5542eb50497959361e8c0099/html5/thumbnails/23.jpg)
M a r c o T a r i n i ‧ L a b o r a t o r i o d i L i n g u a g g i ‧ 2 0 0 4 / 0 5 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a
file "main.c"
file "potenze.c"
Progetti a piu' files
• Schema
#include "potenze.h"
int main(){ int x; x = potenza(5, 6); }
int potenza(int b,int e){ int res=1 , i; for (i=1; i<=e; i++) { res = res * b; } return res;}
file "potenze.h"int potenza(int b,int e);
#include "potenze.h"
![Page 24: Laboratorio di Linguaggi lezione IX Marco Tarini Università dellInsubria Facoltà di Scienze Matematiche, Fisiche e Naturali di Varese Corso di Laurea in](https://reader038.vdocuments.pub/reader038/viewer/2022102900/5542eb50497959361e8c0099/html5/thumbnails/24.jpg)
M a r c o T a r i n i ‧ L a b o r a t o r i o d i L i n g u a g g i ‧ 2 0 0 4 / 0 5 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a
Struttura della compilazione
main.c
potenze.c
potenze.h
pre- process.
fileprecomp.
1 compiler
objectfile
main.o
pre- process.
fileprecomp.
3 compiler
objectfile
potenze.o
eseguibilefinale
exec.exe linker
![Page 25: Laboratorio di Linguaggi lezione IX Marco Tarini Università dellInsubria Facoltà di Scienze Matematiche, Fisiche e Naturali di Varese Corso di Laurea in](https://reader038.vdocuments.pub/reader038/viewer/2022102900/5542eb50497959361e8c0099/html5/thumbnails/25.jpg)
M a r c o T a r i n i ‧ L a b o r a t o r i o d i L i n g u a g g i ‧ 2 0 0 4 / 0 5 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a
Con DevC++
• Tasto destro sul progetto
![Page 26: Laboratorio di Linguaggi lezione IX Marco Tarini Università dellInsubria Facoltà di Scienze Matematiche, Fisiche e Naturali di Varese Corso di Laurea in](https://reader038.vdocuments.pub/reader038/viewer/2022102900/5542eb50497959361e8c0099/html5/thumbnails/26.jpg)
M a r c o T a r i n i ‧ L a b o r a t o r i o d i L i n g u a g g i ‧ 2 0 0 4 / 0 5 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a
Con DevC++
![Page 27: Laboratorio di Linguaggi lezione IX Marco Tarini Università dellInsubria Facoltà di Scienze Matematiche, Fisiche e Naturali di Varese Corso di Laurea in](https://reader038.vdocuments.pub/reader038/viewer/2022102900/5542eb50497959361e8c0099/html5/thumbnails/27.jpg)
M a r c o T a r i n i ‧ L a b o r a t o r i o d i L i n g u a g g i ‧ 2 0 0 4 / 0 5 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a
Con DevC++
![Page 28: Laboratorio di Linguaggi lezione IX Marco Tarini Università dellInsubria Facoltà di Scienze Matematiche, Fisiche e Naturali di Varese Corso di Laurea in](https://reader038.vdocuments.pub/reader038/viewer/2022102900/5542eb50497959361e8c0099/html5/thumbnails/28.jpg)
M a r c o T a r i n i ‧ L a b o r a t o r i o d i L i n g u a g g i ‧ 2 0 0 4 / 0 5 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a
Con DevC++
Ripentendo per potenza.h si ottiene:nota: "compile" VS "build" (anche: "make")