Anteprima
Vedrai una selezione di 5 pagine su 20
Appunti di Programmazione Pag. 1 Appunti di Programmazione Pag. 2
Anteprima di 5 pagg. su 20.
Scarica il documento per vederlo tutto.
Appunti di Programmazione Pag. 6
Anteprima di 5 pagg. su 20.
Scarica il documento per vederlo tutto.
Appunti di Programmazione Pag. 11
Anteprima di 5 pagg. su 20.
Scarica il documento per vederlo tutto.
Appunti di Programmazione Pag. 16
1 su 20
D/illustrazione/soddisfatti o rimborsati
Disdici quando
vuoi
Acquista con carta
o PayPal
Scarica i documenti
tutte le volte che vuoi
Estratto del documento

L Aσ : L → π

Sia l'insieme degli interi macchina il quale dipende appunto dalla⊆I Zmacchina, in quanto il computer è un oggetto finito che non può manipolaretutti i numeri.

{ }=E sia un insieme finito in cui è il valorekK k ,… ,−2 ,−1, 0,1, 2 , … , k ii i iminimo e il valore massimo.k i −1

Possiamo definire una relazione biunivoca tra questi dueρ : I → K , p : K → Ii iinsiemi tale che:−1( ) ( )=ρσ k k se k è un elemento di K i

OPERATORI

 Prefissi: + - fy 2

 Binari: + - yfx 4* / % yfx 3

Esempio:3+5*2

Applico formula delle parentesi complete ovvero ogni costante, letterale haattorno due parentesi e ogni operazione ha due operandi racchiusi tra leparentesi.

(3)+(5)*(2)

((3)+((5)*(2)))

0 4 0 perché tra parentesi→

PROPRIETÁ DI σè una funzione ricorsiva perché il valore della funzione dipende dalle

sue&sigma;sottoparti; trasforma la nostra stringa in qualcosa di più semplice,σl’accorcia.( )1) ( ) ( )=&sigma;&sigma; E E2) &minus;1( )= (K )&sigma; K &rho;3) ( )=&sigma; ( )+E&sigma; E4) (&minus;E )=&minus;&sigma; ( )&sigma; E5) ( ) ( ) ( )=&sigma;&sigma; A &plusmn; B A &plusmn; &sigma; B6) ( )=&sigma; ( ) ( )&sigma; A∗B A ∙ &sigma; B( )A ( ) ( )7) =&sigma; &divide;&sigma;&sigma; A BBDove &egrave; la divisione intera tra interi tale che:2&iquest; :Z &rarr; Z{ a&lfloor; &rfloor; seab>0baa&divide;b= &lceil; &rceil; seab<0b0 se b &ne; 0, a=0IMP. se b=08) ( ) ( )=&sigma; (&sigma; A %B A mod &sigma; B)Dove &egrave; il resto della divisione intera.%Questa operazione assume un senso preciso solo se ; se( ) &gt;0 (&sigma; B &sigma; B)<0dipende, perché non &egrave; standardizzato in C.( )&sigma; BEsempio: [ ]( )( )( ) ( )∗( )⟹ +3+2∗5 &sigma; 3 2 5&iquest; &iquest;&iquest;&sigma;&iquest; &iquest;&iquest;&sigma; [ ] ( )∗(

)¿ + [( )]Σ 3 Σ 2 5[ ]( )*( )¿ 3+Σ 2 5(2)¿( )5¿ ¿3+Σ [ ][ ] ( )¿ 3+Σ 2 ∙ Σ 5[ ]( )¿ 3+2 ∙Σ 5[ ]¿ 3+2 ∙Σ 5¿ 3+2 ∙5=13Analogamente, possiamo estendere queste funzioni a un sottoinsieme di numeri razionali. =∅Sia e consideriamo l'insieme tale che .K K KD⊆Q D D iPossiamo definire una relazione biunivoca tra questi due insiemi tale-1ρ ↓, p ↑che: -1( ) ( )=ρΣ k k se k è un elemento di K D ∈Le costanti con il punto appartengono a : es.K 1.0=1 KD D 1NB: 0.1 non è rappresentabile in C, non ha lo stesso significato di .10Con vediamo inoltre in fenomeno di overloading perché l'operatore /K Dassume il significato di divisione intera se i letterali appartengono a ,K imentre quello di divisione in se appartengono a .KQ DIn presenza sia di variabili int che double le operazioni si

estendonoautomaticamente a , quindi è di tipo double.K DEsempio:{ }∫ , si calcola nell’espressione a parentesi complete;ττ : L→ , double( )( )+ ( )∗( )( )τ 3 2.0 5diventa un double5 →5.0

TIPI DATODavid Ritchie è partito dal linguaggio B di Thompson, che conteneva solo n°interi, e lo ha esteso con i tipi dato per ottenere il linguaggio C.Ogni variabile deve avere un tipo che specifichi la tipologia di dati che dovràcontenere; il tipo di una variabile numerica determina il numero più grande equello più piccolo che la variabile stessa può contenere, determina inoltre sedelle cifre decimali sono ammesse o meno.Il C supporta due tipologie fondamentali di numeri: i numeri interi e quelli avirgola mobile. I valori di un tipo intero sono numeri interi, mentre i valori deitipi a virgola mobile possono avere anche una parte frazionaria. I tipi interipossono a loro volta essere suddivisi in due categorie: interi

con segno (signed) e interi senza segno (unsigned).

Tipi interi signed e unsigned:

Il bit più significativo di un intero di tipo signed (conosciuto come bit di segno) è uguale a 0 se il numero è positivo o uguale a zero. È uguale a 1 se il numero è negativo. Quindi l'intero a 32 bit più grande è: 01111111111111111111111111111111 che corrisponde a 2,147,483,647 (-2^31 - 1).

Un intero senza bit di segno (il bit più significativo viene inteso come parte integrante del numero) viene detto unsigned. Quindi il più grande intero senza segno rappresentato su 32 bit è 4,294,967,296 (-2^32 - 1).

Il tipo int è di solito a 32 bit. Dato che alcuni programmatori lavorano con numeri che sono troppo grandi per essere memorizzati in una variabile int, il C fornisce anche gli interi di tipo long. In certi casi invece potremmo aver bisogno invece di risparmiare la memoria disponibile. In tal caso useremo una variabile

Di tipo short. Per costruire un tipo intero che venga incontro alle nostre necessità, possiamo specificare una variabile come long short, signed o unsigned. Possiamo anche combinare questi specificatori. In realtà, nella pratica solo le combinazioni seguenti generano dei tipi differenti:

  • short int
  • unsigned short int
  • unsigned int
  • long int
  • unsigned long int

Il C99 prevede il tipo _Bool. In questa versione del C una variabile booleana può essere dichiarata scrivendo, ad esempio:

_Bool flag;

_Bool è un tipo di intero (più precisamente un tipo di intero senza segno) e quindi non è altro che una variabile intera camuffata. Tuttavia, a differenza delle variabili intere ordinarie, a una variabile _Bool possono essere assegnati solo i valori 0 o 1. Più genericamente, cercare di memorizzare un valore diverso da zero in una variabile _Bool fa sì che alla variabile venga assegnato il valore 1:

flag = s; /* a flag viene assegnato il valore 1 */

È ammesso (anche se non consigliabile) eseguire dei calcoli aritmetici con le variabili _Bool.

Tipi floating point:

Gli interi non sono appropriati per tutti i tipi di applicazioni. A volte può essere necessario usare variabili in grado di immagazzinare numeri con delle cifre dopo la virgola, oppure numeri che sono eccezionalmente grandi o piccoli. Tali numeri vengono memorizzati nel formato a virgola mobile (chiamato così perché il separatore decimale è “flottante”). Il C fornisce tre tipi floating point, corrispondenti a differenti formati:

  • float = floating point a singola precisione
  • double = floating point a doppia precisione
  • long double = floating point con precisione estesa

Il tipo float è appropriato per i casi in cui la precisione non è un fattore critico (per esempio quando si calcolano temperature con una sola cifra decimale); il tipo double fornisce una precisione maggiore (sufficiente per la maggior parte dei casi).

programmi); il tipo long double, che fornisce la precisione più grande, vieneusato raramente nella pratica.

Lo standard C non specifica quale debba essere la precisione dei tipi float,double e long double dato che computer diversi potrebbero memorizzare inumeri a virgola mobile in modi differenti. I computer più moderni seguono lespecifiche degli standard IEEE Standard 754 (conosciuto come IEC 60559), perquesto motivo useremo questa specifica come esempio.

Lo standard floating point dell'IEEE

Lo standard IEEE 754 sviluppato dall’lnstitute of Electrical and ElectronicsEngineers prevede due formati principali per i numeri a virgola mobile: singolaprecisione (32 bit) e doppia precisione (64 bit). I numeri vengono memorizzatiseguendo una notazione scientifica, dove ogni numero è costituito da tre parti: ilsegno, l'esponente, e la mantissa. Il numero di bit riservato per l'esponentedetermina quanto grandi (e quanto piccoli) possono essere i numeri.

Nei numeri a precisione singola l'esponente è lungo 8 bit mentre la mantissa occupa 23 bit. Ne risulta che i numeri a singola precisione hanno un valore massimo corrispondente all'incirca a 3.4028235 × 10^38, con una precisione di circa 6 cifre decimali. NB: guardare in fondo come rappresentare numeri in IEEE 754. Tipi char: I valori del tipo char possono variare da computer a computer a causa del fatto che le varie macchine possono basarsi su un diverso set di caratteri. Attualmente il set di caratteri più diffuso è quello ASCII (American Standard Code for Information Interchange) un codice a 7 bit capace di rappresentare 128 caratteri diversi. Nello standard ASCII, per esempio, l'intervallo dei codici per i caratteri va da 00000000 fino a 11111111, e questi possono essere pensati come un sottoinsieme di interi da 0 a 127. Esiste infatti una corrispondenza biunivoca: il carattere 'a' ha il valore 97, 'A' ha il valore 65, ' ' ha il

valore 32. 5A una variabile di tipo char può essere assegnato un qualsiasi carattere :

char = ch;
ch = ’a’; /*a minuscola*/
ch = ’A’; /*A maiuscola*/
ch = ’0’; /*zero*/
ch = ’ ‘; /*spazio*/

Osserviamo che le costanti di tipo carattere sono racchiuse da apici singoli e non doppi.

Considerato che il C permette di usare i caratteri come numeri interi non è una sorpresa il fatto che il tipo char sia presente sia nella versione signed sia in quella unsigned. Tipicamente i caratteri di tipo signed hanno valori compresi tra -128 e 127, mentre i caratteri unsigned hanno valori tra 0 e 255.

I char non contengono però ogni tipo di simbolo, come caratteri accentati o alcuni caratteri speciali.

NB: è bene sottolineare che gli intervalli indicati nella tabella non sono stabiliti dallo standard C e possono quindi variare da un compilatore a un altro. Gli intervalli rappresentati fanno riferimento a una macchina a 32 bit.

Definizione di

La direttiva #define può essere usata per creare una macro che potrebbe essere usata come un tipo Booleano:

es. #define Bool int

Dettagli
Publisher
A.A. 2020-2021
20 pagine
SSD Scienze matematiche e informatiche INF/01 Informatica

I contenuti di questa pagina costituiscono rielaborazioni personali del Publisher Andr3_v1 di informazioni apprese con la frequenza delle lezioni di Programmazione A 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 Parma o del prof Bergenti Federico.