appunti3s:tipi_di_dato_strutturato_array
Differences
This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revision | |||
appunti3s:tipi_di_dato_strutturato_array [2018/05/08 23:26] – profpro | appunti3s:tipi_di_dato_strutturato_array [2020/06/08 22:20] (current) – external edit 127.0.0.1 | ||
---|---|---|---|
Line 1: | Line 1: | ||
+ | ====== Tipi di dato strutturato ====== | ||
+ | |||
+ | Il tipo //int// è detto //tipo semplice//, così come lo sono anche //float// oppure //char//, in quanto possono contenere un solo valore. | ||
+ | |||
+ | Il tipo //array// e altri ancora sono detti "// | ||
+ | Se il problema chiede di calcolare la media dei 15 voti di uno studente, non conviene dichiarare 15 variabili di tipo semplice per memorizzare i 15 voti, ma conviene usare una sola variabile di tipo strutturato, | ||
+ | |||
+ | Il tipo array è un' | ||
+ | ===== Esempio ===== | ||
+ | È utile riprendere l' | ||
+ | |||
+ | >> Scrivere un programma che chieda cinque numeri e ne visualizzi la somma | ||
+ | |||
+ | Rispondere alle seguenti domande: | ||
+ | - Nella soluzione //quante variabili// sono state utilizzate per memorizzare i cinque numeri? | ||
+ | - Ci sarebbero state più istruzioni da aggiungere se invece di cinque numeri fossero stati cinquanta? | ||
+ | |||
+ | Provare a rispondere alle stesse domande, nel caso in cui il problema venisse modificato nel seguente modo: | ||
+ | |||
+ | >> Scrivere un programma che chieda cinque numeri e li visualizzi in modo ordinato | ||
+ | |||
+ | Questa volta è necessario mantenere in memoria in modo distinto tutti i numeri per poterli ordinare e visualizzare dopo l' | ||
+ | sarebbe utile avere una variabile strutturata che le contenesse tutte insieme e da cui sia più facile richiamarle. | ||
+ | |||
+ | Se si usassero cinque variabili come a, b, c, d, e, sarebbe impossibile automatizzare la ripetizione all' | ||
+ | |||
+ | Viceversa se le variabili fossero qualcosa come a< | ||
+ | =====Array===== | ||
+ | |||
+ | In italiano vengono chiamati anche vettori, ma questo termine andrebbe evitato per non fare confusione con il tipo // | ||
+ | Le variabili strutturate di tipo //array// derivano dal linguaggio C e sono scomode da usare perché, ad esempio, non c'è nessun controllo del superamento della posizione dell' | ||
+ | |||
+ | |||
+ | * Un array è una struttura che raggruppa tanti elementi, tutti di uno stesso tipo. | ||
+ | * Per indicare la posizione di un elemento dell' | ||
+ | * Se un vettore è di 9 elementi, l' | ||
+ | |||
+ | Quando si definisce un array, il compilatore deve riservare la quantità di memoria necessaria. Per fare questo il compilatore deve conoscere il numero dei suoi elementi: | ||
+ | |||
+ | < | ||
+ | int a[40]; // corretto | ||
+ | int a[]; // errore | ||
+ | </ | ||
+ | |||
+ | ==== array di char ==== | ||
+ | |||
+ | Un vettore di tipo char viene anche chiamato “stringa in stile C” (da non confondere con le std%%:: | ||
+ | < | ||
+ | char w[] = " | ||
+ | char w[] = {' | ||
+ | </ | ||
+ | w è un vettore di 5 elementi!!! | ||
+ | ^ posizione ^ 0 ^ 1 ^ 2 ^ 3 ^ 4 ^ 5 ^ 6 ^ | ||
+ | | valore | m | i | a | o | \0 | | | | ||
+ | <file cpp 51.cpp> | ||
+ | // questo programma è stato scritto da Fabio | ||
+ | // crea un array, lo inizializza e lo visualizza | ||
+ | #include < | ||
+ | int main() | ||
+ | { | ||
+ | int a1[9]={70, | ||
+ | for (int indice=0; indice< | ||
+ | std::cout << a1[indice] << ' ' ; //notare la sintassi delle parentesi quadrate | ||
+ | std::cout << std::endl; | ||
+ | return 0; | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | Gli array sono utili per gestire grandi quantità di dati dello stesso tipo. | ||
+ | Si può accedere, leggere e modificare un singolo elemento del vettore usando l' | ||
+ | |||
+ | Grazie alla presenza dell' | ||
+ | |||
+ | <file cpp 52.cpp> | ||
+ | // questo programma è stato scritto da Fabio | ||
+ | // crea un array, lo inizializza e ne visualizza la somma di tutti gli elementi | ||
+ | #include < | ||
+ | int main() | ||
+ | { | ||
+ | int totale=0; | ||
+ | int a1[9]={70, | ||
+ | for (int indice=0; indice< | ||
+ | totale = totale + a1[indice] ; //notare la sintassi delle parentesi quadrate | ||
+ | std::cout << totale << std::endl; | ||
+ | return 0; | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | Rivedere il precedente esempio, immaginando di dover visualizzare e sommare 90 valori interi invece di 9. Come potrebbe essere risolto un problema del genere senza l'uso degli array? | ||
+ | |||
+ | * Il numero degli elementi deve essere stabilito al momento della compilazione. | ||
+ | * solo per le variabili globali si può stabilire anche run time. | ||
+ | * Il linguaggio **non** effettua controlli sul superamento dei limiti di un array | ||
+ | |||
+ | |||
+ | ==== Array e puntatori a....==== | ||
+ | Da un certo punto di vista array e puntatori hanno delle somiglianze e delle differenze. Si vedrà presto il legame tra questi due argomenti nel capitolo [[appunti3s: | ||
+ | |||
+ | ====Array come stringhe di parole==== | ||
+ | Come è ben noto, in C++ per memorizzare una parola si usa il tipo // | ||
+ | In C gli array erano utilizzati anche per contenere una sequenza di caratteri, ma la sequenza doveva terminare con il valore //\0// (Zero, da non confondere con il carattere ASCII ' | ||
+ | |||
+ | Esiste una funzione che converte le variabili C++ std%%:: | ||
+ | < | ||
+ | std::string variabileString = " | ||
+ | char a1[50] = c_str(variabileString); | ||
+ | </ | ||
+ | Esempio in cui viene usata proprio questa funzione: [[appunti3s: | ||
+ | |||
+ | ==== Array di array ==== | ||
+ | < | ||
+ | |||
+ | È un array di 3 elementi ognuno dei quali è a sua volta un array di 2 elementi. Alcuni rappresentano gli array bidimensionali come una matrice, ma, in memoria, gli elementi sono disposti in modo adiacente facendo scorrere l' | ||
+ | |||
+ | ==== Argomenti della linea di comando ==== | ||
+ | La forma con cui si dichiara la funzione main() può contenere i seguenti argomenti | ||
+ | < | ||
+ | int main(int argc, char[][] argv) | ||
+ | </ | ||
+ | Questa forma permette di passare dei parametri al main() dalla linea di comando: | ||
+ | < | ||
+ | programma.exe opzione1 opzione2 | ||
+ | </ | ||
+ | * //argc// è una variabile che contiene il numero delle opzioni passate dall' | ||
+ | * //argv// contiene tutte le opzioni passate (è l' | ||
+ | |||
+ | esempio... | ||
+ | |||
+ | ===== Vector ===== | ||
+ | // | ||
+ | Ad esempio, trattandosi di una struttura della libreria standard , vi si possono applicare tutti gli algoritmi presenti nella [[appunti3s: | ||
+ | I vector sono degli oggetti e per poter utilizzare tutte le utili funzioni fornite dalla libreria standard | ||
+ | Alcuni esempi d'uso dei vector sono nel capitolo [[appunti3s: | ||
+ | |||
+ | A voler essere precisi, bisogna dire che vector non è un " | ||
appunti3s/tipi_di_dato_strutturato_array.txt · Last modified: 2020/06/08 22:20 by 127.0.0.1