Estratto del documento

(Vero/falso): non esistono in linguaggio C (a meno di includere alcune librerie)

Valori booleani

Valori booleani. Problema della rappresentazione: vengono sostituiti da numeri interi sotto la convenzione: zero codifica falso; qualunque valore diverso da 0 codifica vero.

Traduzione di un programma C in una sequenza numerica eseguibile da un processore, dove tutto é descritto come bit: 1, 0.

Definizione del linguaggio attraverso regole generali.

Introduzione al linguaggio C

Tipi

Il C, come qualsiasi altro linguaggio, rappresenta dati secondo tipi. Ogni valore ha un tipo. É caratterizzato da: insieme dei valori che rappresenta; insieme delle operazioni che si possono eseguire sui suoi valori.

Tipi nel linguaggio C: Char: approssima caratteri (256 caratteri del codice ASCII). Int: approssima numeri interi (Z). Con o senza segno (0 o numeri positivi).

# (numero) di byte: variabile a seconda del calcolatore. Es. interi con segno su 4 byte = 32 bit, cifra binaria che vale 1 o 0.

Char & ↳ 1 bit può assumere due valori. Numeri interi → [-231%231-1] 232. É il tipo più piccolo usato e nella maggioranza dei casi è usato per identificare simboli di particolari codifiche, caratteri alfabetici, punteggiatura, caratteri speciali.

Float: approssimano numeri razionali (Q) in formato floating point (virgola mobile).

Double: approssimano numeri razionali in formato floating point con precisione doppia, uso il doppio del numero di bit, 64 invece di 32, rispetto al float.

Void: tipo nullo, quando la sintassi chiede di specificare un dato che non esiste realmente.

Indirizzo a partire dal quale sono memorizzati i dati. Nome della funzione #dati. int calcola Max (int*v, int size); modo in cui si passa un insieme di dati. Tipo del valore restituito. void stampa (int*v, int size). Quando ho una funzione che non deve restituire un numero.

Variabile

Variabile: locazione di memoria che contiene un valore tipo che può cambiare nel corso della computazione, il tipo é invariante.

Può essere associata ad un nome, che permette di riferirsi alla variabile senza doverne specificare l’indirizzo fisico di memoria.

Nome: é una sequenza arbitraria di caratteri alfabetici e numerici: il primo carattere non può essere un numero. La sequenza ha una lunghezza arbitraria, ma il compilatore non distingue tra nomi che non differiscono sui primi 32 caratteri.

Variabile: ente intrinseco dotato di una propria identità che le deriva dall’unicità delle locazioni di memoria.

Riferimento a variabile: ad una variabile é possibile fare riferimento in modi diversi, tra i quali il più semplice e diretto é il nome.

Il nome viene associato alla variabile per il tramite di una dichiarazione, che ne specifica il tipo e ne riserva lo spazio di memoria.

int A; dichiara una variabile di nome A e di tipo int.

Variabile array

Variabile array. É un insieme di variabili dello stesso tipo che possono essere referenziate attraverso un nome collettivo e un indice numerico che le identifica.

int A[10]; dichiara un Array di 10 variabili di tipo int il cui nome collettivo è A.

A[0]: riferimento alla prima variabile dell’Array. A[9]: riferimento all’ultima variabile dell’Array.

Denotano l’offset della particolare locazione dall’inizio dell’Array. L Nome Array. Indirizzo di partenza dell’Array.

Indirizzi espressi in byte: intero = 4 byte.

A[0] si trova a partire dall’indirizzo A+0. A[1] si trova a partire dall’indirizzo A+1x4 byte. A[2] si trova a partire dall’indirizzo A+2x4bute.

Costante

Costante. É un valore, di un qualche tipo, che non cambia nel corso della computazione. É rappresentata in modo diverso a seconda del tipo:

  • Int: 1, 7, 31... numeri interi.
  • Float: 125.7F, numeri con la virgola e la ‘F’ finale.
  • Double: 125.7, numeri con la virgola.

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 TRUE con 1.

#define FALSO 0. L Trova e sostituisci.

int a; //dichiara una variabile di tipo int e nome a. a=10; //assegna ad a il valore 10. L Riferimento alla variabile a attraverso il suo nome.

// commento. /* commento su più righe */

Espressioni e operatori

Espressioni e operatori. Un’espressione è una combinazione di variabili e costanti attraverso operatori. È caratterizzato da: valore restituito; side effects prodotti sulle variabili, ciò che permette di realizzare le computazioni.

a=10; un’espressione seguita da ; è un’istruzione. É un’espressione che restituisce il valore 10 e che, come side effects, assegna tale valore alla variabile a.

Gli operatori sono classificati per tipo di operazione.

Operatori aritmetici: +, -, * (prodotto), / (divisione), % (modulo). Il % restituisce il resto della divisione intera. a%2 é un’espressione che restituisce 0 se il valore della variabile a é pari, 1 se é dispari.

Operatori relazionali: <, >, <=, >=, == (uguaglianza), ! (diverso).

Dichiarazione di una variabile: int a, b; ... a>b é un’espressione che restituisce 0 se il valore di a non è maggior di b, mentre restituisce un valore diverso da 0, di solito 1, in caso contrario. (5>4)+1 restituisce 2. a=10+4.

Operatori logici: && (congiunzione), ! (negazione), || (disgiunzione). espr1 && espr2 –> restituisce vero se entrambe le espressioni sono vere, sennò falso. espr1 || espr2 –> restituisce vero se almeno una delle due espressioni é vera. !espr —> restituisce vero se espr é falsa.

int a,b; a=10; b=(a==10); //assegna 1 a b. b=!(a==10); //assegna 0 a b.

Operatori di incremento e decremento: ++, - -. Incrementano e decrementano di 1 il valore della variabile alla quale sono applicate.

Operatori di assegnamento: =.

Istruzioni

Istruzioni. Servono a dirigere il flusso dell’esecuzione. I dati sono elaborati attraverso side effects prodotti dal calcolo delle espressioni e il ruolo delle istruzioni é quello di determinare l’ordine con cui le espressioni sono eseguite.

Il fatto che il significato risieda nel controllo del flusso fa sì che diventi conveniente descriverle usando i flow charts, diagrammi di flusso.

Evidenziano in maniera intuitiva il modo con cui le diverse istruzioni sequenzializzano l’esecuzione delle espressioni.

Espressione seguita da ;. L’esecuzione consiste nel calcolare l’espressione, produrre side effects e passare il controllo all’istruzione successiva.

Diagramma di flusso: rappresentazione in flow-charts di istruzioni elementari del C.

Sequenza: la ripetizione della composizione in sequenza permette di avere un’istruzione composta da un numero arbitrario di istruzioni.

int a, b; 7 ;=a. a=7; b=14; b ;14 l=.

Compound: istruzione entro parentesi graffe. Consiste nell’esecuzione dell’istruzione che sta entro la parentesi e poi passare all’istruzione successiva.

Rilevanti rispetto alle istruzioni condizionali e di iterazione.

- -1- - - - -int a, b; , al verificarsi di una qualche condizione sui valori delle variabili del programma. 1 7 ; l=al l{ a=7; ' l Esistono tre diverse istruzioni di iterazione:' lb=14; ' lb for' ; ;14=;} while1- -- - --e-- do-while.

Condizionali

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.

if. int a, b; ( )→ valore FALSO pari 0aba >...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- -- _,{ 1Il fatto che il significato risieda nel controllo del flusso fa sì che diventi conveniente ; i10=a1 I1 Ia=10; descriverle usando i flow charts (diagrammi di flusso) i ' viene restituito→,bb=20; La i ;20 i=i :Evidenziano in maniera intuitiva il modo } i. -_ --;_.

✓ int a,b; Espressione seguita da ; ... FALSOba > { L’esecuzione consiste nel calcolare l’espressione, produrre if (a>b) side effects e passare il controllo all’istruzione successiva VEROa=10, L restituisce bsolofalso-se e10 ;a =b=20; :Diagramma di flusso: rappresentazione in flow-charts di istruzioni elementari del c falsasiasiasiasiaeseguita chechemab vera;20=tint a; f- ;7aa=7.

if-else: permette di avere due corpi alternativi, eseguiti a seconda che la guardia restituisca vero o falso.

Istruzioni int a, b; ... int a, b; 7 ;=a FALSOif (a>b) ba > ta=7; a=10; -- - - - ,/ vb=14; VEROb ;14 l= else 1 20a ;=✓ ll;noa -- !{ a=20;v ✓| 1 b 30 ;=i |b=30; ! ' --- --} i.

Iterazione

Iterazione (LOOP): permettono di eseguire ripetutamente un corpo di istruzioni fino al verificarsi di una qualche condizione sui valori delle variabili del programma.

Esistono tre diverse istruzioni di iterazione: for, while, do-while.

Do-while: stessa sintassi del while con la differenza che l’espressione di guardia è in coda al corpo di istruzioni.

For: un corpo di istruzioni é eseguito ripetutamente sotto il controllo di una guardia costituita da tre espressioni:

  • Inizializzazione.
  • Guardia (condizione).
  • Incremento.

Calcolare la somma dei primi 9 numeri interi a partire da 1.

int count; int sum; sum=0; for (count=1; count<10; count++) → sum=sum+count;

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

sum o- É possibile il caso in cui l’espressione 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 sumtcountsum -_ corpo courittt;~ successiva all' iscrizione passa.

Do-while: int count, sum; Counter ;count=1; SUMÌO. ;sum=0; do { - -- - , sum=sum+count; sumtcount ;sumi __ |' l✓ count=count+1; ' CounterCounter |; ! i } while (count<10); -j ---- -- countcrofaso VERO. Il corpo di istruzioni é eseguito almeno una volta ✓.

For si usa quando è noto il numero di interazioni da eseguire. While quando non é noto, infatti si parafrasa come “ripeti il ciclo fintantoché resta vera la condizione C”. Do-while quando siamo sicuri che il corpo debba essere eseguito almeno una volta.

While: un corpo di istruzioni é eseguito ripetutamente fintanto che un’espressione di guardia restituisce un valore vero.

int count, sum; SUMÌO count=1; ;✓ sum=0; FALSO while (count<10) { cantaro) sum=sum+count; VERO count=count+1; 1- - -- - - -- -- l✓ } ' isumtcount;sum -, 1ÉounttiI Court i-_ ,| !1- -- - - .-v.

Il corpo di istruzioni potrebbe non essere mai eseguito.

Funzioni e programma C

Scrittura di un programma C che calcola il fattoriale di un intero, lo scriviamo su un file con estensione .c.

int: tipo del valore restituito dalla funzione. 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 input e output del linguaggio C.

#include <stdio.h>. .h file di intestazione: nella libreria standard si trova la dichiarazione delle costanti delle funzioni ecc.

“‰d” sequenza di caratteri che indica il tipo di dato da acquistare (‰d int, ‰f, float). &N indirizzo a partire dal quale deve essere memorizzato il dato.

File sorgente .c, definizione delle funzioni.

int main ( ) { int N; // N contiene il valore di cui vogliamo calcolare il fattoriale. int count; int face; N=10; Scanf (“‰d”, &N); fact=1; for (count=2; count<=N; count++) fact=fact*count; printf (“fattoriale=‰”, fact); return 0; }

printf: stampa a video. “fattoriale=‰” è una stringa: sequenza di caratteri. ‰d é un segnaposto che nella stampa sarà sostituito dal valore di fact.

Istruzione che restituisce alla funzione chiamante, quella che invoca main, il controllo e un valore.

Potrebbero esserci dei parametri. void myFunction ( ); {... if (...)} return; opzionale. return; //restituisce il controllo alla funzione chiamante. int main ( ){ ... myFunction ( ); //invoca la funzione my Function ...}

Trasferisce il controllo a quella funzione.

int myFunction2 ( ){ return100; }. Espressione che restituisce un valore di tipo int.

int calcolaMax ( ) {... Riferimento a variabile int max; ... return max;}

int main ( ) { int m; ... L’invocazione di una funzione é un’espressione. Assegna alla variabile m il m=calcolaMax ( ); compilatore da errore valore restituito dalla ... funzione calcolaMax }

Se non mette nessun ritorno il compilatore dà errore.

Rappresentazione dei dati

Esistono due tipi di dati che occorre rappresentare nella codifica di un programma: i tipi che codificano testo e quelli che codificano valori numerici.

In C esistono tre diversi tipi dedicati a rappresentare valori numerici: int, float, double. I caratteri sono rappresentati con il tipo char, che poi é esso stesso codificato nella forma di un numero.

Numeri

  • Un numero é un ente dotato di un suo significato intrinseco, del quale è possibile dare rappresentazioni diverse che variano per: posizionalitá della codifica, il valore che una cifra assume dipende dalla posizione che occupa.
  • Base di numerazione.
  • #cifre della rappresentazione.
  • Codifica del segno.
  • Rappresentazione di parti frazionarie e valori razionali.

Rappresentazione dei dati = codifica posizionale. Il peso di ciascuna cifra dipende dalla posizione che essa occupa.

2,743--7.10=+4.10^+3 10° 1010. .È " Sviluppo polinomiale (determina il B][ an=i "= 1010an oraan =ao2 Be valore codificato)- , ,- ., . ,. n o= +0000 Most significant Least significant 1010 t/digit digit Base di rappresentazione t0000 //1010.

Rappresentazione sul calcolatore: BIG ENDIAN/LITTLE ENDIAN. Dal byte più significativo a quello meno significativo.

Base di numerazione. 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 implementati nell’unitá aritmetico logica ↳.

Algoritmi di conversione della base di rappresentazione

Algoritmi di conversione della base di rappresentazione. Si possono fare i calcoli nella base di partenza e nella base di arrivo:

  • Sviluppo polinomiale nella base di partenza.
  • Conversione di coefficienti e potenze nella base di arrivo.
  • Svolgere somme e prodotti nella base di arrivo.

Base 2 Base 10. EI 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 ] 1001100100 == yo,,

Base 10 Base 2. [ [] -102+2.10^+5.10%0=[1-10.10+2.10+5]1 =125 =, ,oo Posizionalitá della codifica: il valore che una cifra assume dipende dalla posizione che [0001.10101010+0010.10101-0101] = occupa = ,

1 bit numeri {0, 1}. 2 bit numeri {0, 1, 2, 3} 22 ☒. 3 bit numeri {0, 1,..., 7} } 12☒ 0001T. 4 bit numeri {0, 1,..., 15} 24 ☒ 0001.

001 0. [ ][1100100+10100+0101] 1111101=.

1100100. Base 16 {0, 1,..., 9, A, B,..., F}. Gli indirizzi di memoria si esprimono solitamente in base 16. [[ ] ]ABDF =g, 2...- 16 bit ↳ 4 cifre 16 cifre binarie esadecimali.

Parti frazionarie

Parti frazionarie. Sono numeri razionali inferiori all’unitá.

Algoritmo che impiega l’aritmetica della base di partenza. Base 10 Base 2. Da Algoritmo di conversione della base di rappresentazione che impiega l’aritmetica della base di arrivo:

  • Sviluppo polinomiale nella base di partenza.
  • Conversione di coefficienti e potenze nella base di arrivo.
  • Operazioni nella base di arrivo.

-2%091<+1[[ "] "" "1- =AN -22 aot jak aotAN ando Ak -2= -= =1 .2- 1. Sviluppo polinomiale nella base di partenza. .. . .. ,1<=0.

Resto della divisione intera A/2. È É un numero pari. 3. Operazioni nella base di arrivo "Artu2t 2ao= '. 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 2QO.

Iteriamo il procedimento: 10100111.00000000: iÈ 0.10110[È "" """/ 00009kHzA aktz -an2 -2+ 2 =p= a +- =e.,< .+ ,1<=0 1<=01<=1 i01110 - Non é detto che una parte 1010 .01000[ frazionaria rappresentata su un " A :37 QUOZIENTE22- aktz= ar t - 0000-1<=0 numero finito di cifre in base 10100002=7/2/A 1010 abbia una rappresentazione finita)( aoRESTO 1: 1100 in base 2101000100.

Questo procedimento identifica un algoritmo chiamato algoritmo delle divisioni successive che termina quando il quoziente della divisione é 0.

Rappresentazione dei dati. 000 [ ][ ] 1111101125 - ,» 1010 é contenuto in 0111? No, perché la cifra significativa é maggiore. 2272.

Il numero é periodico. 1000[ ][ ] 1111101125 - ,» 1010 é contenuto in 0111? No, perché la cifra significativa é maggiore. 2272.

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