Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
vuoi
o PayPal
tutte le volte che vuoi
Tipi di dati strutturati
I tipi di dati strutturati possono essere omogenei o eterogenei, cioè possono contenere variabili dello stesso tipo o di tipo diverso.
Un tipo di dato strutturato omogeneo è l'array, che rappresenta una sequenza di variabili omogenee. Gli array hanno un ordinamento con indici, che indicano la posizione delle celle dell'array.
La dichiarazione di un array avviene nel seguente modo: tipo nomeArray[dimensione];
. Ad esempio, int vet[8];
dichiara un array di interi di dimensione 8.
Un array occupa una memoria dedicata, con un numero di celle contigue dichiarate. Questo permette al programma di impiegare meno tempo a trovare le celle del vettore, in quanto sono vicine tra loro. Per questo motivo, la dimensione dell'array viene dichiarata prima della compilazione.
L'indirizzo della prima cella dell'array può essere rappresentato come vet == &vet[0];
. Senza niente, vet
indica l'indirizzo di vet[0]
.
Spesso si ricorre alla definizione di costanti utilizzando #define
, dichiarando un nome e un valore numerico. Questo permette di rendere il programma più flessibile e leggibile. A differenza di const
, #define
può essere utilizzato solo per interi.
tappo.strcmp (s1, s2)
2. Funzione: restituisce:
0 - uguali
- se sono<0 s1 precede s2
- se (in ordine alfabetico)>0 s2 precede s1
- se (in ordine alfabetico)
Copiare stringa in altra stringa
1. Carattere per carattere
strcpy (s1, s2); s2 in s1 incluso tappo.
2. —> copia il contenuto di carattere
Accodare due stringhe (creare una stringa con entrambe le stringhe)
1. Carattere per carattere
strcut (s1, s2); s2 alla stringa s1 incluso tappo alla fine.
2. (aggiunge il carattere solo di tutto).
Se scrivo:
char stringa [] = “ciao”; dimensione automaticamente 4
// la della stringa è
if (flag) se flag è “vero”, DIVERSO DA 0.
//mi chiedo cioè se è
ENUM STRUCT (altri tipi STRUTTURATI)
e ENUM (tipo enumerativo): rendono il codice leggibile.
non hanno troppa utilità, però
un’alternativa alla dichiarazione di variabili intere.
È enum {var1, var2, ... , varN };
valori da 0 a N-1 alle variabili in ordine
Assegnaenum {var1 = 1, var2, ...
Parte da 1
Oppure assegno i valori ad ogni variabile.
Es. enum {falso, vero};
Falso = 0
Vero = 1
STRUCT (dati strutturati): aggregare variabili eterogenee in una sola variabile.
permettono dicampi.
Le variabili aggregate sono dettestruct {tipo1 nomeCampo1;tipo2 nomeCampo2, nomeCampo3;...tipoN nomeCampoN;} nomeStruct1, nomeStruct2;
accederePer a una struct devo usare l’operatore “.” (dot).
nomeStruct1.nomeCampo2 = valoreVariabile;
Es. struct1 = struct2; STRUTTURE IDENTICHE),
Si può fare: (copia tutti i valori di 2 in 1 solo seNO! struct1 == struct2ma —> (confronti, come non era possibile con gli array).
TYPEDEF USER-DEFINED)(tipi di datonome con la Maiuscola distinguere da variabili,
Di solito: del tipo inizia (per con la minuscola).
nome_tOppure si identificano con (dove t sta per tipo).
tipi semplici strutturati.
Si possono creare a partire sia da checombinati a array o struct:
Sono utili se possono dichiarare un tipo di variabile fatta come unacerta struct o un
<struct> Data oggi, ieri, domani;
nuovo tipo all'interno di altri tipi, posso accedere al campo di un
Posso anche usare ->
cioè
campo g = dip1.dataDiNascita.giorno;
di una struttura: es: typedef
E posso fare il sizeof
su una struct che contiene uno o più
altri tipi non semplici.
MATRICI
Tabelle di elementi ordinati, due indicicon (nell'ordine):
riga; - di colonna. - di
array multidimensionali due dimensioni):
Sono (a tipo nomeArray[dim1][dim2];
Acquisizione: due cicli uno dentro l'altro.
come array, ma con
ARRAY MULTIDIMENSIONALI
quante più dimensioni si desidera.
Si possono mettere
Nella RAM: salvato come "srotolato" riga
un array multidimensionale (anche una matrice) viene
per riga: le righe vengono poste una dopo l'altra nella memoria RAM, come per le celle del vettore.
CONVERSIONI
tipi diversi:
Operazioni tra se non specifichiamo nulla:
conversione implicita - -> automatica eseguita dal compilatore (non semprePossibile). Ogni espressione aritmetica è caratterizzata da (come sempre):
- Valore - del risultato;
- Tipo - del risultato. compile-time, tipizzazione forte
La fattibilità delle operazioni è valutata in a causa della di C. Ordine di precisione: char < short int < int < long int < float < double < long double
Regole generali:
PROMOZIONE: meno precisi in più precisi.
- Valori convertiti implicitamente più preciso.
- L'operazione è definita dal tipo risultato più preciso.
- Il è un valore del tipo conversione solo risultato,
N.B. La riguarda il il valore di partenza rimane del tipo di partenza.
Evitare conversioni unsigned.
N.B. con gli assegnamenti:
Stesse regole per gli Es.
double d;
int i;
d = i; // NON si perde informazione
i = d; // si PERDE informazione (il double viene troncato convertendolo in int)
Cosa Stampa? (int Ftemp = 50?
Cosa stampano le seguenti istruzioni se
- Ctemp = (5.0 / 9.0) * (Ftemp - 32);
- Ctemp
= (5 / 9) * (Ftemp - 32);
3. Ctemp = (5.0 / 9) * (Ftemp - 32);
4. Ctemp = 1.0 * (5 / 9) * (Ftemp - 32);
5. int Ctemp %d printf)?Se avessi dichiarato in (con in1) Celsius = 10.0 9.0 float /(5.0 e sono è divisione trafloat Ftemp int 32 int, variabile e e costante risultatointsottrazione ma la moltiplicazione causa conversione implicita(Ftemp 32) float)(promozione) di a2) Celsius = 0 9 int / int)(5 e sono diventa divisione tra3) Celsius = 10.0 float, 9 float(5.0 è è promosso a )4) Celsius = 0 (1.0 0)viene moltiplicato per5) Celsius = 10 (risultato float Ctemp,assegnato alla che èint possibile perdita di informazione)Informatica B, a.a. 20/21, Francesco Trovò
CAMBIO BASE101100010f)→ soBASE { }10 1-10 9CIFRE DISPOSIZIONEA →: 0po = ., ...↳ 1M -1324--7-10>+3.102+2 ÈPOSIZIONALE f-3124 a4tIo ]= -: .pitturare 5--0↳ vale MENOdi "^> ?/CIFRESE MCONSIDERO 0110> POSSIBILI 1NUMERI☐ →{ }DIZIONARIO 1-> 0,1 9OGNI escodifica
→ io =: . . . ...>8254 SIGNIFICATIVAMenola . ↳ PIÙ SIGNIFICATIVA }{ }P < 10 1710→ iDIZIONARIO 'sottoinsieme Di:> pmP topCON CIFRE DiBase° M Numeri→ ;}{}{ 1m> - piP + A)lo BiciD-> → Dizionario NUM BSSEPi ai' .io ..: = -. i. o)(bit 2M17OCALCOLATORI BINARIO° → BINARY DIGIT→ NUMERICON= diversiM Biti :ALTA✗ TENSIONE - 28=256Sbit NUMERIByte1tensioneBassa == [0%55] ][00000000,11111111}{ 6,7OITALE 4,52,3As 0,1: =i ,,,CODIFICA• { }ÈÈÈ ÈÈÈ> ESADECIMALE 8,96,70,112,3 4,5Ape , ,: ,,, ,, , ,CONVERSIONI NOTAZIONEdefBINARIO° DECIMALE di ESPONENZIALEinnum- : . 122+0.21+1.20=4+1--15110)(101b. =2↳ )(1 DISPARIconSE TERMINA → 10•: )(0 PARI→• 102°111111SE 1tutti 631SONO es = =-: . ÷^ ))( '.IEsi'IDEM• DITALE ESADECIMALE DECIMALE- : 530/2=2651-0 ^ """""DECIMALE INIZIOB.o 26512=1321 2DIVIDO PER 1ti- . /13212
866 16to 2E- = -o @ »,•a. +continuo %, " o⇐ oooooo☐ ,.3312 11-16=3 /CONSIDERO to816RESTII 2IL CONTRARIO =. / to8 42 =/4 to22 =212 to1= 1/ +o1 2 = 23=8DITALE Numeriyp.ae)g) 3( CIFRE( =BINARIO 38 cifraCIFREOGNI →-7° esadecimale qua- : > .az, ,.ua,) /( ,( CIFRE4 cifraOGNI →16 → 16a F)1%011,0=0--17RAGGRUPPATE FONDODALCIFRE Hexes: .SOMMA BINARIOIN RIPORTO→(1)0100TIN> COLONNA 1111: = PROBLEMA DI4 bit10011 PREDISPOSTOHAMA COMPUTER(1) →SOLO OVERFLOWSE ILSAREBBE001 1 → ,-↳ ( )bit di Carrey SCRIVERE traDA→?POSITIVI Negativi° }1 Negativo= }%? ;2^1+1 È![ 1)"