Lucidi informatica base

download Lucidi informatica base

of 261

Transcript of Lucidi informatica base

  • 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

    PDF

    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