I tipi Strutturati
Dimensioni variabili strutturate La funzione sizeof consente di determinare lo spazio necessario alla memorizzazione di una variabile (o di un tipo); sizeof variabile sizeof(nome_di_tipo)
Esempi di utilizzo di sizeof sizeof(int); sizeof(float); sizeof(Punto); sizeof pt; sizeof t;
Un po’ di pratica !!!
I tipi strutturati Tipi Componenti Assemblaggio Funzione di accesso Semplici Strutturati Assemblaggio Prodotto Cartesiano Sequenza Funzione di accesso per posizione per nome
I tipi strutturati Costruttore del tipo Costruttore dei valori struttura sintattica, che identifica le modalità di costruzione e i tipi componenti, cui sono associate le funzioni di accesso Costruttore dei valori formalismo adoperato per indicare un valore strutturato attraverso di suoi componenti. es. (x,y)
Gli array Gli array si definiscono come cartesiano di n tipi uguali: tipo array = cartesiano (T 1 , T 2 , ..., T n ) con T 1 = T 2 = ... = T n Sono caratterizzati da: struttura ad accesso casuale accesso con un indice calcolato
Array Nella dichiarazione del tipo Array occorre specificare: tipo degli elementi componenti int, float, etc … numero di indici (dimensionalità o rango dell’array) Array monodimensionale (vettore) Array bidimensionale (matrice) valore minimo e massimo di ciascun indice
Array La “Funzione di accesso” è del tipo: M[i] (dimensionalità pari a uno) M[i,j] M[i][j] (dimensionalità pari a due) Sugli array è possibile effettuare operazioni: sui singoli elementi sulla struttura in quanto tale . Un esempio di costruttore è: int b[2][3]= {{1,2,3}{4,5,6}}; tipo Valori max indice nome dimensionalità
Allocazione Array Allocazione Ordinamento elementi Statica Dinamica Monodimensionali: i < j è a(i) precede a(j) Bidimensionali i1 < i2 è A(i1, .) precede A(i2, .) j1 < j2 è A(i, j1) precede A(i, j2)
Array in C++ Dichiarazione Tipo nome_array[dimensione]; Esempio: float x[25]; typedef Tc Vettore[dimensione]; Esempio: typedef float Vettore[25]; Vettore x;
Esempi Array in C++ float x[25]; //definizione x[0]; // primo elemento x[j]; // j-mo elemento x[25]; // errore! Esempio array bidimensionale float b[20][25]; typedef Matrice [20][25]; Matrice b;
Esempi (continua) int a[10], b[10]; //definizione a[4]= b[9]; //ok! a = b; // illegale: occorre copiare tutti gli elementi a[4]= b[9]; //ok! Controllo sui limiti a [3] = b[11]; //errore non segnalato !
Un po’ di pratica !!!
Tipo Record (o Struttura) Il Tipo recor è definito come il cartesiano di n tipi distinti: record=cartesiano(T 1 , T 2 , ..., T n ), con T1 , T2 , ..., Tn qualsiasi E’ una struttura dati ad accesso casuale costituita da un numero fisso di componenti, detti anche campi del record, che possono essere di tipo semplice o a loro volta strutturato.
Il record Svolge una generica funzione di raggruppamento di più attributi relativi alla medesima entità. Ogni campo ha un proprio nome ed è accessibile singolarmente mediante composizione del suo nome con quello del record.
Il record: dichiarazione e definizione struct nome { D1; D2; ... DN; }; esempio: struct point { int x; int y; struct point pt; definizione dichiarazione
Il record: dichiarazione e definizione typedef struct { D1; D2; ... DN; } nometipodichiarato; Esempio: int x; int y; } Point; Point pt; definizione dichiarazione
Record: accesso Funzioni di accesso pt.x pt.y pt.x = 3; pt.y = 12;
Record: assegnazione Assegnazione Point pt1, pt2; pt1 = {2,1};
Un po’ di pratica !!!
Il Tipo Stringa In generale una stringa di caratteri è una sequenza di caratteri atta a rappresentare una frase, un testo, etc... Concetti fondamentali lunghezza di una stringa concatenamento di due stringhe ordinamento (derivante da quello lessicografico)
Stringhe in C++ Una stringa in C++ è un array di caratteri che, nella rappresentazione interna, è terminato dal carattere nullo (‘\0’) Quindi internamente una stringa occupa un carattere in più del numero di caratteri che la compongono! Le funzioni che operano sulle stringhe si aspettano il terminatore ‘\0’ Nelle stringhe composte “a mano” occorre inserire ad hoc il carattere di terminazione!
Dichiarazione di una stringa char stringa[10]; è cura del programmatore aggiungere il ‘\0’ per identificare la fine della stringa char stringa2[] = “0123456789”; nel caso di assegnazioni di costanti stringa non è necessario aggiungere il terminatore ‘\0’;
Funzioni su stringhe Le stringhe sono in genere utilizzate in operazioni di Input – Output Input (cin) #include <iostream.h> char str[81]; cin >> str L’input viene terminato al primo carattere di spaziatura (‘\n’, ‘\t’, ‘<spazio>‘) Input (gets) #include <stdio.h> gets(str); cout << str
Esempi di funzioni sulle stringhe strcpy(str1, str2); Copia la stringa str2 nella stringa str1 strcat(s1, s2); Concatena le due stringhe strcmp(s1,s2); Confronto tra le due stringhe strlen(s); Restituisce la lunghezza della stringa
Pratica !!!