Estratto del documento

(vero/falso): non esistono in linguaggio c (a meno di includere alcune librerie)

Valori booleani

Problema della rappresentazione: Vengono sostituiti da numeri interi sotto la convenzione:

Traduzione di un programma c in una sequenza numerica Zero codifica falso

eseguibile da un processore (dove tutto é descritto come bit: Qualunque valore diverso da 0 codifica vero

1, 0)

Definizione del linguaggio attraverso regole generali VARIABILE

Locazione di memoria che contiene un valore tipo che

Il c, come qualsiasi altro linguaggio, rappresenta dati secondo tipi può cambiare nel corso della computazione (il tipo é

invariante)

TIPI Può essere associata ad un che permette di

nome,

Ogni valore ha un tipo. É caratterizzato da: riferirsi alla variabile senza doverne specificare

Insieme dei valori che rappresenta l’indirizzo fisico di memoria

Insieme delle operazioni che si possono eseguire sui suoi valori

Tipi nel linguaggio c:

approssima caratteri (256 caratteri del codice ASCII)

Char: NOME: é una sequenza arbitraria di caratteri

approssima numeri interi (Z). Con o senza segno (0 o numeri

Int: alfabetici e numerici:

positivi) Il primo carattere non può essere un numero

Introduzione al linguaggio c La sequenza ha una lunghezza arbitraria, ma il

# (numero) di byte: variabile a seconda del calcolatore compilatore non distingue tra nomi che non

es. interi con segno su 4 byte=32 bit (cifra binaria che vale 1 o 0) differiscono sui primi 32 caratteri

Char

& ↳ 1 bit può

[-23%23^-1] 232 É il tipo più piccolo usato e nella

numeri interi → assumere due maggioranza dei casi è usato per

valori identificare simboli di particolari Variabile: ente intrinseco dotato di una propria identità

approssimano numeri razionali (Q) in formato floating point

Float: codifiche (caratteri alfabetici, che le deriva dall’unicità delle locazioni di memoria

(virgola mobile) punteggiatura, caratteri speciali.

approssimano numeri razionali in formato floating point

Double: Usato per dichiarare variabili che Riferimento a variabile: ad una variabile é possibile fare

con precisione doppia (uso il doppio del numero di bit (64, invece possono contenere un singolo riferimento in modi diversi, tra i quali il più semplice e

di 32) rispetto al float carattere (lettera, cifra, simbolo) diretto é il nome

tipo nullo, quando la sintassi chiede di specificare un dato che

Void:

non esiste realmente Il nome viene associato alla variabile per il tramite di

Indirizzo a partire dal quale sono memorizzati i dati una dichiarazione, che ne specifica il tipo e ne riserva

Nome della funzione #dati lo spazio di memoria

int calcola Max (int*v, int size);

- int A; Dichiara una variabile di nome A e di

Modo in cui si passa un

insieme di dati

Tipo del valore restituito tipo int

void stampa (int*v, int size)

Quando ho una funzione che non deve

restituire un numero

Variabile Array ESPRESSIONI E OPERATORI

É un insieme di variabili dello stesso tipo che possono Un’espressione è una combinazione di variabili e costanti attraverso operatori. È

essere referenziate attraverso un nome collettivo e un caratterizzato da:

indice numerico che le identifica Valore restituito

Side effects prodotti sulle variabili: ciò che permette di realizzare le computazioni

Dichiara un Array di 10 variabili di

int A[10]; a=10; Un’espressione seguita da ; è un’istruzione

tipo int il cui nome collettivo è A Denotano l’offset della É un’espressione che restituisce il valore 10 e che,

A[0] : riferimento alla prima variabile dell’Array I particolare locazione come side effects, assegna tale valore alla variabile a

A[9] : riferimento all’ultima variabile dell’Array dall’inizio dell’Array

L Nome Array Gli operatori sono classificati per tipo di operazione:

Indirizzo di partenza dell’Array Operatori aritmetici: +, -, * (prodotto), / (divisione), % (modulo).

Indirizzi espressi in byte: intero=4 byte [Il % restituisce il resto della divisione intera

a%2 é un’espressione che restituisce 0 se il valore della variabile a é pari, 1 se é dispari]

A[0] si trova a partire dall’indirizzo A+0 Operatori relazionali: <, >, <=, >=, == (uguaglianza), ! (diverso)

A[1] si trova a partire dall’indirizzo A+1x4 byte

A[2] si trova a partire dall’indirizzo A+2x4bute

COSTANTE Dichiarazione di una variabile

É un valore (di un qualche tipo) che non cambia nel int a, b;

corso della computazione. É rappresentata in modo ...

diverso a seconda del tipo: a>b é un’espressione che restituisce 0 se il valore di a non è maggior di b, mentre restituisce un valore diverso da 0

int: 1, 7, 31... (numeri interi) (di solito 1) in caso contrario

float: 125.7F (numeri con la virgola e la ‘F’ finale) (5>4)+1 restituisce 2

double: 125.7 (numeri con la virgola) a=10+4

Direttiva che definisce una costante

#define TRUE 1 É un’espressione che assegna il valore restituito dall’espressione 10+4 alla variabile di nome a

pari a 1 (sostituisce tutte le costanti Operatori logici: && (congiunzione), ! (negazione), || (disgiunzione)

TRUE con 1) espr1 && espr2–>Restituisce vero se entrambe le espressioni sono vere, sennò falso

#define FALSO 0 espr1 || espr2–> Restituisce vero se almeno una delle due espressioni é vera

L Trova e sostituisci !espr—> Restituisce vero se espr é falsa

int a; //dichiara una variabile di tipo int e nome a int a,b;

a=10; //assegna ad a il valore 10; a=10;

L Riferimento alla variabile a attraverso il suo b=(a==10); //assegna 1 a b

nome b=!(a==10); //assegna 0 a b

// commento Operatori di incremento e decremento: ++, - -

/* commento su più righe Incrementano e decrementano di 1 il valore della variabile alla quale sono applicate

*/ Operatori di assegnamento: =

if

ISTRUZIONI int a, b;

Servono a dirigere il flusso dell’esecuzione. I dati sono elaborati attraverso side effects ( )

→ valore

FALSO pari 0

a

b

a >

...

prodotti dal calcolo delle espressioni e il ruolo delle istruzioni é quello di determinare (

if (a>b): )

=/

valore

l’ordine con cui le espressioni sono eseguite. VERITA o

- -

- _

,

{ 1

Il fatto che il significato risieda nel controllo del flusso fa si che diventi conveniente ; i

10

=

a

1 I

1 I

a=10;

descriverle usando i flow charts (diagrammi di flusso) i ' viene restituito

,

b

b=20;

La i ;

20 i

=

i :

Evidenziano in maniera intuitiva il modo } i. -

_ -

-

;

_

.

con cui le diverse istruzioni sequenzializzano

l’esecuzione delle espressioni ✓

int a,b;

Espressione seguita da ; ... FALSO

b

a > {

L’esecuzione consiste nel calcolare l’espressione, produrre if (a>b)

side effects e passare il controllo all’istruzione successiva VERO

a=10, L restituisce b

solo

falso

-

se e

10 ;

a =

b=20; :

Diagramma di flusso: rappresentazione in flow-charts di istruzioni elementari del c falsa

sia

sia

sia

sia

eseguita che

che

ma

b vera

;

20

=

t

int a; f- ;

7

a

a=7; permette di avere due corpi alternativi, eseguiti a seconda che la guardia

if-else:

v restituisca vero o falso

Sequenza: la ripetizione della composizione in sequenza permette di avere

un’istruzione composta da un numero arbitrario di istruzioni Istruzioni int a, b;

...

int a, b; 7 ;

=

a FALSO

if (a>b) b

a > t

a=7; a=10; -

- - - - ,

/ v

b=14; VERO

b ;

14 l

= else 1 20

a ;

=

✓ l

l

;

no

a -

- !

{ a=20;

v ✓

| 1

Compound: istruzione entro parentesi graffe b 30 ;

=

i |

b=30; ! '

Consiste nell’esecuzione dell’istruzione che sta entro la parentesi e poi passare -

-

- -

-

} i

all’istruzione successiva

Rilevanti rispetto alle istruzioni condizionali e di iterazione Iterazione (LOOP): permettono di eseguire ripetutamente un corpo di istruzioni fino

- -

1- - - - -

int a, b; , al verificarsi di una qualche condizione sui valori delle variabili del programma.

1 7 ; l

=

a

l l

{ a=7; ' l Esistono tre diverse istruzioni di iterazione:

' l

b=14; ' l

b for

' ; ;

14

=

;

} while

1- -

- - -

-

e

-

- do-while

Condizionali: permettono di decidere direzioni diverse nel flusso di esecuzione in

base al valore restituito da un’espressione e condizionano l’esecuzione di

un’istruzione detta corpo al valore restituito da un’espressione detta guardia stessa sintassi del while con la differenza che l’espressione di guardia è in coda al

do-while:

un corpo di istruzioni é eseguito ripetutamente sotto il controllo di una guardia

for: corpo di istruzioni

costituita da tre espressioni:

1. Inizializzazione int count, sum;

2. Guardia (condizione) Counter ;

count=1; SUMÌO

3. Incremento ;

sum=0;

do { - -

- - ,

Calcolare la somma dei primi 9 numeri interi a partire da 1 sum=sum+count; sumtcount ;

sum

i __ |

' l

count=count+1; ' Counter

Counter |

;

int count; ! i

} while (count<10); -

j -

-

-

- -

-

int sum;

sum=0; countcrofaso

for (count=1; count<10; count++)

→ sum=sum+count; VERO

Il corpo di istruzioni é eseguito almeno una volta ✓

for (count=1, sum=0; count<10; count++) {

LA sum=sum+count;

...

} for si usa quando è noto il numero di interazioni da eseguire

sum o

- É possibile il caso in cui l’espressione while quando non é noto, infatti si parafrasa come “ripeti il ciclo

carità ; di condizione risulta falsa al fintantoché resta vera la condizione C”

Istruzioni

✓ momento della prima esecuzione e il do-while quando siamo sicuri che il corpo debba essere eseguito

FALSO

> country o controllo passa all’istruzione almeno una volta

VERO

✓ successiva senza aver mai eseguito il

sumtcount

sum -

_ corpo

courittt

;

~ successiva

all' iscrizione

passa

un corpo di istruzioni é eseguito ripetutamente fintanto che un’espressione di

while:

guardia restituisce un valore vero count 1

= ,

int count, sum; SUMÌO

count=1; ;

sum=0; FALSO

while (count<10) { cantaro

)

sum=sum+count; VERO

count=count+1; 1- - -

- - - -

- -

- l

} ' i

sumtcount

;

sum -

, 1

Éountti

I Court i

-_ ,

| !

1- -

- - - .

-

v

Il corpo di istruzioni potrebbe non essere mai eseguito

Scrittura di un programma c che calcola in fattoriale di un intero (lo int: tipo del valore restituito dalla funzione

scriviamo su un file con estensione .c) main: funzione che riceve il controllo quando il programma va in

esecuzione: prima funzione a ricevere il controllo e ultima a

restituirlo (ogni programma é organizzato in più funzioni).

Il valore che la funzione main restituisce fa capire se la funzione é

terminata correttamente ed è sempre un valore intero Scanf: funzione che fa parte della

libreria (insieme di funzioni) standard di

#include <stdio.h>

.h file di intestazione: nella libreria input e output del linguaggio c

int main ( ) {

standard si trova la dichiarazione “‰d” sequenza di caratteri che indica il

int N; // N contiene il valore di cui vogliamo calcolare il fattoriale

delle costanti delle funzioni ecc.. tipo di dato da acquistare (‰d int, ‰f,

int count;

File sorgente .c (definizione delle float)

int face;

funzioni) &N indirizzo a partire dal quale deve

N=10; Scanf (“‰d”, &N); essere memorizzato il dato

fact=1;

for (count=2; count<=N; count++)

printf: stampa a video fact=fact*count; Istruzione che restituisce alla

“fattoriale=‰” è una stringa: sequenza di funzione chiamante (quella che

caratteri printf (“fattoriale=‰”, fact); invoca main) il controllo e un

‰d é un segnaposto che nella stampa sarà return 0; valore

sostituito dal valore di fact }

Potrebbero esserci dei parametri

void myFunction ( ); {

... if (...)

} return; (opzionale) return; //restituisce il controllo alla funzione

int main ( ){ chiamante

... Trasferisce il controllo a

myFunction ( ); //invoca la funzione my Function quella funzione

...

}

int myFunction2 ( ){ int calcolaMax ( ) {

... Riferimento a variabile

int max;

return100; ...

} return max;

}

Espressione che restituisce un valore di tipo int int main ( ) {

int m; L’ invocazione di una

...

Se non mette nessun ritorno il funzione é un’espressione

Assegna alla variabile m il m=calcolaMax ( );

compilatore da errore valore restituito dalla ...

funzione calcolaMax }

Esistono due tipi di dati che occorre rappresentare nella codifica di un programma: i tipi Algoritmi di conversione della base di rappresentazione

che codificano testo e quelli che codificano valori numerici Si possono fare i calcoli nella base di partenza e nella base di arrivo:

Algoritmo che impiega l’aritmetica della base di arrivo

In c esistono tre diversi tipi dedicati a rappresentare valori numerici: 1. Sviluppo polinomiale nella base di partenza

int 2. Conversione di coefficienti e potenze nella base di arrivo

float 3. Svolgere somme e prodotti nella base di arrivo

double Base 2 Base 10

E

I caratteri sono rappresentati con il tipo char, che poi é esso stesso codificato nella forma

di un numero. ]

[

[ 1.2°

]

[ +1.25+1.22=64+32+4 ] 100

1100100 =

= yo

,

,

NUMERI Base 10 Base 2

Un numero é un ente dotato di un suo significato intrinseco, del quale è possibile dare

rappresentazioni diverse che variano per: [ [

] -102+2.10^+5.10%0=[1-10.10+2.10+5]

1 =

125 =

, ,o

o

Posizionalitá della codifica: il valore che una cifra assume dipende dalla posizione che [0001.10101010+0010.10101-0101] =

occupa = ,

Base di numerazione si

1 bit numeri {0, 1}

#cifre della rappresentazione 2 bit numeri {0, 1, 2, 3}

22

Codifica del segno 3 bit numeri {0, 1,..., 7}

} 1

2

☒ 0001T

Rappresentazione di parti frazionarie e valori razionali 4 bit numeri {0, 1,..., 15}

24

☒ 0001

Rappresentazione dei dati =

Codifica posizionale 001 0

Il peso di ciascuna cifra dipende dalla posizione che essa occupa [ ]

[1100100+10100+0101] 1111101

= 2

,

743--7.10=+4.10^+3 10° 1010

. .

È " Sviluppo polinomiale (determina il

B

]

[ an

=

i "

= 1010

an ora

an =

ao

2 B

e valore codificato)

- , ,

- .

, . ,

. n o

= +

0000

Most significant Least significant 1010 t

/

digit digit Base di rappresentazione t

0000 /

/

1010

Rappresentazione sul calcolatore: BIG ENDIAN/LITTLE ENDIAN 1100100

Base 16

Dal byte più significativo a quello meno significativo {0, 1,..., 9, A, B,..., F}

Base di numerazione Gli indirizzi di memoria si esprimono solitamente in base 16

Il calcolatore usa la base 2: é la minima base che include cifre diverse (0 e 1) e la minima [

[

base con cui é possibile contare in modo posizionale. Questo semplifica algoritmi ] ]

ABDF =

g

, 2

.

.

.

- 16 bit

implementati nell’unitá aritmetico logica ↳

4 cifre 16 cifre binarie

esadecimali

Parti frazionarie

Algoritmo che impiega l’aritmetica della base di partenza Sono numeri razionali inferiori all’unitá

Base 10 Base 2

Da Algoritmo di conversione della base di rappresentazione che impiega l’aritmetica

della base di arrivo:

-2%091<+1

[

[ "

] "

" "

1- =

AN -2

2 aot jak aot

AN ando Ak -2

= -

= =

1 .

2

- 1. Sviluppo polinomiale nella base di partenza

. .

. . .

. ,

1<=0

Resto della divisione intera A/2 2. Conversione di coefficienti e potenze nella base di arrivo

È É un numero pari 3. Operazioni nella base di arrivo

"

Artu

2

t 2

ao

= '

. 1<=0

Quoziente della divisione intera Base 10 Base 2

b

vale 1 se e solo se A é dispari

ao 10=[7.10-1]

7)

[ [7/10]^0=[0111/1010] 2=[0-10110]

a. =

é il resto della divisione intera A/2 .io 2

QO

Iteriamo il procedimento: 1010

0111.00000000

: i

È 0.10110

[

È "

" "

"

"

/ 0000

9kHz

A aktz -

an

2 -2

+ 2 =p

= a +

- =

e.

,< .

+ ,

1<=0 1<=0

1<=1 i

01110 - Non é detto che una parte

1010 .

01000

[ frazionaria rappresentata su un

" A :3

7 QUOZIENTE

2

2- aktz

= ar t - 0000

-

1<=0 numero finito di cifre in base 10

10000

2=7/2

/

A 1010 abbia una rappresentazione finita

)

( ao

RESTO 1

: 1100 in base 2

1010

00100

Questo procedimento identifica un algoritmo chiamato algoritmo delle divisioni 000

Rappresentazione dei dati

successive che termina quando il quoziente della divisione é 0 Il numero é periodico

1000

[ ]

[ ] 1111101

125 - ,

» 1010 é contenuto in 0111? No, perché la cifra significativa é maggiore.

2

2

72

Anteprima
Vedrai una selezione di 17 pagine su 80
Teoria Informatica - Linguaggio C Pag. 1 Teoria Informatica - Linguaggio C Pag. 2
Anteprima di 17 pagg. su 80.
Scarica il documento per vederlo tutto.
Teoria Informatica - Linguaggio C Pag. 6
Anteprima di 17 pagg. su 80.
Scarica il documento per vederlo tutto.
Teoria Informatica - Linguaggio C Pag. 11
Anteprima di 17 pagg. su 80.
Scarica il documento per vederlo tutto.
Teoria Informatica - Linguaggio C Pag. 16
Anteprima di 17 pagg. su 80.
Scarica il documento per vederlo tutto.
Teoria Informatica - Linguaggio C Pag. 21
Anteprima di 17 pagg. su 80.
Scarica il documento per vederlo tutto.
Teoria Informatica - Linguaggio C Pag. 26
Anteprima di 17 pagg. su 80.
Scarica il documento per vederlo tutto.
Teoria Informatica - Linguaggio C Pag. 31
Anteprima di 17 pagg. su 80.
Scarica il documento per vederlo tutto.
Teoria Informatica - Linguaggio C Pag. 36
Anteprima di 17 pagg. su 80.
Scarica il documento per vederlo tutto.
Teoria Informatica - Linguaggio C Pag. 41
Anteprima di 17 pagg. su 80.
Scarica il documento per vederlo tutto.
Teoria Informatica - Linguaggio C Pag. 46
Anteprima di 17 pagg. su 80.
Scarica il documento per vederlo tutto.
Teoria Informatica - Linguaggio C Pag. 51
Anteprima di 17 pagg. su 80.
Scarica il documento per vederlo tutto.
Teoria Informatica - Linguaggio C Pag. 56
Anteprima di 17 pagg. su 80.
Scarica il documento per vederlo tutto.
Teoria Informatica - Linguaggio C Pag. 61
Anteprima di 17 pagg. su 80.
Scarica il documento per vederlo tutto.
Teoria Informatica - Linguaggio C Pag. 66
Anteprima di 17 pagg. su 80.
Scarica il documento per vederlo tutto.
Teoria Informatica - Linguaggio C Pag. 71
Anteprima di 17 pagg. su 80.
Scarica il documento per vederlo tutto.
Teoria Informatica - Linguaggio C Pag. 76
1 su 80
D/illustrazione/soddisfatti o rimborsati
Acquista con carta o PayPal
Scarica i documenti tutte le volte che vuoi
Dettagli
SSD
Scienze matematiche e informatiche INF/01 Informatica

I contenuti di questa pagina costituiscono rielaborazioni personali del Publisher paoladivi di informazioni apprese con la frequenza delle lezioni di Fondamenti di informatica e studio autonomo di eventuali libri di riferimento in preparazione dell'esame finale o della tesi. Non devono intendersi come materiale ufficiale dell'università Università degli Studi di Firenze o del prof Carnevali Laura.
Appunti correlati Invia appunti e guadagna

Domande e risposte

Hai bisogno di aiuto?
Chiedi alla community