diff --git a/14_array_statici.md b/14_array_statici.md index 2684662..7af3fd7 100644 --- a/14_array_statici.md +++ b/14_array_statici.md @@ -39,3 +39,44 @@ Gli array dinamici vengono allocati nell'heap (come vedremo più avanti) Hint: usa il flag `--pedantic-error` per evitare che il compilatore non permetta di definire VLA [stampa_array.cpp](./esercitazioni/stampa_array.cpp) +[array_casuali.cpp](./esercitazioni/array_casuali.cpp) + +## Dimensione +Nel caso di un array di char, ogni locazione di memoria ha dimensione 1 byte, equivalente alla dimensione di una cella => dimensione array in memoria = numero elementi + +Nel caso di un int: dim array in memoria = 4\*num elementi + +## Copia array +L'unico modo di copiare un array in un altro array è quello di utilizzare un ciclo che esegua la copia posto per posto. + +## Vettori e array +I due termini sono interscambiabili, perchè l'array è la rappresentazione i memoria di un vettore matematico + + +[max_of_array.cpp](./esercitazioni/max_of_array.cpp) +[max_of_array_index.cpp](./esercitazioni/max_of_array_index.cpp) + +## Dimensione array +Posso ottenere la dimensione in byte di un array con `sizeof(v)` +Per calcolare il numero di celle dell'array divido questo valore per la dimensione del tipo di dato memorizzato in `v`: `sizeof(v)/` + +## Mancanza di controllo degli indici +A tempo di esecuzione non viene vietato di accedere ad aree di memoria esterne all'array stesso. +=> injection, buffer overflow e le "peggiocose" sono possibili a causa della mancanza di controlli + +## Inizializzazione +`[const] [] = {, , ...};` + +Un array che viene definito come costante deve essere inizializzato all'inizio del programma. + +## Array come argomenti +` ::= [const] []` + +Gli array sono passati automaticamente per riferimento, mai per copia. Quindi all'interno della funzione posso sempre modificare i valori contenuti in esso, a meno che non utilizzi il modificatore `const` + +Le informazioni sulla dimensione dell'array non vengono passate alla funzione, è il programmatore che se ne deve occupare: var globale oppure costante globale (consigliata la prima soluzione). + + +[calcola_somma.cpp](./esercitazioni/calcola_somma.cpp) +[raddoppia_array.cpp](./esercitazioni/raddoppia_array.cpp) +[pari_array.cpp](./esercitazioni/pari_array.cpp) diff --git a/esercitazioni/.stampa_array.cpp.swp b/esercitazioni/.stampa_array.cpp.swp deleted file mode 100644 index e3c002f..0000000 Binary files a/esercitazioni/.stampa_array.cpp.swp and /dev/null differ diff --git a/esercitazioni/array_casuali.cpp b/esercitazioni/array_casuali.cpp new file mode 100644 index 0000000..762d64d --- /dev/null +++ b/esercitazioni/array_casuali.cpp @@ -0,0 +1,18 @@ +#include +#include + +using namespace std; + +int main() { + srand(time(0)); + const int dim = 5; + int v[dim]; + + for (int i=0; i +#include + +using namespace std; + +const int somma(const int[], const int); +inline const int rand_in_range(const int, const int); + +int main() { + const int DIM = 5; + const int RANGE_INF = 0, RANGE_SUP = 10; + int v[DIM]; + + srand(time(0)); + + for (int i=0; i +#include + +using namespace std; + +inline int max(const int a, const int b); +inline int rand_in_range(const int inf, const int sup); + +int main() { + srand(time(0)); + const int dim = 5; + int v[dim]; + + // generazione e stampa + for (int i=0; i b ? a : b; +} + +inline int rand_in_range(const int inf, const int sup) { + return rand()%(sup-inf) + inf; +} diff --git a/esercitazioni/max_of_array_index.cpp b/esercitazioni/max_of_array_index.cpp new file mode 100644 index 0000000..f661bf5 --- /dev/null +++ b/esercitazioni/max_of_array_index.cpp @@ -0,0 +1,38 @@ +#include +#include + +using namespace std; + +inline int max(const int a, const int b); +inline int rand_in_range(const int inf, const int sup); + +int main() { + srand(time(0)); + const int dim = 5; + int v[dim]; + + // generazione e stampa + for (int i=0; i b ? a : b; +} + +inline int rand_in_range(const int inf, const int sup) { + return rand()%(sup-inf) + inf; +} diff --git a/esercitazioni/pari_array.cpp b/esercitazioni/pari_array.cpp new file mode 100644 index 0000000..5f28492 --- /dev/null +++ b/esercitazioni/pari_array.cpp @@ -0,0 +1,42 @@ +#include +#include + +using namespace std; + +void copia_pari(const int[], const int, int[], int&); +inline const int rand_in_range(const int, const int); + +int main() { + const int DIM = 5; + const int RANGE_INF = 0, RANGE_SUP = 10; + int v[DIM], pari[DIM]; + int pari_dim = 0; + + srand(time(0)); + + for (int i=0; i +#include + +using namespace std; + +void raddoppia_array(int[], const int); +inline const int rand_in_range(const int, const int); + +int main() { + const int DIM = 5; + const int RANGE_INF = 0, RANGE_SUP = 10; + int v[DIM]; + + srand(time(0)); + + for (int i=0; i