Anteprima
Vedrai una selezione di 8 pagine su 33
Informatica B: guida alla programmazione in C Pag. 1 Informatica B: guida alla programmazione in C Pag. 2
Anteprima di 8 pagg. su 33.
Scarica il documento per vederlo tutto.
Informatica B: guida alla programmazione in C Pag. 6
Anteprima di 8 pagg. su 33.
Scarica il documento per vederlo tutto.
Informatica B: guida alla programmazione in C Pag. 11
Anteprima di 8 pagg. su 33.
Scarica il documento per vederlo tutto.
Informatica B: guida alla programmazione in C Pag. 16
Anteprima di 8 pagg. su 33.
Scarica il documento per vederlo tutto.
Informatica B: guida alla programmazione in C Pag. 21
Anteprima di 8 pagg. su 33.
Scarica il documento per vederlo tutto.
Informatica B: guida alla programmazione in C Pag. 26
Anteprima di 8 pagg. su 33.
Scarica il documento per vederlo tutto.
Informatica B: guida alla programmazione in C Pag. 31
1 su 33
D/illustrazione/soddisfatti o rimborsati
Disdici quando
vuoi
Acquista con carta
o PayPal
Scarica i documenti
tutte le volte che vuoi
Estratto del documento

(MCD)

HOMEWORK

Scrivere un programma che stampa la tabella pitagorica. Modificarlo per stampare solo la parte triangolare

alta, solo la parte triangolare bassa, oppure solo la diagonale 14

FOR

For(init_instr; expression; loop_instr)

Statement

SINTASSI

È un costrutto iterativo equivalente al while

− for è una keyword

− init_instr istruzione di inizializzazione

− expression espressione booleana

− loop_instr istruzione di loop

− statetment corpo del ciclo

ESECUZIONE

1. esegue init_instr

2. valuta expression

3. se vera, esegue statement, se falsa, termina il loop

4. al termine di statement esegue loop_instr

5. valuta expression 15

BREAK E CONTINUE (DA NON USARE ALL’ESAME)

Break

- termina l’esecuzione dei costrutti iterativi while, do-while, for e switch

Continue

- in un costrutto iterativo passa all’iterazione seguente interrompendo quella corrente

- può essere utilizzato solo nei cicli iterativi

ALTERNATIVE A BREAK E CONTINUE

- alternativa a break: utilizzo con variabili flag (o sentinella) per terminare anticipatamente

l’esecuzione del ciclo

- alternativa a continue: una variabile che assume un valore 0/1 a seconda che si verifichino o meno

alcune condizioni durante l’esecuzione 16

PRECISAZIONI

NOTA SUGLI IDENTIFICATORI

- Sono unici: non è possibile associare due identificatori diversi alla stessa variabile o lo stesso identificatore a

due variabili diverse

- In un programma, ogni riferimento alla variabile a rimanda alla stessa cella di memoria e non esistono altri

identificatori per quella cella

- Non si possono usare alcune espressioni come identificatori perché fanno riferimento a parole riservate, le

keywords tra cui:

• if, for, switch, while, main, printf, scanf, int, float, etc.

NOTA SULLA DICHIARAZIONE DI V ARIABILI

- Solo le variabili dichiarate possono essere utilizzate

- Il fatto che sia richiesta la dichiarazione delle variabili permette gli editor di riconoscere eventuali typos

- Ogni sequenza di caratteri in un codice di un programma C può essere:

• Un nome di variabile

• Un nome di funzione

• Una keyword

- Se provate ad usare una variabile a senza averla dichiarata, il compilatore risponde:

‘a’ undeclared (first use in this function)

- →Es.

Sintassi per la dichiarazione: nometipo nomevariabile; Int N;

- Le celle di memoria non sono «vuote», ma tipicamente contengono valori non sensati

- La dichiarazione non modifica tali valori iniziali, sarà il primo assegnamento a farlo

COSTANTI

- Dichiarando una costante viene associato stabilmente un valore ad un identificatore

→Es. const float PiGreco = 3.14;

- La differenza dalle variabili non costanti è che il compilatore segnala come errore ogni istruzione di

assegnamento a una costante nella parte eseguibile

- Usare le costanti è utile perché:

• l’identificatore suggerisce il significato di un valore

• permette di parametrizzare i programmi, e riutilizzare il codice al cambiare di circostanze esterne

ABBREVIAZIONI NELL’ASSEGNAMENTO

- Istruzioni della forma: variabile = variabile operatore espressione si possono scrivere come: variabile

operatore = espressione

→ ⟹

ES: b = b + 7; b += 7;

- Incrementare o decrementare una variabile di 1 è molto frequente, quindi c’è una notazione apposita

→ES: ⟹ ⟹

a = a + 1; a++; oppure b = b – 1; b--;

CARATTERI DI CONVERSIONE

- Nella stringaControllo di printf è possibile specificare la formattazione quando viene stampato un valore di

una variabile

→ES: "%5d" dedica 5 caratteri alla stampa del numero intero

→ES: "%.2f" dedica due cifre dopo la virgola per un float 17

COSTRUTTO SWITCH-CASE

SINTASSI

- switch, case, default keywords

- int_expr espressione a valori integral (char o int)

- constant-expr1 numero o carattere

- default istruzione opzionale

NB: constant-expr1 non può contenere una variabile

NB: int_expr può contenere variabili

NB: a differenza di if, while e for:

- int_expr non è un espressione booleana

- Non occorre delimitare gli statement tra {}, anche nel caso contengano più istruzioni

ESECUZIONE

1. Viene valutata int_expr (eventualmente convertita)

2. Si controlla se int_expr è uguale a constant-expr1

3. Se sono uguali eseguo statement1, e in cascata, tutti gli statement dei case seguenti (senza verifiche, incluso lo

statement di default)

4. Altrimenti controllo se expression è uguale a constant-expr2 e così via

5. Eseguo lo statement di default [se presente]

CHE COSA FA?

COME ESEGUIRE UN SOLO CASE

- Per evitare l’esecuzione in cascata alla prima corrispondenza trovata, occorre inserire nei differenti casi la

keyword break 18

ESERCIZIO

Scrivere un programma che opera come una calcolatrice: richiede due operandi ed un operatore + - * / % e restituisce

il risultato a schermo 19

GLI ERRORI COMUNI

GLI ERRORI POSSONO ESSERE DI DUE TIPI:

- Errori di sintassi rilevabili a compile-time

- Errori logici rilevabili a un-time

Gli errori rilevabili compile-time contengono istruzioni che il compilatore non è in grado di risolvere per questo manda

dei segnali di errore. Gli errori a run-time si manifestano durante l'esecuzione e possono causare l'interruzione del

programma o comportamenti inaspettati

Errori frequenti a compile-time

- →

Dimenticare un ; manda l'errore alla riga seguente error: expected ';' before ‘printf’

- →

Variabile non inizializzata error: ‘iniz_nome' undeclared (first use in this function)

- →

Typo? error: ‘prinf' undeclared (first use in this function)

Errori frequenti a run-time

- Dimenticare & nelle variabili della scanf

- Il compilatore non lo rileva! Errore rilevabile a run-time quando il valore viene scritto in una cella con

indirizzo sbagliato

- Confondere l'assegnamento con il confronto

- Sbagliare lo specificatore di formato in una scanf o printf

- Stampare l'indirizzo invece della variabile

- L'istruzione i++ corrisponde all'assegnamento i=i+1 quindi non ha senso i=i++

- Il ; termina un'istruzione e quindi non va messo dopo if, while, for e switch

Acquisizione di caratteri da tastiera

- Le acquisizioni di carattere consecutivi danno problemi, in particolare dopo uno scanf l'invio di conferma

rimane nel buffer di ingresso e viene acquisito dal primo scanf che segue

Soluzioni da mettere dopo il primo scanf:

1) fflush(stdin); pulisce il buffer stdin

2) scanf(“%c”); acquisisce un secondo carattere che viene buttato via

Confronto e assegnamento

- L'operatore di confronto == non va confuso con l'operatore di assegnamento = anche se le loro sintassi sono

simili

Cose da non fare

- Modificare la variabile di loop nel for a mano. La variabile del ciclo for deve essere modificata unicamente

dalla init_instr e dalla loop_instr, altrimenti il codice diventa dei difficile interpretazione ed è facile

commettere errori (piuttosto usare while) 20

TIPI DI DATO

Classificazione sulla base della struttura:

- Tipi semplici, informazione logicamente indivisibile, ad esempio int, char, float

- Tipi strutturati: aggregazione di variabili di tipi semplici

Classificazione sulla base di uno standard:

- built-in, tipi già presenti nel linguaggio base

- User-defined, nuovi tipi creati nei programmi «componendo» variabili di tipo built-in

TIPI SEMPLICI

- char: 1 Byte Qualificatori di tipo (per int e char): Quantificatori di tipo:

- int: 1 parola di memoria - -

signed (codifica con il segno) short (per int)

- float: (spesso 4 Byte) -

- long (per int e double)

unsigned prevede solo valori

- double: (il doppio del float) positivi (meglio evitarlo)

IL TIPO INT

- ℕ

Rappresentano un sottoinsieme di

- Fatti garantiti:  

• spazio (short int) spazio (int) spazio (long int)

• spazio (signed int) = spazio (unsigned int)

- Come faccio a sapere i limiti per un intero?

• #include , e richiamo le costanti INT_MIN, INT_MAX (Quando il valore di int eccede INT_MAX si ha overflow)

I TIPI FLOAT E DOUBLE

- ℝ

Approssimazione di (che è un insieme denso), quindi i valori vengono approssimati per «magnitudine», e

limiti nella precisione della rappresentazione

-

Nella rappresentazione in virgola mobile (floating point) il numero si scrive come due parti separate da “E”:

• mantissa, • esponente (rispetto alla base 10) tali che = 10^e

 

- Fatto garantito: spazio (float ) spazio (double) spazio (long double)

- Su architetture standard un float occupa 4 byte e un double 8 byte con

• accuratezza: 6 decimali per float 15 decimali per double

• valori tra 10–38 e 10+38 per float tra 10–308 e 10+308 per double

- Standard library math.h fornisce funzioni predefinite (sqrt, pow, exp, sin, cos, tan) applicate a valori double

- Operazioni con float ( ) sono le stesse degli int, ma divisione ‘/’ dà risultato reale.

anche a double e long double

Nella rappresentazione di un numero decimale possono esserci errori di approssimazione:

• non sempre: (x / y) * y == x

• per verificare l’uguaglianza tra float o double, definire delle tolleranze:

− if (x == y) ... è meglio

− if (x <= y + .000001 && x >= y - .000001) 21

IL TIPO CHAR

- La codifica ASCII prevede di allocare sempre 1 Byte per rappresentare caratteri

• alfanumerici

• di controllo (istruzioni legate alla visualizzazione)

- C’è una corrispondenza tra i char e 256 numeri interi

- Le operazioni sui char sono le stesse definite su int

• hanno senso gli op. aritmetici (+ - * / %)

• hanno senso gli op. di relazione (== , > , < , etc.)

- unsigned char coprono l’intervallo [0, 255].

- signed char coprono l’intervallo [−128, 127].

- I valori costanti di tipo char nel codice sorgente si

delimitano tra apici singoli ‘ ’

- Gli apici doppi " " vengono utilizzati per delimitare

stringhe, ovvero sequenze di caratteri

RIEPILOGANDO SUI TIPI BUILT-IN

- I tipi integral sono discreti, rappresentano valori numerabili

• sono char ed int con tutti i qualificatori e quantificatori (signed/unsigned char, short/long int,

signed/unsigned int)

- I tipi floating approssimano insiemi densi

• sono float e double, eventualmente con il quantificatore long

- I tipi integral e floating assieme compongono il tipo arithmetic 22

TIPI DI DATO STRUTTURALI

- Permettono di immagazzinare informazione ag

Dettagli
Publisher
A.A. 2024-2025
33 pagine
SSD Scienze matematiche e informatiche INF/01 Informatica

I contenuti di questa pagina costituiscono rielaborazioni personali del Publisher giadamasut di informazioni apprese con la frequenza delle lezioni di Informatica b e studio autonomo di eventuali libri di riferimento in preparazione dell'esame finale o della tesi. Non devono intendersi come materiale ufficiale dell'università Politecnico di Milano o del prof Trovò Francesco.