7/21/2019 Lucidi informatica base
1/261
Programmazione in C
2
Settimana n.1
Obiettivi
Problem solving Diagrammi di flusso e
pseudo codice
Contenuti
Cenni storici Concetto di programma Diagrammi di flusso
Pseudo codice Alcuni problemi di esempio
7/21/2019 Lucidi informatica base
2/261
Definizione
Linformatica e` la scienza che rappresenta e manipolale informazioni
3
Le tecnologie come fattore abilitante deicambiamenti industriali e sociali
1800
2000
1900
4
7/21/2019 Lucidi informatica base
3/261
La pervasivit
5
Un po di storia: Abacus
6
7/21/2019 Lucidi informatica base
4/261
B. Pascal (1642)
7
J.M. Jacquard(punched card loom- 1801)
8
Il software per la
computazione meccanica
7/21/2019 Lucidi informatica base
5/261
C. Babbage(analyical engine 1833)
9
Hollerith (punched card -1890)
10
7/21/2019 Lucidi informatica base
6/261
ENIAC (Eckert-Mauchly 1943-1945)
11
Il computer moderno
1942-57, 1a gen. = tubi a vuoto
1958-63, 2a gen. = transistori 1964-80, 3a gen. = circuiti integrati 1980-oggi, 4a gen. = circuiti VLSI (futuro) 5a gen. = ?
12
Penso che nel mondo ci sia mercato
per quattro o cinque computer
Thomas Watson (Presidente IBM,
1943)
7/21/2019 Lucidi informatica base
7/261
1942-47 : tubi a vuoto
1958-63 : transistor
1963-80 : circuiti
integrati (MSI)
1981-oggi : circuiti
integrati (VLSI)
Il computer moderno (Cont.)
13
1980
1990
2000
Low costcomputing
Low cost localstorage
Multimediaover the network
2005
Web 2.0
La storia recente
14
7/21/2019 Lucidi informatica base
8/261
I dati digitali: tutto diventa bit
15
Testi
Dati
Voce
Musica
Immagini
Filmati
01101100
! Satellitare
! DTT(digitale terrestre)
TV digitale
16
7/21/2019 Lucidi informatica base
9/261
I tipi di computer
Esistono due grandi classi di elaboratori:- Elaboratori di uso generale (general-purpose computer)- Elaboratori dedicati
(special-purpose computer)
17
Special - purpose (embedded, dedicated)computer
Un elaboratore dedicato (embedded system) unelaboratore programmato per svolgere funzioni specifichedefinite a priori in fase di progetto/produzione
Esempi sono: telefoni cellulari, lettori MP3, computer checontrollano aerei, auto, elettrodomestici...
18
7/21/2019 Lucidi informatica base
10/261
Workstation
Mainframe (host)
Server
Le razze degli elaboratori (general purpose)
19
Server
Un server un elaboratore che fornisce dei servizi aaltri elaboratori (chiamati clients) attraverso una rete(computer network)
20
7/21/2019 Lucidi informatica base
11/261
Server Farm
Con il termine server farm si fa riferimento all insieme dielaboratori server collocati in un apposito locale (centro dicalcolo) presso una media o grande azienda
21
Mainframe
Mainframes (colloquialmente indicati anche come BigIron) sono elaboratori di grandi prestazioni usatiprincipalmente da grandi imprese per rilevantiapplicazioni software(mission critical application)
22
IBM z890mainframe
7/21/2019 Lucidi informatica base
12/261
IBM BlueGene/Q
Livermore Labs
Potenza: 16 PFLOPS (PETA FLOPS)16 000 000 000 000 moltiplicazioni secondo
Supercomputer (2012)
23
24
Cosa impariamo in questo corso?
Dalla specifica di un problema alla sua realizzazione comeprogramma da eseguire su un elaboratore
Costruzione diun programma
7/21/2019 Lucidi informatica base
13/261
25
Progettare
Soluzione
formale
Realizzazione
Problema
Soluzione
26
Difficolt
I punti critici nello sviluppo di un progetto risiedonoessenzialmente in:- Sviluppo di una soluzione informale-
Formalizzazione di una soluzione Permette una pi semplice traduzione nelle regole di realizzazione
La soluzione di un problema passa generalmenteattraverso lo sviluppo di un algoritmo
???????
7/21/2019 Lucidi informatica base
14/261
27
Algoritmo
Con il termine di algoritmo si intende la descrizione precisa(formale) di una sequenza finita di azioni che devonoessere eseguite per giungere alla soluzione di un problema
28
Algoritmo
Il termine deriva dal tardo latino algorismusche a suavolta deriva dal nome del matematico persiano Muhammadibn Msa 'l-Khwrizm(780-850), che scrisse un nototrattato di algebra
7/21/2019 Lucidi informatica base
15/261
29
Algoritmi e vita quotidiana
1. metti lacqua2. accendi il fuoco
3. aspetta4. se lacqua non
bolle torna a 35. butta la pasta6. aspetta un po
7. assaggia8. se cruda
torna a 6 9. scola la pasta
30
Algoritmo
Algoritmo: Sequenza di operazioni atte a risolvere un datoproblema- Esempi:
Una ricetta di cucina Istruzioni di installazione di un elettrodomestico
Spesso non banale!- Esempio:
MCD? Quale algoritmo seguiamo per ordinare un mazzo di carte?
7/21/2019 Lucidi informatica base
16/261
31
Esempio di flusso
Problema: Calcolo del massimotra due valori A e B
Soluzione: Il massimo il pigrande tra A e B...
Soluzione formale:
1. inizialmente: max = 02. se A >B allora max = A; stop
3. altrimenti max = B; stop
Soluzione
formale
Problema
Soluzione
32
Altro esempio di flusso
Problema: Calcolo del massimocomun divisore (MCD) fra duevalori A e B
Soluzione: Usiamo la definizione diMCD: il numero naturalepigrande per il quale possonoentrambi essere divisi.
Soluzione formale: ??? Soluzioneformale
Problema
Soluzione
7/21/2019 Lucidi informatica base
17/261
33
Stadi di sviluppo di un programma
1. Scrittura di un programma- File sorgente- Scritto utilizzando un linguaggio
di programmazione
2. Traduzione di un programma in unformato comprensibile al calcolatore
Articolato in pi fasi Gestito automaticamente da un
programma chiamato traduttore
In questo corso ci occuperemo delprimo punto
Ma importante sapere cosa succedenella fase successiva!
Scritturadel programma
Traduzionedel programma
34
Stadi di sviluppo di un programma
Problema
Idea-
Soluzione
Algoritmo-
Soluzione formale
Programma-
Traduzione dellalgoritmo in una forma comprensibile ad un elaboratoreelettronico
Test
Documentazione
7/21/2019 Lucidi informatica base
18/261
35
Formalizzazione della soluzione
La differenza tra una soluzione informale ed una formalesta nel modo di rappresentare un algoritmo:- Informale: Descrizione a parole- Formale: Descrizione in termini di sequenza di operazioni
elementari
Esistono vari strumenti per rappresentare una soluzionein modo formale- Pi usati:
Pseudo-codice Diagrammi di flusso
36
Formalizzazione della soluzione (Cont.)
Pseudo-codice- Vantaggi
Immediato
- Svantaggi Descrizione dellalgoritmo poco astratta Interpretazione pi complicata
Diagrammi di flusso- Vantaggi
Pi intuitivi perch utilizzano un formalismo grafico Descrizione dellalgoritmo pi astratta
- Svantaggi Richiedono lapprendimento della funzione dei vari tipi di blocco
7/21/2019 Lucidi informatica base
19/261
37
Traduzione di un programma
Filesorgente
Fileoggetto
Fileeseguibile
Compilatore
LinkerLibrerieLibrerieLibrerie
Questo filepu esseredirettamente caricatoin memoria ed eseguito
38
Scrittura del programma
Un sorgente C un normale file di testo
Si utilizza un editor di testi- Blocco Note- Editor specializzati per programmatori (ambienti integrati)
7/21/2019 Lucidi informatica base
20/261
39
Editor per programmatori
Colorazione ed evidenziazione della sintassi Indentazione automaticaAttivazione automatica della compilazione Identificazione delle parentesi corrispondenti Molti disponibili, sia gratuiti che commerciali
40
Modello di applicazioni console
Programmaeseguibile
Visualizzazionerisultati
Programmasorgente in C
Compilatore C
somma.c
somma.exesomma.exe
Scritturaprogramma
Immissione dati
7/21/2019 Lucidi informatica base
21/261
41
Compilatore C
Traduce i programmi sorgentiscritti in linguaggio C inprogrammi eseguibili
a sua volta un programma eseguibile, a disposizione delprogrammatore
Controlla lassenza di errori di sintassi del linguaggio Non serve allutente finale del programma Ne esistono diversi, sia gratuiti che commerciali
42
Ambienti integrati
Applicazioni software integrate che contengono al lorointerno- Un editor di testi per programmatori- Un compilatore C- Un ambiente di verifica dei programmi (debugger)
IDE: Integrated
DevelopmentEnvironment
7/21/2019 Lucidi informatica base
22/261
43
Cosa vuol dire programmare?
La programmazione consiste nella scrittura di undocumento (file sorgente) che descrive la soluzione delproblema in oggetto- Esempio: Massimo comun divisore tra due numeri
In generale non esiste la soluzione ad un certoproblema- La programmazione consiste nel trovare la soluzione pi efficiente,
secondo una certa metrica, al problema di interesse
44
Cosa vuol dire programmare? (Cont.)
Programmare unoperazione creativa!- Ogni problema diverso da ogni altro- Non esistono soluzioni analitiche o universali!
Programmare unoperazione complessa- Impensabile un approccio diretto (dal problema al
programma sorgente definitivo)-
Tipicamente organizzata per stadi successivi
7/21/2019 Lucidi informatica base
23/261
45
Stadi di sviluppo di un programma (Cont.)
Soluzione
formale
Programma
Problema
Soluzione
Strumenti automatici e
metodi formali
Tecniche di programmazione
automatica
Esperienza
46
Stadi di sviluppo di un programma (Cont.)
La costruzione di un programma generalmenteunoperazione iterativa
Sono previsti passi a ritroso che rappresentano le reazionia risultati non rispondenti alle esigenze nelle diverse fasi
La suddivisione in pi fasi permette di mantenere i passi aritroso pi brevi possibile (e quindi meno dispendiosi)
E' necessario quindi effettuare dei test tra una fase e lasuccessiva affinch i ricicli siano i pi corti possibili
7/21/2019 Lucidi informatica base
24/261
47
Stadi di sviluppo di un programma (Cont.)
Una volta scritto e collaudato il programma, possonoverificarsi le seguenti situazioni:- Il programma stato scritto non correttamente:
Torno indietro di un livello- Il programma descritto male in termini formali, ma corretto
concettualmente:Torno indietro di due livelli
- Il programma errato concettualmente, e necessita di unadifferente soluzione:
Torno all'inizio
7/21/2019 Lucidi informatica base
25/261
49
Diagrammi di flusso (flow-chart)
Sono strumenti grafici che rappresentano levoluzionelogica della risoluzione del problema
Sono composti da:- Blocchi elementari per descrivere azioni e decisioni
(esclusivamente di tipo binario)- Archi orientati per collegare i vari blocchi e per descrivere la
sequenza di svolgimento delle azioni
50
Start
Stop
Diagrammi di flusso: Blocchi di inizio/fine
7/21/2019 Lucidi informatica base
26/261
51
azione
generica
Diagrammi di flusso: Blocchi di azione
azione
di I/O
52
condizioneV F
Diagrammi di flusso: Blocco di decisione
7/21/2019 Lucidi informatica base
27/261
53
Diagrammi di flusso: Blocco di connessione
54
Start
V
F
4
1
3 Stop
2 5
Diagramma di flusso : Esempio
7/21/2019 Lucidi informatica base
28/261
55
Start
Stop
Diagramma di flusso : Esempio
56
Costruzione di diagrammi di flusso
Per mezzo dei diagrammi di flusso si possonorappresentare flussi logici complicati a piacere
E per preferibile scrivere diagrammi di flusso strutturati,che seguano cio le regole della programmazionestrutturata
Cos facendo si ottiene:- Maggiore formalizzazione dei problemi- Riusabilit del codice- Maggiore leggibilit
7/21/2019 Lucidi informatica base
29/261
57
Diagrammi di flusso strutturati
Definizione formale:- Diagrammi di flusso strutturati: Composti da strutture elementari
indipendenti tra loro-
Struttura elementare = Composizione particolare di blocchielementari
- Sempre riducibili ad un diagramma di flusso elementare costituitoda un'unica azione
Rispetto a diagrammi di flusso non strutturati questoimplica lassenza di salti incondizionatiall'interno del flussologico del diagramma
58
Diagrammi di flusso strutturati (Cont.)
Un diagramma di flusso detto strutturato se contienesolo un insieme predefinito di strutture elementari:- Uno ed uno soloblocco Start-
Uno ed uno soloblocco Stop- Sequenza di blocchi (di azione e/o di input-output)- If - Then - ( Else )
- While - Do- Repeat - Until
7/21/2019 Lucidi informatica base
30/261
59
Sequenza
struttura
struttura-1
struttura-2
...
60
condizioneV F
If-Then-Else
struttura-1 struttura-2
7/21/2019 Lucidi informatica base
31/261
61
condizioneV F
If-Then
struttura
62
condizione
V
F
While-Do
struttura
7/21/2019 Lucidi informatica base
32/261
63
condizione
V
F
do - while
struttura
64
Qualunque diagramma di flusso sempre
trasformabile in un diagramma di flusso
strutturato equivalente a quello dato
Teorema di Bhm - Jacopini
Quindi, qualunque flusso logico pu essere realizzatoutilizzando solamente due strutture di controllo:- Meccanismo di decisione- Meccanismo di ripetizione (loop)
7/21/2019 Lucidi informatica base
33/261
65
Settimana n.2
Obiettivi
Esecuzione di unprogramma.
Tutorial su CodeBlocks eambiente di sviluppo.
Contenuti
Linguaggi di programmazione Dati e istruzioni Architettura di un elaboratore Uso del compilatore
66
Dalla soluzione al programma
La scrittura del programma vero e proprio praticamenteimmediata a partire dalla soluzione formale
I linguaggi di programmazione forniscono infatti costruttidi diversa complessit a seconda del tipo di linguaggio
7/21/2019 Lucidi informatica base
34/261
67
Quali linguaggi?
Diversi livelli (di astrazione)- Linguaggi ad alto livello
Elementi del linguaggio hanno complessit equivalente ai blocchidei diagrammi di flusso strutturati (condizionali, cicli,)- Esempio: C, C++, Basic, Pascal, Fortran, Java, etc.- Indipendenti dallhardware
- Linguaggi assembler Elementi del linguaggio sono istruzioni microarchitetturali
- Dipendenti dallhardware
-
Esempio: Assembler del microprocessore Intel Core
68
Quali linguaggi? (Cont.)
Esempi:- Linguaggi ad alto livello
if (x > 3) then x = x+1;
- Linguaggi assembler
LOAD Reg1, Mem[1000]
ADD Reg1, 10
Specifico per una specificaarchitettura (microprocessore)
7/21/2019 Lucidi informatica base
35/261
69
Elementi del linguaggio
Essendo il linguaggio unastrazione, esistono alcunifondamentali elementi sintattici essenziali per luso dellinguaggio stesso:- Parole chiave(keyword)-
Dati- Identificatori
- Istruzioni
Gli elementi sintattici definiscono la struttura formale ditutti i linguaggi di programmazione
70
Parole chiave (keyword)
Vocaboli riservati al traduttore per riconoscere altrielementi del linguaggio- Le istruzioni sono tutte identificate da una keyword-
Esempio: La keyword PRINTin alcuni linguaggi identifica ilcomando di visualizzazione su schermo
Non possono essere usate per altri scopi
Costituiscono i mattoni della sintassi del linguaggio
7/21/2019 Lucidi informatica base
36/261
71
Dati
Vista calcolatore:- Dato = Insieme di bit memorizzato in memoria centrale
Vista utente:- Dato = Quantit associata ad un certo significato
Il linguaggio di programmazione supporta la vista utente
Dato individuato da:- Un nome(identificatore)- Una interpretazione(tipo)- Una modalit di accesso(costante o variabile)
72
Identificatore
Indica il nome di un dato (e di altre entit) in unprogramma
Permette di dare nomi intuitivi ai dati
Esempio:- X, raggio, dimensione,
Nome unico allinterno di un preciso ambiente divisibilit- Dati diversi = Nomi diversi!
7/21/2019 Lucidi informatica base
37/261
73
Tipo
Indica lintepretazione dei dati in memoria
Legato allo spazio occupato da un dato
Permette di definire tipi primitivi (numeri, simboli)indipendentemente dal tipo di memorizzazione delsistema
74
Tipo di accesso
Indica la modalit di accesso ai dati:- Variabili
Dati modificabili Valore modificabile in qualunque punto del programma
- Costanti Dati a sola lettura
Valore assegnato una volta per tutte
7/21/2019 Lucidi informatica base
38/261
75
Astrazione dei dati
3
a
Memoria
Indirizzi
-11.564
100
101
102
103
104
105
106
107
108
X; intero;valore=3
c; carattere;valore=a
t; reale;valore=-11.564
76
Istruzioni
Indicano le operazioni che il linguaggio permette dieseguire (traducendole) a livello macchina:- Pseudo-istruzioni
Direttive non eseguibili
- Istruzioni elementari
Operazioni direttamente corrispondenti ad operazioni hardware
Esempio: Interazione con i dispositivi di I/O, modifica/accesso a dati- Istruzioni di controllo del flusso
Permettono di eseguire delle combinazioni di operazioni complesse
7/21/2019 Lucidi informatica base
39/261
77
Esempio di programma
PROGRAMprova;
// programma di prova
CONSTANTS
pi= 3.14159
coeff= 0.19
VARIABLES
x: INTEGER
y: REAL
c: CHARACTERBEGIN PROGRAM
x= 2;
IF(y> 2) THENy= x* pi;
PRINTx,y;
END PROGRAM
Identificatori
PAROLE CHIAVEPseudo-istruzione
Istruzione
di controllo
del flusso
Specifica di tipo
Specifica di celle di memoria
Parte
operativa
Istruzionielementari
78
Linguaggio di programmazione
Imparare un linguaggio significa conoscere:-
Le parole chiave- I tipi predefiniti-
Le istruzioni e la loro sintassi
In questo corso:- Linguaggio C
Estensione dei concetti a linguaggi analoghi immediata
7/21/2019 Lucidi informatica base
40/261
Architetturadegli elaboratori
Memoria
Unitelaborazione
Unituscita
Unitingresso
I blocchi fondamentali dellelaboratore
80
7/21/2019 Lucidi informatica base
41/261
Memoria
Unitelaborazione
Unituscita
Unitingresso
Memoriacentrale(RAM)
Memoriadi massa(dischi)
I blocchi fondamentali dellelaboratore
81
Microprocessore
Memoria centrale - RAM
I chip fondamentali
82
7/21/2019 Lucidi informatica base
42/261
Microprocessore
Un microprocessore (sovente abbreviato come !P) unchip che realizza le funzioni di una central processingunit (CPU) in un computer o in un sistema digitale
83
Unit didecodifica
istruzioni
Unit digestione
indirizzi
Unit digestione
BUS
ALUUnit dicontrollo
Registro
CPU (Central Processing Unit)
84
7/21/2019 Lucidi informatica base
43/261
I Bus (sistema circolatorio del PC)
85
Caratteristiche di un bus
Trasporto di un solo dato per volta
Frequenza = n. di dati trasportati al secondo
Ampiezza = n. di bit di cui costituito un singolo dato
Se mal dimensionato, potrebbe essere un collo di bottiglia
86
7/21/2019 Lucidi informatica base
44/261
Tipi fondamentali di bus
Un singolo bus suddiviso in tre sotto bus, detti:- bus dati (DBus)- bus degli indirizzi (ABus)- bus di controllo (CBus)
87
M1 IM2 O
Unit di
gestioneBUS
ABUSDBUS
CBUS
I Bus interni
88
7/21/2019 Lucidi informatica base
45/261
Massima memoria interna(fisicamente presente)
La dimensione dellAbus determina il max numero di celledi memoria indirizzabili
La dimensione del Dbus indicala dimensione di unacella di memoria
max mem = 2|Abus|x |Dbus| bit
Esempio (Abus da 20 bit, Dbus da 16 bit):-
max mem = 220x 2 byte = 2 MB- ossia 1 M celle di memoria, ognuna da 2 byte
89
Massima memoria esterna
La memoria esterna (es. dischi) non dipende dallAbusperch viene vista come un periferico (di input e/o dioutput)
La massima quantit di memoria esterna dipende dal busdi I/O (quello su cui sono collegati i periferici)
90
7/21/2019 Lucidi informatica base
46/261
Controll
o
Interfaccia(controller)
Dati
Dispositivi periferici
91
Unit di input/output
Trasformano informazioni dal mondo umano a quello delcomputer e viceversa:- umano = diversi tipi di segnali fisici, analogici, asincroni- computer = segnali solo elettronici, digitali, sincroni
92
7/21/2019 Lucidi informatica base
47/261
I Collegamenti o i Bus esternio di I/O
Piastra madre
Universali
USB
Firewire (IEEE1394)
Orientati allememorie di massa
SCSI
EIDE
Unitdi controllo
Registri(Memoria locale)
Unit aritmetica(ALU)
CPU
94
7/21/2019 Lucidi informatica base
48/261
Registri
Elementi di memoria locale usati per conservaretemporaneamente dei dati (es. risultati parziali).
Pochi (8...128)
Dimensione di una word (8...64 bit)
95
Unit operativa
Svolge tutte le elaborazioni richieste (aritmetiche, logiche,grafiche, ...).
Ecomposta di:- ALU- flag- registri
96
7/21/2019 Lucidi informatica base
49/261
ALU (Arithmetic-Logic Unit)
Svolge tutti i calcoli (aritmetici e logici)
Solitamente composta da circuiti combinatori
97
Preleva una istruzionedalla memoria centrale
Interpreta listruzione
Esegue listruzione
Ciclo base di un elaboratore
98
7/21/2019 Lucidi informatica base
50/261
Il clock
Ogni elaboratore contiene un elemento ditemporizzazione (detto clock ) che genera un riferimentotemporale comune per tutti gli elementi costituenti ilsistema di elaborazione.
99
Il clock
T = periododi clock- unit di misura = s
f = frequenzadi clock ( = 1 / T )- unit di misura = s1 = Hz (cicli/s)
100
t
T
7/21/2019 Lucidi informatica base
51/261
Nota
In un Intel Core i7-2700 la frequenza di clock 3.5 GHz- In 3.5 miliardesimi di secondo la luce percorre 1 metro (104.93
cm)
101
Nota
Diversi Intel Core i7 e i5 sono costruiti con tecnologia a20 nm- Il diametro di un atomo di cesio 0.5 nm- Un globulo rosso alto 2 000 nm e largo 7 000 nm- Un capello spesso 100 000 nm
102
7/21/2019 Lucidi informatica base
52/261
Tempistica delle istruzioni
Un ciclo-macchina lintervallo di tempo in cui vienesvolta una operazione elementare ed un multiplo interodel periodo del clock
Lesecuzione di unistruzione richiede un numero interodi cicli macchina, variabile a seconda del tipo di istruzione
103
104
Settimana n.3
Obiettivi
Struttura base di unprogramma in C.
Conoscenza sistemi
rappresentazione binaria.
Contenuti
Il linguaggio C. Variabili (tipo int, float). Costanti.
Visibilita` delle variabili. Rappresentazione dei dati
numerici e non numerici.
7/21/2019 Lucidi informatica base
53/261
106
Genesi del linguaggio C
Sviluppato tra il 1969 ed il 1973presso gli AT&T Bell Laboratories(Ken Thompson, B. Kernighan, DennisRitchie)- Per uso interno- Legato allo sviluppo del sistema
operativo Unix Nel 1978 viene pubblicato The C
Programming Language, primaspecifica ufficiale del linguaggio-
Detto K&R
Ken
Thompson
Brian
Kernighan
Dennis
Ritchie
7/21/2019 Lucidi informatica base
54/261
107
Caratteristiche generali del linguaggio C
Il C un linguaggio:- Imperativo ad alto livello
... ma anche poco astratto
- Strutturato ... ma con eccezioni
- Tipizzato Ogni oggetto ha un tipo
- Elementare Poche keyword
- Case sensitive Maiuscolo diverso da minuscolo negli identificatori!
- Portabile- Standard ANSI
108
Storia
Sviluppo-
1969-1973- Ken Thompson e Dennis Ritchie- AT&T Bell Labs
Versioni del C e Standard
- K&R (1978)- C89 (ANSI X3.159:1989)- C90 (ISO/IEC 9899:1990)- C99 (ANSI/ISO/IEC 9899:1999, INCITS/ISO/IEC 9899:1999)
Non tutti i compilatori sono standard!- GCC: QuasiC99, con alcune mancanze ed estensioni- Borland & Microsoft:AbbastanzaC89/C90
7/21/2019 Lucidi informatica base
55/261
109
Diffusione attuale
I linguaggi attualmente pi diffusi al mondo sono:- C- C++, unevoluzione del C- Java, la cui sintassi tratta da C++- C#, estremamente simile a Java e C++
Il linguaggio C uno dei linguaggi pi diffusi La sintassi del linguaggio C ripresa da tutti gli altri
linguaggi principali
110
Un esempio
#include
intmain(void){
printf("hello, world\n");
return0;}
7/21/2019 Lucidi informatica base
56/261
111
Identificatori
Si riferiscono ad una delle seguenti entit:- Costanti- Variabili- Tipi- Sottoprogrammi- File- Etichette
Regole:- Iniziano con carattere alfabetico o _- Contengono caratteri alfanumerici o _
112
Identificatori (Cont.)
Caratteristiche:- Esterni: Gli oggetti del sistema
Case insensitive Significativi almeno i primi 6 caratteri
- Interni: Le entit del programma Case sensitive
Significativi almeno i primi 31 caratteri- Riservati: Parole chiave del linguaggio Elementi della libreria C standard
7/21/2019 Lucidi informatica base
57/261
113
Commenti
Testo libero inserito allinterno del programma
Non viene considerato dal compilatore
Serve al programmatore, non al sistema!
Formato:-
Racchiuso tra /* */-
Non possibile annidarli
- Da // fino alla fine della linea
Esempi:/* Questo un commento ! *//* Questo /* risulter in un */ errore */
// Questo un altro commento
114
Parole chiave
Riservate!
Nel C standard sono 32auto double int struct
break else long switch
case enum register typedefchar extern return union
const float short un
continue for signed void
default goto sizeof volatile
do if static while
7/21/2019 Lucidi informatica base
58/261
115
Struttura di un programma C
Struttura generale:
Parte dichiarativa globale
main()
{
Parte dichiarativa locale
Parte esecutiva
}
116
Struttura di un programma C (Cont.)
Parte dichiarativa globale- Elenco degli oggetti che compongono il programma e specifica
delle loro caratteristiche Categoria degli oggetti
- Tipicamente dati
Tipo degli oggetti- Numerici, non numerici
main- Parola chiave che indica il punto di inizio del programma quando
viene eseguito dal sistema operativo- Contenuto delimitato da parentesi graffe { }
7/21/2019 Lucidi informatica base
59/261
117
Struttura di un programma C (Cont.)
Parte dichiarativa locale- Elenco degli oggetti che compongono il maine specifica delle
loro caratteristiche
Parte esecutiva- Sequenza di istruzioni- Quella che descriviamo con il diagramma di flusso!
118
Struttura di un programma C (Cont.)
Programma minimo:
main()
{
}
Start
Stop
file prova.c
7/21/2019 Lucidi informatica base
60/261
119
Notazione
Per specificare la sintassi di unistruzione utilizziamo unformalismo particolare
Simboli utilizzati- Un generico nome
Esempio: indica che va specificato un generico valorenumerico
- [] Unoperazione opzionale
- c Uno specifico simbolo Esempio: ?indica che comparir il carattere ?esplicitamente
- nome Una parola chiave
7/21/2019 Lucidi informatica base
61/261
I dati numerici
Sono quelli pi usati in ambito scientifico nei modernisistemi di elaborazione tutti gli altri tipi di dato sonotrasformati in dati numerici
Tutti i tentativi di elaborare direttamente dati nonnumerici o sono falliti o si sono mostrati molto piinefficienti che non effettuare lelaborazione solo dopoaver trasformato i dati in forma numerica
121
122
Dichiarazione di dati
In C, tutti i dati devono essere dichiarati prima di essereutilizzati!
La dichiarazione di un dato richiede:- Lallocazionedi uno spazio in memoria atto a contenere il dato- Lassegnazionedi un nome a tale spazio in memoria
In particolare, occorre specificare:- Nome (identificatore)- Tipo- Modalit di accesso (variabile o costante)
7/21/2019 Lucidi informatica base
62/261
123
Tipi base (primitivi)
Sono quelli forniti direttamente dal C
Identificati da parole chiave!- char caratteri ASCII- int interi (complemento a 2)- float reali (floating point singola precisione)- double reali (floating point doppia precisione)
La dimensione precisa di questi tipi dipendedallarchitettura (non definita dal linguaggio)- |char| = 8 bit = 1 Byte sempre
124
Modificatori dei tipi base
Sono previsti dei modificatori, identificati da parole chiaveda premettere ai tipi base- Segno:
signed/unsigned- Applicabili ai tipi chare int
signed: Valore numerico con segno
unsigned: Valore numerico senza segno
-
Dimensione:
short/long- Applicabili al tipo int- Utilizzabili anche senza specificare int
7/21/2019 Lucidi informatica base
63/261
125
Modificatori dei tipi base (Cont.)
Interi- [signed/unsigned] short [int]
- [signed/unsigned] int
- [signed/unsigned] long [int]
Reali- float
- double
126
Variabili
Locazioni di memoria destinate alla memorizzazione didati il cui valore modificabile
Sintassi:
;
: Identificatore che indica il nome della variabile
Sintassi alternativa (dichiarazioni multiple):
;
: Lista di identificatori separati da ,
7/21/2019 Lucidi informatica base
64/261
127
Variabili (Cont.)
Esempi:int x;
char ch;
long int x1, x2, x3;
double pi;
short int stipendio;
long y, z;
Usiamo nomi significativi!- Esempi:
int x0a11; /* NO */
int valore; /* SI */
float raggio; /* SI */
128
Esempi di nomi
a a1 a2b
area perimetro perim
n_elementi risultatoNelementi
num somma maxNn
trovato nome risposta
7/21/2019 Lucidi informatica base
65/261
129
Esempi
0i
2j
100N
-3124x
inti, j ;intN ;intx ;
i = 0 ;
j = 2 ;N = 100 ;x = -3124 ;
130
Esempi
3.1a
2.0b
3.1415pigr
Nav
flo ta, b ;flo tpigr ;flo tNav, Qe ;
a = 3.1 ;b = 2.0 ;pigr = 3.1415926 ;Nav = 6.02e23 ;Qe = 1.6e-19 ;
1.6"1019Qe
6.02"1023
7/21/2019 Lucidi informatica base
66/261
131
Valore contenuto
Ogni variabile, in ogni istante di tempo, possiede un certovalore
Le variabili appena definite hanno valore ignoto- Variabili non inizializzate
In momenti diversi il valore pu cambiare
?a
tdefinizioneEs. int a;
132
Valore contenuto
Ogni variabile, in ogni istante di tempo, possiede un certovalore
Le variabili appena definite hanno valore ignoto- Variabili non inizializzate
In momenti diversi il valore pu cambiare
? a
t
37
definizione inizializzazioneEs. a = 37;
7/21/2019 Lucidi informatica base
67/261
133
Valore contenuto
Ogni variabile, in ogni istante di tempo, possiede un certovalore
Le variabili appena definite hanno valore ignoto- Variabili non inizializzate
In momenti diversi il valore pu cambiare
? a
t
37 -4
definizione inizializzazione altraassegnazione
Es. a = -4;
134
Valore contenuto
Ogni variabile, in ogni istante di tempo, possiede un certovalore
Le variabili appena definite hanno valore ignoto- Variabili non inizializzate
In momenti diversi il valore pu cambiare
? a
t
37 -4 -3
definizione inizializzazione altraassegnazione
incrementoEs. a = a+1;
7/21/2019 Lucidi informatica base
68/261
135
Costanti
Locazioni di memoria destinate alla memorizzazione di dati il cuivalore non modificabile
Sintassi:const = ;
: Identificatore che indica il nome della costante:Valore che la costante deve assumere
Esempi:-
const double PIGRECO = 3.14159;
-
const char SEPARATORE = $;
-
const float ALIQUOTA = 0.2;
Convenzione:-
Identificatori delle constanti tipicamente in MAIUSCOLO
136
Costanti (Cont.)
Esempi di valori attribuibili ad una costante:- Costanti di tipo char:
f
-
Costanti di tipo int, short, long
26
0x1a,0X1a
26L
26u
26UL
- Costanti di tipo float, double
-212.6
-2.126e2, -2.126E2, -212.6f
7/21/2019 Lucidi informatica base
69/261
137
Costanti speciali
Caratteri ASCII non stampabili e/o speciali
Ottenibili tramite sequenze di escape\
Esempi:- \007
- \013
Caratteri predefiniti- \b backspace-
\f form feed- \n line feed- \t tab
138
Visibilit delle variabili
Ogni variabile utilizzabile allinterno di un precisoambiente di visibilit (scope)
Variabili globali- Definite allesterno del main()
Variabili locali- Definite allinterno del main()- Pi in generale, definite allinterno di un blocco
7/21/2019 Lucidi informatica base
70/261
139
Struttura a blocchi
In C, possibile raccogliere istruzioni in blocchi racchiudendole traparentesi graffe
Significato: Delimitazione di un ambiente di visibilit dioggetti (variabili, costanti)
Corrispondente ad una sequenza di istruzioni
Esempio:{
int a=2;
int b;
b=2*a;
}
aebsono definitesolo allinterno del blocco!
140
int n;
double x;
main() {int a,b,c;
double y;
{
int d;double z;
}
}
Visibilit delle variabili: Esempio
-
n,x: Visibili in tutto il file-
a,b,c,y: Visibili in tutto il main()- d,z: Visibili nel blocco delimitato dalle parentesi graffe
7/21/2019 Lucidi informatica base
71/261
Come contiamo?
Il sistema di numerazione del mondo occidentale (sistemaindo-arabo) :- decimale- posizionale
252 = 2 "100 + 5 "10 + 2 "1= 2 "102 + 5 "101 + 2 "100
141
Sistemi di numerazione
Non posizionali (additivi):- egiziano- romano- greco
142
7/21/2019 Lucidi informatica base
72/261
Sistemi di numerazione
Posizionali:- babilonese (2 cifre, sessagesimale)- inuit, selti, maya (ventesimale)- indo-arabo (decimale)
143
Sistemi di numerazione
Ibridi:- cinese
144
7/21/2019 Lucidi informatica base
73/261
Sistema di numerazione posizionale
Occorre definire la base B da cui discendono variecaratteristiche:- cifre = { 0, 1, 2, ..., B-1 }- peso della cifra i-esima = Bi- rappresentazione (numeri naturali) su N cifre
145
Interruttore ha due stati(aperto-chiuso, ON_OFF)
Aperto = 0
Chiuso = 1
Bit e interruttori
146
7/21/2019 Lucidi informatica base
74/261
Il sistema binario
Base = 2
Cifre = { 0, 1 }
Esempio:1012= 1 "22+ 0 "21+ 1 "20
= 1 "4 + 1 "1
= 510
147
Alcuni numeri binari
0 ... 0 1000 ... 81 ... 1 1001 ... 910 ... 2 1010 ... 1011 ... 3 1011 ... 11100 ... 4 1100 ... 12101 ... 5 1101 ... 13
110 ... 6 1110 ... 14111 ... 7 1111 ... 15
148
7/21/2019 Lucidi informatica base
75/261
Alcune potenze di due
20 ... 1 29 ... 51221 ... 2 210 ... 102422 ... 4 211 ... 204823 ... 8 212 ... 409624 ... 16 213 ... 819225 ... 32 214 ... 1638426 ... 64 215 ... 3276827 ... 128 216 ... 65536
28
... 256
149
Conversione di numeri naturalida binario a decimale
Si applica direttamente la definizione effettuando lasomma pesata delle cifre binarie:
11012 = 1 "23+ 1 "22+ 0 "21+ 1 "20
= 8 + 4 + 0 + 1
= 1310
150
7/21/2019 Lucidi informatica base
76/261
151
Conversione da sistema decimale a binario
Dallinterpretazione della codifica binaria
Regola pratica:- Divisioni successive per due- Si prendono i resti in ordine inverso
13 6 3 1 0 quozienti
1 0 1 1 resti
1310 = 11012
Terminologia
Bit Byte Word
Double word/Long word
152
7/21/2019 Lucidi informatica base
77/261
Terminologia
1 0 1 1 0 1 1 0
LSB
Least
Significant
Bit
MSB
Most
Significant
Bit
153
Limiti del sistema binario(rappresentazione naturale)
Consideriamo numeri naturali in binario:- 1 bit ~ 2 numeri ~ { 0, 1 }2~ [ 0 1 ]10- 2 bit ~ 4 numeri ~ { 00, 01, 10, 11}2~ [03]10
Quindi in generale per numeri naturali a N bit:- combinazioni distinte
2N- intervallo di valori
0 ! x ! 2N 1 [ base 10 ](000...0) ! x ! (111...1) [ base 2 ]
154
7/21/2019 Lucidi informatica base
78/261
Limiti del sistema binario(rappresentazione naturale)
bit simboli min10 max104 16 0 158 256 0 25516 65 536 0 65 53532 4 294 967 296 0 4 294 967 295
155
Somma in binario
Regole base:0 + 0 = 00 + 1 = 11 + 0 = 11 + 1 = 0 ( carry= 1 )
156
7/21/2019 Lucidi informatica base
79/261
Somma in binario
Si effettuano le somme parziali tra i bit dello stesso peso,propagando gli eventuali riporti:
1 10 1 1 0 +0 1 1 1 =
1 1 0 1
157
Sottrazione in binario
Regole base:0 - 0 = 00 - 1 = 1 ( borrow= 1 )1 - 0 = 11 - 1 = 0
158
7/21/2019 Lucidi informatica base
80/261
Sottrazione in binario
Si effettuano le somme parziali tra i bit dello stesso peso,propagando gli eventuali riporti:
10 0 0 1 -0 1 1 0 =0 0 1 1
159
Overflow
Si usa il termine overflowper indicare lerrore che siverifica in un sistema di calcolo automatico quando ilrisultato di unoperazione non rappresentabile con lamedesima codifica e numero di bit degli operandi.
160
7/21/2019 Lucidi informatica base
81/261
Overflow
Nella somma in binario puro si ha overflow quando:- si lavora con numero fisso di bit- si ha carry sul MSB
161
Overflow - esempio
Ipotesi: operazioni su numeri da 4 bit codificati in binariopuro
0101 +1110 =-------- ---
10011
overflow
162
7/21/2019 Lucidi informatica base
82/261
Il sistema ottale
base = 8 (talvolta indicata con Q per Octal)- cifre = { 0, 1, 2, 3, 4, 5, 6, 7 }- utile per scrivere in modo compatto i numeri binari ( 3:1 )
1 0 1 1 1 0 0 1 2
2 7 1 8
163
Il sistema esadecimale
base = 16 (talvolta indicata con H per Hexadecimal)- cifre = { 0, 1, ..., 9, A, B, C, D, E, F }- utile per scrivere in modo compatto i numeri binari ( 4:1 )
1 0 1 1 1 0 0 1 2
B 9 16
164
7/21/2019 Lucidi informatica base
83/261
Rappresentazione dei numeri interi relativi
+ 25 C - 9 C
165
I numeri con segno
Il segno dei numeri pu essere solo di due tipi:- positivo ( + )- negativo ( )
Equindi facile rappresentarlo in binario ... ma nonsempre la soluzione pi semplice quella migliore!
Modulo e segno Complemento a uno Complemento a due Eccesso X
166
7/21/2019 Lucidi informatica base
84/261
Codifica modulo e segno
un bit per il segno (tipicamente il MSB): 0 = segno positivo ( + )
1 = segno negativo ( )
N-1 bit per il valore assoluto (anche detto modulo)
167
segno modulo
1 bit N-1 bit
Modulo e segno: esempi
Usando una codifica su quattro bit:
+ 310 # 0011M&S310 # 1011M&S
0000M&S # + 010
1000M&S # 010
168
7/21/2019 Lucidi informatica base
85/261
Modulo e segno
Svantaggi:- doppio zero (+ 0, - 0)- operazioni complesse- es. somma A+B
A > 0 A < 0B > 0 A + B B - |A|B < 0 A - |B| - ( |A| + |B| )
169
Modulo e segno: limiti
In una rappresentazione M&S su N bit:
- ( 2N-1 - 1 ) ! x ! + ( 2N-1 - 1 )
Esempi:
-
8 bit = [ -127 ... +127 ]- 16 bit = [ -32 767 ... +32 767 ]
170
7/21/2019 Lucidi informatica base
86/261
2526-27 24 23 22 21 20
Complemento a due
10110120
21
22
23
24
2
5
-32+8+4+1= -19
Complemento a due (esempio)
7/21/2019 Lucidi informatica base
87/261
Codifica in complemento a due
In questa codifica per un numero a N bit:- il MSB ha peso negativo (pari a -2N-1)- gli altri bit hanno peso positivo
Ne consegue che MSB indica sempre il segno:- 0 = + 1 =
Esempi (complemento a due su 4 bit):- 1000CA2= -23= -810- 1111CA2= -23 + 22+ 21+ 20= -8 +4 +2 +1 = -110- 0111CA2= 22+ 21+ 20= 710
173
Complemento a 2
La rappresentazione in complemento a due oggi la pidiffusa perch semplifica la realizzazione dei circuiti pereseguire le operazioni aritmetiche
Possono essere applicate le regole binarie a tutti i bit
174
7/21/2019 Lucidi informatica base
88/261
Somma e sottrazione in CA2
La somma e sottrazione si effettuano direttamente, senzabadare ai segni degli operandi
La sottrazione si pu effettuare sommando al minuendo ilCA2 del sottraendo
175
Somma in CA2 - esempio
00100110 + 11001011
00100110 +11001011 =---------------
verifica: 38 + ( 53) = 15
176
11110001
7/21/2019 Lucidi informatica base
89/261
Sottrazione in CA2 - esempio
00100110 11001011
00100110 - 11001011 =---------------
verifica: 38 ( 53) = 91
177
01011011
Overflow nella somma in CA2
Operandi con segno discorde: non si pu mai verificareoverflow.
Operandi con segno concorde: c overflow quando ilrisultato ha segno discorde.
178
7/21/2019 Lucidi informatica base
90/261
Esempio overflow in CA2 (sottrazione)
3 + (-8) -3 + (-8)
0011 + 1101 +1000 = 1000 =
---------- ----------
1011 10101 =
0101
OK ( -5 )overflow!
179
3.14 0.314 x 10+1
0.0001 0.1 x 10-3
137 0.137 x 10+3
N = M x2E
Rappresentazione in virgola mobile(Floating Point)
Notazione scientifica
M = mantissa
E = esponente
7/21/2019 Lucidi informatica base
91/261
ME+_
Rappresentazione in virgola mobile(Floating Point)
Nella memoria del calcolatore si memorizzano:segnoesponentemantissa
Formato IEEE-754
Mantissa nella forma 1,(valore max < 2)
Base dellesponente pari a 2
IEEE 754 SP:
IEEE 754 DP:
182
23 bit8 bit
esponentesegno mantissa
1 bit
52 bit11 bit
esponentesegno mantissa
1 bit
7/21/2019 Lucidi informatica base
92/261
IEEE-754 SP: intervallo di valori
0-1038 -10-38 10-38 1038
underflow ( 0 )
overflow (NaN)
183
Problemi
Numero fisso del numero di bit
I numeri sono rappresentati da sequenze di cifre Problemi:
- Intervallo di rappresentazione- Overflow- Precisione
184
7/21/2019 Lucidi informatica base
93/261
Elaborazione dell
informazionenon numerica
Nelmezzo
delcammin
dinostra
vita...
185
Informazione non numerica
Se in quantit finita, si pu mettere in corrispondenza coinumeri interi.
00 01 10
186
7/21/2019 Lucidi informatica base
94/261
Rappresentazioni numeriche
Dati N bit - si possono codificare 2N oggettidistinti- usabili per varie rappresentazioni numeriche
Esempio (usando 3 bit):
000 001 010 011 100 101 110 111oggettibinari
0 1 2 3 4 5 6 7num. naturali
+0 +1 +2 +3 -0 -1 -2 -3num. relativi (M&S)
+0 +1 +2 +3 -4 -3 -2 -1num. relativi (CA2)
187
Caratteri
Occorre una codifica standard perch il genere diinformazione pi scambiata:- codice ASCII (American Standard Code for Information
Interchange)- codice EBCDIC (Extended BCD Interchange Code)
188
7/21/2019 Lucidi informatica base
95/261
Codice ASCII
Usato anche nelle telecomunicazioni. Usa 8 bit (originariamente 7 bit per US-ASCII) per
rappresentare:- 52 caratteri alfabetici (a...z A...Z)-
10 cifre (0...9)- segni di interpunzione (,;!?...)- caratteri di controllo
189
Caratteri di controllo
CR ( 13 ) Carriage ReturnLF, NL ( 10 ) New Line, Line FeedFF, NP ( 12 ) New Page, Form Feed
HT ( 9 ) Horizontal TabVT ( 11 ) Vertical TabNUL ( 0 ) Null
BEL ( 7 ) BellEOT ( 4 ) End-Of-Transmission. . . . . . . . .
190
7/21/2019 Lucidi informatica base
96/261
Codice ASCII - esempio
191
01000001 A 0010000001110101 u 01110100 t01100111 g 01110101 u01110101 u 01110100 t01110010 r 01110100 t01101001 i 01101001 i00100000 00100001 !
01100001 a
UNICODE e UTF-8
Unicode esprime tutti i caratteri di tutte le lingue delmondo (pi di un milione).
UTF-8 la codifica di Unicode pi usata:- 1 byte per caratteri US-ASCII (MSB=0)- 2 byte per caratteri Latini con simboli diacritici, Greco, Cirillico,Armeno, Ebraico, Arabo, Siriano e Maldiviano
- 3 byte per altre lingue di uso comune- 4 byte per caratteri rarissimi- raccomandata da IETF per e-mail
192
7/21/2019 Lucidi informatica base
97/261
Rappresentazione di un testo informato ASCII
Caratteri in codice ASCII
Ogni riga terminata dal terminatore di riga:
in MS-DOS e Windows = CR + LF in UNIX = LF in MacOS = CR
Pagine talvolta separate da FF
193
Codifiche o formati di testo/stampa
Non confondere il formato di un file word, con codiceASCII!!
Un testo pu essere memorizzato in due formati- Formattato: sono memorizzate sequenze di byte che definiscono
laspetto del testo (e.g., font, spaziatura)-
Non formattato: sono memorizzati unicamente i caratteri che
compongono il testo
194
7/21/2019 Lucidi informatica base
98/261
Caratteridi controllo
Caratteridi stampa(ASCII)
Formato testi
195
Il PDF (Portable Document Format) un formato open difile basato su un linguaggio di descrizione di paginasviluppato da Adobe Systems per rappresentaredocumenti in modo indipendente dallhardware e dalsoftware utilizzati per generarli o per visualizzarli
Un file PDF pu descrivere documenti che contengono
testo e/o immagini a qualsiasi risoluzione
196
7/21/2019 Lucidi informatica base
99/261
197
Settimana n.4
Obiettivi
Input-output di base Utilizzo del pre-processore
Costrutti condizionalisemplici
Condizioni complesse
Costrutti condizionaliannidati
Contenuti
scanf e printf a livelloelementare
Direttiva #include e #define Espressioni aritmetiche ed
operatori base
Operatori relazionali Operatori logici Algebra di Boole
7/21/2019 Lucidi informatica base
100/261
199
Istruzioni elementari
Corrispondono ai blocchi di azione dei diagrammi diflusso:
Due categorie:
- Assegnazione
- Input/output (I/O)
200
Assegnazione
Sintassi: =
Non unuguaglianza!-
Significato: viene assegnato a -
e devono essere di tipi compatibili-
deve essere stata dichiarata precedentemente!
- Esempi:int x;
float y;
x = 3;
y = -323.9498;
Pu essere inclusa nella dichiarazione di una variabile- Esempi:
int x = 3;
float y = -323.9498;
7/21/2019 Lucidi informatica base
101/261
201
Istruzioni di I/O
Diverse categorie in base al tipo di informazione letta oscritta:- I/O formattato- I/O a caratteri- I/O per righe
Richiede la nozione di stringa. Come tale, sar trattata in seguito
Nota:
In C, le operazioni di I/O non sono gestite tramite vere eproprie istruzioni, bens mediante opportune funzioni.- Il concetto di funzione verr introdotto successivamente; in questa
sezione le funzioni di I/O saranno impropriamente chiamateistruzioni
202
I/O formattato
Output- Istruzione printf()
Input- Istruzione scanf()
Lutilizzo di queste istruzioni richiede linserimento di unadirettiva
#include
allinizio del file sorgente- Significato: includi il file stdio.h- Contiene alcune dichiarazioni
7/21/2019 Lucidi informatica base
102/261
203
Istruzioneprintf()
Sintassi:printf(,,...,);
: Sequenza di caratteri che determina il formato di stampadi ognuno dei vari argomenti
Pu contenere:- Caratteri (stampati come appaiono)- Direttive di formato nella forma%
%d intero
%u unsigned
%s stringa
%c carattere
%x esadecimale %o ottale
%f float
%g double
- ,...,: Le quantit (espressioni) che si vogliono stampare
Associati alle direttive di formato nello stesso ordine!
204
Istruzioneprintf(): Esempi
int x=2;
float z=0.5;
char c=a;
printf(%d %f %c\n,x,z,c);
printf(%f***%c***%d\n,z,c,x);
2 0.5 a
output
0.5***a***2
output
7/21/2019 Lucidi informatica base
103/261
205
Istruzione scanf()
Sintassi:scanf(,,...,);
: come per printf,...,: le variabili cui si vogliono assegnare valori
IMPORTANTE:I nomi delle variabili vanno precedute dalloperatore & che indicalindirizzo della variabile (vedremo pi avanti il perch)
Esempio:int x;
float z;
scanf(%d %f, &x, &z);
206
Significato di scanf()
Istruzioni di input vanno viste come assegnazionidinamiche:- Lassegnazione dei valori alle variabili avviene al tempo di
esecuzione e viene deciso dallutente
Assegnazioni tradizionali = Assegnazioni statiche- Lassegnazione dei valori alle variabili scritta nel codice!
7/21/2019 Lucidi informatica base
104/261
207
I/O formattato avanzato
Le direttive della stringa formato di printfe scanfsono in realt pi complesse- printf:
%[flag][min dim][.precisione][dimensione]
[flag]: Pi usati- Giustificazione della stampa a sinistra+ Premette sempre il segno
[min dim]: Dimensione minima di stampa in caratteri [precisione]: Numero di cifre frazionarie (per numeri reali) [dimensione]: Uno tra:
h argomento shortl argomento long
carattere: Visto in precedenza
208
I/O formattato avanzato (Cont.)
- scanf:%[*][max dim][dimensione]
[*]: Non fa effettuare lassegnazione (ad es., per saltare un dato in input) [max dim]: Dimensione massima in caratteri del campo [dimensione]: Uno tra:
h argomento shortl argomento long
carattere: Visto in precedenza
7/21/2019 Lucidi informatica base
105/261
209
printf()e scanf(): Esempio
#include
main()
{
int a;
float b;
printf(Dammi un numero intero (A): );
scanf(%d,&a)
printf(Dammi un numero reale (B): );
scanf(%f,&b) != 1)
printf(A= %d\n,a);printf(B= %f\n,b);
}
210
Pre-processore C
La compilazione C passa attraverso un passo preliminareche precede la vera e propria traduzione in linguaggiomacchina
Il programma che realizza questa fase dettopre-processore
Funzione principale: Espansione delle direttive cheiniziano con il simbolo #
Direttive principali:- #include
- #define
7/21/2019 Lucidi informatica base
106/261
211
Direttiva #include
Sintassi:- #include
pu essere specificato come: per includere un file di sistema
- Esempio:#include
per includere un file definito dal programmatore- Esempio:#include miofile.h
Significato: viene espanso ed incluso per intero nel file sorgente
212
Direttiva #include
Esempio:file.c mydef.h
#include mydef.h....int main() {...}
int x,y;double z;
Pre-processoreint x,y;double z;....int main() {...}
7/21/2019 Lucidi informatica base
107/261
213
Direttiva #define
Sintassi:#define
: Identificatore della costante simbolica Convenzionalmente indicato tutto in maiuscolo
: Un valore da assegnare alla costante
Utilizzo:
- Definizione di costanti simboliche- Maggiore leggibilit- Maggiore flessibilt
Il cambiamento del valore della costante si applica a tutto il file!
214
Direttiva #define (Cont.)
Esempio:- #define PI 3.1415
- #define N 80
- ...
- double z = PI * x;
- int vect[N];
7/21/2019 Lucidi informatica base
108/261
215
Direttiva #define (Cont.)
#define N 10
intmain(void){
intdato[N] ;
. . .}
Definizionedella
costante
Uso dellacostante
216
Espressioni
Combinazioni di variabili, costanti ed operatori
Il valore di unespressione pu essere assegnato ad una variabile: =
- Significato: valutata ed il valore ottenuto assegnato a
- e devono essere di tipi compatibili
Esistono varie categorie di operatori, applicabili a tipi di dato diversi:-
Operatori aritmetici-
Operatori relazionali-
Operatori logici-
Operatori su bit-
Operatori di modifica del tipo (cast)- Operatori di calcolo della dimensione di un tipo: sizeof()
7/21/2019 Lucidi informatica base
109/261
217
Operatori aritmetici
Quattro operatori (per numeri reali e interi):+ - * /
Per numeri interi, esiste loperatore %che ritorna il restodella divisione intera
Stesse regole di precedenza dellaritmetica ordinaria
Esempi:int x=5;
int y=2;
int q, r;
q = x / y; // (q = 2, troncamento)r = x % y; // (r = 1)
218
Divisione tra interi: Esempio
#include
main()
{
int a, b;
printf(Dammi un numero intero (A): );
scanf(%d,&a);
printf(\n);
printf(Dammi un numero intero (B): );
scanf(%d,&b);
printf(\n);
printf(A div B = %d\n, a/b);
printf(A mod B = %d\n, a%b);
}
7/21/2019 Lucidi informatica base
110/261
219
Quesito
Che operazione svolge il seguente frammento diprogramma?
a = 10;b = 25;a = b ;b = a ;
220
Soluzione
Che operazione svolge il seguente frammento diprogramma?
a = 10;b = 25;
a = b ;
b = a ;
tempoa = 10 b = 25 a = 25 b = 25
7/21/2019 Lucidi informatica base
111/261
221
Quesito
Come fare a scambiare tra di loro i valori di due variabili?
a 7 12b
222
Soluzione
E necessario utilizzare una variabile di appoggio
tmp = a;a = b;
b = tmp;
tempotmp = 7 a = -12 b = 7
7/21/2019 Lucidi informatica base
112/261
223
Operatori di confronto in C
Uguaglianza- Uguale: a == b- Diverso: a != b
Ordine-
Maggiore: a > b- Minore: a < b- Maggiore o uguale: a >= b- Minore o uguale: a +=1- Operatore-- -> -=1
Esempi:- x++;
- valore--;
7/21/2019 Lucidi informatica base
113/261
225
Operatori di incremento (Cont.)
Possono essere utilizzati sia in notazione prefissache innotazione postfissa
Prefissa: La variabile viene modificata prima di essereutilizzata in unespressione
Postfissa: La variabile viene modificata dopo averla
utilizzata in unespressione
Esempio: Assumendo x=4:- Se si esegue y=x++, si otterr come risultato x=5e y=4;- Se si esegue y=++x, si otterr come risultato x=5e y=5;
226
Operatori relazionali
Operano su quantit numeriche o chare forniscono unrisultato booleano:
< >= == !=
Il risultato sempre di tipo int
-
risultato = 0 FALSO- risultato $0 VERO
7/21/2019 Lucidi informatica base
114/261
227
Operatori logici
Operano su espressioni booleane e forniscono un risultatobooleano:
! && ||
NOT AND OR
Equivalenti agli operatori booleani di base-
Stesse regole di precedenza NOT > AND > OR
Esempi:- (x>0) && (xx2) || (x1 == 3)
Le espressioni logiche sono valutate da sinistra a destra
La valutazione viene interrotta non appena il risultato univocamente determinato
228
Operatori logici (Cont.)
Operatorebooleano
Sintassiin C
AND &&
OR ||
NOT !
Esempio
(x>=a)&&(x=18)||(v2>=18)
!(a>b)
7/21/2019 Lucidi informatica base
115/261
La logica degli elaboratori elettronici
229
Ma quale logica
del $@#?! ...#
La logica Booleana
Nel 1847 George Boole introdusse un nuovo tipo di logicaformale, basata esclusivamente su enunciati di cui fossepossibile verificare in modo inequivocabile la verit o lafalsit.
230
7/21/2019 Lucidi informatica base
116/261
Variabili Booleane
Variabili in grado di assumere solo due valori:- VERO- FALSO
In ogni problema importante distinguere le variabiliindipendenti da quelle dipendenti.
231
Operatori Booleani
Operatori unari (es. Not )op : B B
Operatori binari (es. And )op : B2 B
Descritti tramite una tavola della verit (per N operandi,la tabella ha 2Nrighe che elencano tutte le possibilicombinazioni di valori delle variabili indipendenti ed ilvalore assunto dalla variabile dipendente)
232
7/21/2019 Lucidi informatica base
117/261
Tavola della verit (truth table)
falso
falso
A
falso
vero
B
falso
vero
vero
vero
falso
falso
A opB
falso
vero
233
Espressioni Booleane
Unespressione Booleana una combinazione di variabilied operatori Booleani.
Ad esempio:A e ( non B )
234
7/21/2019 Lucidi informatica base
118/261
Funzioni Booleane
Una funzione Booleana unapplicazione molti-a-uno:f: BN#B
Ad esempio:f (A, B) = A e ( non B )
235
vero
Operatore NOT
236
vero
falso
A
falso
A
Nota: per comodit grafica talvolta la
negazione indicata con un apice dopo la
variabile o lespressione negata (es. A)
7/21/2019 Lucidi informatica base
119/261
La porta INV / NOT
237
YA
Y = A
Operatore AND
238
falso
falso
A
falso
vero
B
falso
vero
vero
vero
falso
falso
A "B
falso
vero
7/21/2019 Lucidi informatica base
120/261
La porta AND
Y = A %B
YA
B
239
Operatore OR
240
falso
falso
A
falso
vero
B
falso
vero
vero
vero
falso
verovero
vero
A + B
7/21/2019 Lucidi informatica base
121/261
La porta OR
Y = A + B
YA
B
241
Operatore XOR
falso
falso
A
vero
vero
falso
vero
AB
vero
falso
falso
vero
B
falso
vero
242
7/21/2019 Lucidi informatica base
122/261
La porta XOR
Y = A &B = A %B+ A %B
YA
B
243
Propriet commutativa e associativa
A %B = B %AA + B = B + A
A %B %C = ( A %B) %C = A %(B %C) = (A %C) %BA + B + C = (A + B) + C = A + (B + C) = (A + C) + B
244
7/21/2019 Lucidi informatica base
123/261
Propriet distributiva
A %( B + C ) = A %B + A %C
A + ( B %C ) = ( A + B ) %( A + C )
245
Teorema di De Morgan
Teorema:f( a, b, ..., z; +, %) = f ( a, b, ..., z; %, + )
ovvero (negando entrambi i membri):f( a, b, ..., z; +, %) = f ( a, b, ..., z; %, + )
Ad esempio:- A + B = ( A"B)- ( A + B )= A"B
246
7/21/2019 Lucidi informatica base
124/261
Dimostrazioni in algebra Booleana
Siccome lalgebra Booleana contempla solo due valori possibile effettuare le dimostrazioni (di propriet oteoremi) considerando esaustivamente tutti i casipossibili:- 2 variabili #4 combinazioni- 3 variabili #8 combinazioni- 4 variabili #16 combinazioni- ecc.
247
Dimostrazioni: un esempio
A + ( B %C ) = ( A + B ) %( A + C ) ?
A B C A + B %C (A + B) %(A + C)0 0 0 0 + 0 %0 = 0 (0+0) %(0+0) = 00 0 1 0 + 0 %1 = 0 (0+0) %(0+1) = 0
0 1 0 0 + 1 %
0 = 0 (0+1) %
(0+0) = 00 1 1 0 + 1 %1 = 1 (0+1) %(0+1) = 11 0 0 1 + 0 %0 = 1 (1+0) %(1+0) = 11 0 1 1 + 0 %1 = 1 (1+0) %(1+1) = 11 1 0 1 + 1 %0 = 1 (1+1) %(1+0) = 11 1 1 1 + 1 %1 = 1 (1+1) %(1+1) = 1
248
7/21/2019 Lucidi informatica base
125/261
transistore
circuito integrato ( chip )
piedino (pin )
porta logica
( logic gate)
'10
'10 100,000
Dal transistor al chip
249
Dal problema al circuito
Dato un problema per ottenere il circuito corrispondente siapplicano i seguenti passi:1. Individuare le variabili booleane2. Creare la tabella di verit3. Generare la funzione F a partire dalla tabella di verit4. Progettare il circuito usando le porte logiche coerentemente con F
250
7/21/2019 Lucidi informatica base
126/261
Memoria
Eimportante non solo fare calcoli, ma anchememorizzare dati (es. i risultati parziali di una lungasequenza di operazioni).
A questo fine si usa un elemento logico speciale: il flip-flop.- elemento base dei circuiti con memoria- memorizza un bit
251
252
Settimana n.5
Obiettivi
Concetto di esecuzionecondizionale
Concetto di ciclo
Cicli semplici Cicli annidati
Contenuti
Operatori di cast e sizeof Istruzione if Costrutto switch
Costrutto while Ciclo for Ciclo do-while Istruzioni break e continue Concetto di ciclo annidato Problem solving su dati
scalari
7/21/2019 Lucidi informatica base
127/261
253
Rango delle espressioni aritmetiche
In C, possibile lavorare con operandi non dello stesso tipo
Le operazioni aritmetiche avvengono dopo aver promosso tutti glioperandi al tipo di rango pi alto:
_Bool
charshort
unsigned shortint
unsigned intlong
unsigned longlong long
unsigned long longfloatdouble
long double
254
Operatori di cast
In alcuni casi, pu essere necessario convertire esplicitamenteunespressione in uno specifico tipo- Quando le regole di conversione automatica non si applicano- Esempio: int i; double d;
lassegnazione i = d;fa perdere informazione
Sintassi:( );- Significato: Forza ad essere interpretata come se fosse
di tipo
Esempio:...
double f;
f = (double) 10;
7/21/2019 Lucidi informatica base
128/261
255
Operatori di cast: Esempio
#include
main()
{
int a, b;
printf(Dammi un numero intero (A): );
scanf(%d,&a);
printf(Dammi un numero intero (B): );
scanf(%d
,&b);
if(b==0)
printf(Errore: divisione per zero!!\n);
else
printf(A / B = %f\n, ((float)a)/b);
}
256
Operatore sizeof()
E possibile calcolare il numero di byte utilizzato dai tipi di dato dibase utilizzando loperatore sizeof
Sintassi:sizeof()
Ritorna il numero di byte occupato da
Esempio:unsigned int size;
size = sizeof(float); /* size = 4 */
Luso delloperatoresizeof() pu essere esteso al calcolo dellospazio occupato da espressioni, vettori e strutture
7/21/2019 Lucidi informatica base
129/261
257
Operatore sizeof(): Esempio
#include
main()
{
printf(tipo n.byte\n);
printf(----------- ------\n);
printf(char %d\n, sizeof(char));
printf(int %d\n, sizeof(int));
printf(long %d\n, sizeof(long));
printf(long long %d\n, sizeof(long long));
printf(float %d\n, sizeof(float));
printf(double %d\n, sizeof(double));
printf(long double %d\n, sizeof(long double));
}
258
Istruzione if
Sintassi:if ()
[else
]
: Espressione booleana: Sequenza di istruzioni
Se la sequenza contiene pi di una istruzione, necessarioracchiuderle tra parentesi graffe
Significato:- Se vera , esegui le istruzioni di ,
altrimenti esegui quelle di
blocco1 blocco2
condizioneVero Falso
7/21/2019 Lucidi informatica base
130/261
259
Istruzione if: Esempio
Leggere due valori A e B, calcolarne la differenza in valoreassoluto D = |A-B| e stamparne il risultato
main()
{
int A,B,D;
scanf(%d %d,&A,&B);
if (A > B)D = A-B;
else
D = B-A;
printf(%d\n,D);
}
260
Scelte annidate
Nelle istruzioni delblocco vero o delblocco else, possibileinserire altri blocchi discelta
In tal caso la secondascelta risulta annidataallinterno della prima
C1
A1
B
V F
A4
C2
A2 A3
V F
7/21/2019 Lucidi informatica base
131/261
261
Istruzione switch
Sintassi:switch ()
{
case:break;
case:break;
...default:
}
: Espressione a valore numerico
, , :Sequenza di istruzioni (no parentesi graffe!)
blocco1 blocco default
espressione
blocco2
262
Istruzione switch (Cont.)
Significato:-
In base al valore di , esegui le istruzioni del casecorrispondenti
- Nel caso nessun casevenga intercettato, esegui le istruzionicorrispondenti al caso default
NOTE:- I vari casedevono rappresentare condizioni mutualmente
ESCLUSIVE!- I vari casevengono eseguiti in sequenza
Per evitare questo, si usa listruzione breakallinterno di un blocco
7/21/2019 Lucidi informatica base
132/261
263
Istruzione switch (Cont.)
switch( e){
c sev1:A1;
bre k;
c sev2:A2;
bre k;
c sev3:A3;
bre k;...........def ult:
An;}
e=...
A1A2
A3
An
e=v1 e=v2e=v3
...
altrimenti
264
Istruzione switch: Esempio
int x;
...
switch (x) {
case 1:
printf(Sono nel caso 1\n);
break;
case 2:printf(Sono nel caso 2\n);
break;
default:
printf(N caso 1 n caso 2\n);
break;
}
7/21/2019 Lucidi informatica base
133/261
265
Flusso di esecuzione ciclico
A
B
C
D?
E
V
F
Prima delciclo
Istruzioniche vengonoripetute
Condizionedi ripetizione
Dopo il ciclo
266
Istruzionewhile
Sintassi:while ()
:Una condizione Booleana:Sequenza di istruzioni
Se pi di una istruzione, va racchiuso tra graffe
Realizza la struttura di tipo while
Significato:- Ripeti finch
vera
condizione
blocco
V
F
7/21/2019 Lucidi informatica base
134/261
267
Notazione grafica (while)
C
B
V F
A
D
Condizione
Corpo
Uscita
Ingresso
Ritorno
268
Istruzionewhile: Esempio
Leggere un valore N, calcolare la somma S dei primi Nnumeri interi e stamparla
#include
main() {
int N, i, S;
i = 1; S = 0; /* inizializzazioni */scanf (%d, &N);
while (i
7/21/2019 Lucidi informatica base
135/261
269
Anatomia di un ciclo
Conviene concepire il ciclo come 4 fasi- Inizializzazione- Condizione di ripetizione- Corpo- Aggiornamento
270
Istruzione for
Sintassi:for (; ; )
:Le condizioni iniziali prima del ciclo: Una condizione booleana
: Incremento della variabile diconteggio: Sequenza di istruzioni
Se contiene pi di una istruzione, va racchiuso tra graffe
Tutti i campi possono essere vuoti!
7/21/2019 Lucidi informatica base
136/261
271
Istruzione for (Cont.)
C
B
V Ffor( I; C; A){
B;}
I
A
Istruzione diinizializzazione
Istruzione di
aggiornamento
Corpo Condizione
272
Istruzione for (Cont.)
Significato:-
Equivalente a:
while () {
}
Realizza un ciclo basato su conteggio Tipicamente contiene una variabile indice che serve da iteratore:
- Parte da un valore iniziale (inizializzazione)- Arriva ad un valore finale (condizione)-
Attraverso uno specifico incremento (incremento)
7/21/2019 Lucidi informatica base
137/261
273
Istruzione for (Cont.)
Esempio:- Leggere un carattere ched un interoN, e stampare una riga di N
caratteri ch Esempio: N=10, ch=* output =**********
-
Formulazione iterativa: Ripeti Nvolte loperazione stampa ch
- Soluzione:
#include
main() {
int N, i;
char ch;
scanf(%d %c, &N, &ch);
for (i=0; i
7/21/2019 Lucidi informatica base
138/261
275
Esercizio: Soluzione
#include
main() {
int valore, i, Totale=0,M=0;
const int N = 100;
for (i=0; i 30) /* controllo validit */
printf(Valore non valido);
else
{ /* caso normale */
Totale += valore; /* accumula nuovo valore in Totale */M ++; /* ho letto un dato in pi */
}
}
printf(La media : %f\n, (float)Totale/M);
}
276
for ewhile
Il ciclo forpu essere considerato un caso particolaredel ciclo while
In generale si usa:- forper cicli di conteggio
Numero di iterazioni note a priori
Condizione di fine ciclo tipo conteggio- whileper cicli generali
Numero di iterazioni non note a priori Condizione di fine ciclo tipo evento
7/21/2019 Lucidi informatica base
139/261
277
Cicli forcon iterazioni note
int i ;
for( i=0; i=0; i--){
.......}
278
Cicli annidati
Alcuni problemi presentano una strutturabidimensionale
- Loperazione iterativa stessa pu essere espressa come unaltraiterazione
Realizzazione: Un ciclo che contiene un altro ciclo
Struttura:for (...)
{
for (...)
{
...
}
}
7/21/2019 Lucidi informatica base
140/261
279
Cicli whileannidati
C
B
V FC
V F
C2
B2
V F
280
Cicli whileannidati
CV F
C2
B2
V F
while( C){
while( C2){
B2;}
}
7/21/2019 Lucidi informatica base
141/261
281
Esempio
i = 0 ;while( i
7/21/2019 Lucidi informatica base
142/261
283
Istruzione do (Cont.)
C
B
V F
A
D
284
Istruzione do (Cont.)
Esempio:-
Leggere un valore N controllando che il valore sia positivo.In caso contrario, ripetere la lettura
#include
main() {
int n;do
scanf (%d, &n);
while (n
7/21/2019 Lucidi informatica base
143/261
285
Istruzione do (Cont.)
sempre possibile trasformare un ciclo di tipo doin unciclo di tipo whilesemplice, anticipando e/o duplicandouna parte delle istruzioni
Esempio:#include
main() {
int n;
scanf (%d, &n);
while (n
7/21/2019 Lucidi informatica base
144/261
287
Interruzione dei cicli (Cont.)
Trasformano i cicli in blocchi non strutturati- Usare con cautela (e possibilmente non usare)- Si pu sempre evitare luso di break/continue!
Usabili in ogni tipo di ciclo (while, for, do)
288
breake continue
In termini di diagrammi di flusso (esempio: ciclo while):
condizione
break
V
F
blocco
condizione
continue
V
F
blocco
7/21/2019 Lucidi informatica base
145/261
289
break: Esempio
Acquisire una sequenza di numeri interi da tastiera;terminare loperazione quando si legge il valore 0.
Versione con breakint valore;
while (scanf("%d", &valore))
{
if (valore == 0)
{printf("Valore non consentito\n");
break; /* esce dal ciclo */
}/* resto delle istruzioni del ciclo */
}
290
break: Esempio (Cont.)
Versione senza break (strutturata)int valore, finito = 0;
while (scanf("%d", &valore) && !finito)
{
if (valore == 0)
{
printf("Valore non consentito\n");
finito = 1;
}
else
{
/* resto delle istruzioni del ciclo */}
}
7/21/2019 Lucidi informatica base
146/261
291
continue: Esempio
Acquisire una sequenza di numeri interi da tastiera;ignorare i numeri pari al valore 0.
Versione con continueint valore;
while (scanf("%d", &valore))
{
if (valore == 0)
{printf("Valore non consentito\n");continue; /* va a leggere un nuovo valore */
}
/* resto delle istruzioni del ciclo */
}
292
continue: Esempio (Cont.)
Versione senza continue (strutturata)
int valore;while (scanf("%d", &valore))
{if (valore == 0){
printf("Valore non consentito\n");}
else {
/* resto delle istruzioni del ciclo */
}
}
7/21/2019 Lucidi informatica base
147/261
293
Settimana n.6
Obiettivi
VettoriContenuti
Definizione di vettori Dimensionamento statico
dei vettori Operazioni elementari:
lettura, stampa, copia,
confronto di vettori
294
Variabili e vettori
74
-186312-9
3214735
dato35 7
1432
-92
631 -184
7
dato1dato2
dato3dato4
dato5dato6
dato7 dato8
dato9
dato10
7/21/2019 Lucidi informatica base
148/261
295
Da evitare...
int
main(void
){
int
dato1, dato2, dato3, dato4, dato5 ;int
dato6, dato7, dato8, dato9, dato10 ;. . . . .scanf("%d", &dato1) ;scanf("%d", &dato2) ;scanf("%d", &dato3) ;. . .scanf("%d", &dato10) ;
printf("%d\n", dato10) ;printf("%d\n", dato9) ;printf("%d\n", dato8) ;. . .printf("%d\n", dato1) ;
}
296
...cos meglio!
intmain(void){
int
dato[10] ;. . . . .
for( i=0; i=0; i--)printf("%d\n", dato[i]) ;
}
7/21/2019 Lucidi informatica base
149/261
297
Vettori
Insiemi di variabili dello stesso tipoaggregate in ununica entit- Identificate globalmente da un nome- Singole variabili (elementi) individuate da un indice, corrispondente
alla loro posizione rispetto al primo elemento- Lindice degli elementi parte da 0- Gli elementi di un vettore sono memorizzati in celle di memoria
contigue!
aa a0 a1 a2 a3 a4a
298
Dichiarazione di un vettore
Sintassi: [];
Accesso ad un elemento: []
Esempio:int v[10];
- Definisce un insieme di 10 variabili intere v[0],v[1],v[2],v[3],v[4],v[5],v[6],v[7],v[8],v[9]
7/21/2019 Lucidi informatica base
150/261
299
Dichiarazione di un vettore (Cont.)
intdato[10] ;
Tipo di datobase
Numero dielementi
Nome delvettore
300
Inizializzazione di un vettore
E possibile assegnare un valore iniziale ad un vettore (solo) almomento della sua dichiarazione
Equivalente ad assegnare OGNI elemento del vettore
Sintassi (vettore di N elementi):
{, , ... ,}; Esempio:int lista[4] = {2, 0, -1, 5};
NOTA: Se vengono specificati meno di N elementi, linizializzazioneassegna a partire dal primo valore. I successivi vengono posti a zero.- Esempio:int s[4] = {2, 0, -1};
/* s[0]=2, s[1]=0, s[2]=-1, s[3]=0*/
7/21/2019 Lucidi informatica base
151/261
301
Vettori e indici
Lindice che definisce la posizione di un elemento di unvettore DEVE essere intero!- Non necessariamente costante!
Pu essere unespressione complessa (purch intera)
Esempi:double a[100];/* a vettore di double */
double x;
int i, j, k;
x = a[2*i+j-k]; /* corretto! */
302
Uso di una cella di un vettore
Lelemento di un vettore utilizzabile come una qualsiasivariabile:- utilizzabile allinterno di unespressione
tot = tot + dato[i] ;
- utilizzabile in istruzioni di assegnazione
dato[0] = 0 ;
- utilizzabile per stampare il valore
printf("%d\n", dato[k]) ;
- utilizzabile per leggere un valore scanf("%d\n", &dato[k]) ;
7/21/2019 Lucidi informatica base
152/261
303
Vettori e cicli
I cicli sono particolarmente utili per scandire un vettore
Utilizzo tipico: Applicazione iterativa di unoperazione suglielementi di un vettore
Schema:
int data[10];for (i=0; i
7/21/2019 Lucidi informatica base
153/261
305
Lettura vettore di interi
printf("Lettura di %d interi\n", N) ;
for( i=0; i
7/21/2019 Lucidi informatica base
154/261
307
Copia di un vettore
/* copia il contenuto di v[] in w[] */
for( i=0; i
7/21/2019 Lucidi informatica base
155/261
309
Esercizio 1: Soluzione
#include main()
{
int v[10];
int i, max, min;
for (i=0; i
7/21/2019 Lucidi informatica base
156/261
311
Esercizio 2: Soluzione
#include
#define N 10main(){
int v[N] = {0};int i=9; /* ultima posizione del vettore */unsigned num; /* unsigned perch positivo */
printf("Inserire un numero positivo (
7/21/2019 Lucidi informatica base
157/261
313
Ricerca di un elemento
Dato un valore numerico, verificare- se almeno unodegli elementi del vettore uguale al valore
numerico- in caso affermativo, dire dove si trova- in caso negativo, dire che non esiste
Si tratta di una classica istanza del problema di ricerca diesistenza
314
Ricerca di un elemento: Esempio (1/3)
intdato ; /* dato da ricercare */inttrovato ; /* flag per ricerca */intpos ; /* posizione elemento */
...
printf("Elemento da ricercare? ");scanf("%d", &dato) ;
7/21/2019 Lucidi informatica base
158/261
315
Ricerca di un elemento: Esempio (2/3)
trovato = 0 ;pos = -1 ;
for( i=0 ; i
7/21/2019 Lucidi informatica base
159/261
317
Varianti
Altri tipi di ricerche- Contare quante volte presente lelemento cercato- Cercare se esiste almeno un elemento maggiore (o minore) del
valore specificato- Cercare se esiste un elemento approssimativamente uguale a
quello specificato- ...
318
Ricerca del massimo
Dato un vettore (di interi o reali), determinare- quale sia lelemento di valore massimo- quale sia la posizione in cui si trova tale elemento
Conviene applicare la stessa tecnica per lidentificazionedel massimo gi vista in precedenza- Conviene inizializzare il max al valore del primo elemento
7/21/2019 Lucidi informatica base
160/261
319
Ricerca del massimo: Esempio (1/2)
flo tmax ; /* valore del massimo */intposmax ; /* posizione del max */
...max = r[0] ;posmax = 0 ;
for( i=1 ; imax ){
max = r[i] ;posmax = i ;
}}
320
Ricerca del massimo: Esempio (2/2)
printf("Il max vale %f e si ", max) ;printf("trova in posiz. %d\n", posmax) ;
7/21/2019 Lucidi informatica base
161/261
321
Esempi
Verificare che tutti i dati inseriti dallutente siano positivi Determinare se una sequenza di dati inseriti dallutente
crescente Due numeri non sono primi tra loro se hanno almeno un
divisore comune- esiste almeno un numero che sia divisore dei due numeri dati
Un poligono regolare ha tutti i lati di lunghezza uguale- ogni coppia di lati consecutivi ha uguale lunghezza
322
Esempio 1
Verificare che tutti i dati inseriti dallutente siano positivi
int
positivi ;...positivi = 1 ;i = 0 ;while
( i
7/21/2019 Lucidi informatica base
162/261
323
Esempio 2
Determinare se una sequenza di dati inseriti dallutente crescente
intcrescente ;...crescente = 1 ;precedente = INT_MIN ;i = 0 ;while( i
7/21/2019 Lucidi informatica base
163/261
325
Esempio 4
Un poligono regolare ha tutti i lati di lunghezza uguale
int
rego ;...rego = 1 ;precedente = INT_MIN ;i = 0 ;while( i
7/21/2019 Lucidi informatica base
164/261
327
Sottoprogrammi
Un programma realistico pu consistere di migliaia diistruzioni
Sebbene fattibile, una soluzione monolitica delproblema:- Non molto produttiva:
Riuso del codice? Comprensione del codice?
- Non intuitiva: Tendenza ad organizzare in modo strutturato Struttura gerarchica a partire dal problema complesso fino a
sottoproblemi sempre pi semplici
Approccio top-down
328
Approccio top-down
Decomposizione del problema in sottoproblemi pisemplici
Ripetibile su pi livelli
Sottoproblemi terminali = Risolvibili in modo semplice
7/21/2019 Lucidi informatica base
165/261
329
Approccio top-down (Cont.)
Esempio: Pulizia di una casa
Toglipolvere
Lava Lucida
Puliziabagno
Toglipolvere
Lava Lucida
Puliziacucina
Toglipolvere
Lava Lucida
Puliziacamera
Puliziacasa
330
Approccio top-down (Cont.)
I linguaggi di programmazione permettono di suddividerele operazioni in modo simile tramite sottoprogrammi- Detti anche funzionio procedure
La gerarchia delle operazioni si traduce in una gerarchiadi sottoprogrammi
main() una funzione!
7/21/2019 Lucidi informatica base
166/261
331
Funzioni e procedure
Procedure:- Sottoprogrammi che NON ritornano un risultato
Funzioni:- Sottoprogrammi che ritornano un risultato (di qualche tipo
primitivo o non)
In generale, procedure e funzioni hanno dei parametri(o argomenti)- Vista funzionale:
fparametri risultato
332
Funzioni e procedure in C
Nel C K&R:-
Esistono solo funzioni (tutto ritorna un valore)- Si pu ignorare il valore ritornato dalle funzioni
Dal C89 (ANSI) in poi:- Funzioni il cui valore di ritorno deve essere ignorato (void)- Funzioni void(procedure
7/21/2019 Lucidi informatica base
167/261
333
Definizione di una funzione
Stabilisce un nome per un insieme di operazioni
Sintassi: (){
}
- Se la funzione non ha un risultato, deve essere
void-
Per ritornare il controllo alla funzione chiamante, nelle deve comparire una istruzione return ; se nonvoid
return; sevoid
334
Definizione di una funzione (Cont.)
Tutte le funzioni sono definite allo stesso livello delmain()
- NON si pu definire una funzione dentro unaltra
main() una funzione!- Tipo del valore di ritorno: int- Parametri: Vedremo pi avanti!
7/21/2019 Lucidi informatica base
168/261
335
Prototipi
Cos come per le variabili, buona pratica dichiarareallinizio del programma le funzioni prima del loro uso(prototipi)
Sintassi:- Come per la definizione, ma si omette il contenuto (istruzioni)
della funzione
336
Prototipi: Esempio
#include
int func1(int a);int func2(float b);...
main (){
}
int func1(int a){}
int func2(float b){}
7/21/2019 Lucidi informatica base
169/261
337
Funzioni e parametri
Parametri e risultato sono sempre associati ad un tipo
Esempio:float media(int a, int b)
I tipi di parametri e risultato devono essere rispettatiquando la funzione viene utilizzata!
Esempio:float x; int a,b;
x = media(a, b);
media()int a
int bfloat
338
Utilizzo di una funzione
Deve rispettare linterfaccia della definizione
Utilizzata come una normale istruzione = ();
Pu essere usata ovunque- Una funzione pu anche invocare se stessa