1 / 22

Array

Array Un array è una sequenza di elementi omogenei. Un array viene dichiarato scrivendo , nell’ordine, il tipo degli elementi , il nome dell’array, e le sue dimensioni . tipo nome  [ dimensione ];

gali
Download Presentation

Array

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Array • Un arrayè una sequenza di elementi omogenei. Un array viene dichiarato scrivendo, nell’ordine, il tipo degli elementi, il nome dell’array, e le sue dimensioni. • tiponome [dimensione]; • dove tipoè iltipodeglielementi (int,  float   ...) dettoanchetipo base dell'array , nome è un  identificatore e dimensione, chedeveessereracchiusotraparentesiquadre[], è la dimensione, ossiailnumero di elementi, dell'array. La dichiarazionedell'arraybillyè: • intbilly [5];

  2. Array Si noti che all’interno delle parentesi quadre non è possibile, in fase di dichiarazione dell’array, utilizzare nomi di variabili . E’ possibile, per specificare le dimensioni di un array, usare delle costanti definite, come ad esempio: #define ARRAY_UNO_MAX 10#define ARRAY_DUE_MAX 20……..intarray_uno[ARRAY_UNO_MAX];chararray_due[ARRAY_DUE_MAX];

  3. ARRAY Come per le variabilisemplici, anche per gliarray è possibilespecificare un valoreiniziale. Ad esempio, con la dichiarazione: intbilly [5] = { 16, 2, 77, 40, 12071 }; l'arrayvieneinizializzato come segue: • billy[0]=16; • billy[1]=2; • billy[2]=77; • billy[3]=40; • billy[4]=12071; Il numero di valoriusati per l'inizializzazione (quellipostitrale parentesigrafe{}) deveessereesattamenteugualealladimensionedell'array. In C++ è possibileancheusare la notazione:   intbilly [] = { 16, 2, 77, 40, 12071 }; ed in questocasovieneassuntoimplicitamentecome dimensionedell'arrayilnumero di valoridellalistadi inizializzazione

  4. ARRAY altri esempi di inizializzazione esplicita al momento della creazione: intarray_quattro[3] = {12, 0, 4};char vocali[5] = {‘a’,'e’,'i’,'o’,'u’};float decimali[2] = {1.329, 3.34}; Per inizializzare un array durante l’esecuzione del programma occorre accedere, generalmente con un ciclo, ad ogni elemento dell’array stesso ed assegnargli un valore. 

  5. LEGGI e SCRIVI VETTORE #include <stdio.h> #include <iostream> …….. #define MAX 10 intmain() { int a[MAX]; inti; for (i = 0;i < n;i++) cin>>a[i]; //lettura array for (i = 0;i < n;i++) cout<<a[i]);//scritturaarray return 0; } • // esempio con gli array( SOMMA) • #include <iostream>……intbilly [] = {16, 2, 77, 40, 12071};int n, risultato=0;int main (){  for ( n=0 ; n<5 ; n++ )risultato += billy[n];cout << risultato;  return 0;}

  6. ARRAY In ognipunto del programma in cui un array risultavisibilepossiamoaccedereindividualmente ad unodeglielementidell'array per leggerlo o modificarloesattamente come se esso fosse unanormalevariabile. Il formato è ilseguente: name[index]; Ad esempio, se vogliamomemorizzareilvalore75nelterzoelementodi billypossiamousarel'assegnazione: billy[2] = 75; oppure, per copiareilvalore del terzoelementonellavariabilea possiamousare: a = billy[2];

  7. Gli array vengono passati alle funzioni sempre per indirizzo. codice: • …..voidfunzione (intarr[]) ; intmain () • { • .... int numeri[3]; .... funzione (numeri); } • void funzione (intarr[]) • { • ..... • } L'argomento della funzione si può dichiarare anche :int *arroppureintarr[3]

  8. Il passaggio di un array ad una funzione avviene sempre per indirizzo e mai per valore. Quando si passa un’array in effetti non si sta facendo altro che passare l’indirizzo (il puntatore) del primo elemento dell’array stesso. Ciò vuol dire che se all’interno della funzione vengono modificati i valori dell’array, tale modifica avrà effetto anche sull’array che si è passato alla funzione. Semplice programma che illustra il passaggio di un array ad una funzione #include <iostream.h> #definedimensione_array5 int somma(int array[]); intmain() { int vettore[size] = {1,2,3,4,5}; cout << "La somma degli elementi dell'array e' " << somma(vettore) << endl; return(0); } intsomma(int array[]) {// la funzione prende come parametro un vettore e ne ritorna la somma degli elementi int somma = 0; for(int i=0; i <dimensione_array; i++) somma += array[i]; returnsomma; }

  9. ....................void binario(int n); ………………… int main(){intn; char risposta;do{cout<<"Inserisci un numerodecimaleper convertirlo: ";cin>>n; if(n<0)cout<<"Impossibileconvertire"; else {binario(n); cout<<endl<<"Vuoicontinuare? [n=no,s=si]: ";cin>>risposta; } } while((risposta!='n') && (risposta!='N')); return 0; system(pause); } void binario(int n){intA[100],c=0,i=0;cout<<"Conversionebinaria: "; if(n==0)cout<<"0"; else while(n>0) { A[c]=n%2; n=n/2;c++; } for(i=c-1;i>=0;i--)cout<<A[i]; cout<<endl;}

  10. Stringhe di Caratteri Oltre alle variabili numeriche si possono anche dichiarare variabili i cui valori sono stringhe di caratteri. Tali variabili ci permettono di elaborare successioni di caratteri quali : parole, frasi, nomi, testi, eccetera. In C++ non vi è un tipo di variabile predefinito in grado di memorizzare delle stringhe di caratteri. Dobbiamo usare degli array di caratteri. La libreria standard del C++ contiene un file (che si può includere  con il comando #include <string> ) in cui è  definito un tipo stringcon il quale l'elaborazione di stringhe  risulta molto agevolata.

  11. Il seguente array: char jenny [20]; puòmemorizzareunastringa di al più 20 caratteri. Possiamorappresentarlo come segue: jenny: • Naturalmente non è necessario usare tutti e 20 i caratteri dell'array. • L'array jennysi può usare per memorizzare sia la stringa di 5 caratteri "Hello" sia la stringa di 15 caratteri "Merry Christmas". Siccome l'array può contenere stringhe più corte della sua dimensione occorre prevedere una indicazione del punto in cui termina la stringa. • Ad esempio: • Jenny=Hello\0; • Jenny=Mery Christmas\0; • Osserviamo che dopo il contenuto effettivo della stringa viene aggiunto un carattere nullo ('\0') per indicare la fine della stringa. Pertanto l'array jenny può contenere al più stringhe di 19 caratteri.    

  12. Inizializzazionedellestringhe Per inizializzareunastringa di caratterisipuòusare la stessanotazioneusata per gli array:       char mystring[ ] = { 'H', 'e', 'l', 'l', 'o', '\0' }; Abbiamocosìinizializzatounastringa (array) di 6 valori di tipochar: laparolaHellopiùilcaratterenullo'\0'. • Possiamo anche inizializzare un array di caratteri usando una stringa costante. • Alle stringhe costanti viene sempre aggiunto implicitamente un carattere nullo finale '\0'.  • char mystring [] = "Hello"; • In entrambi i casi la dimensione dell'array mystring   è di 6 elementi di tipochar: i 5 caratteri di Hello e il carattere nullo finale ( '\0' ).   • mystring[0]='H';mystring[1]='e';mystring[2]='l';mystring[3]='l';mystring[4]='o';mystring[5] = '\0';

  13. Attenzione…. La libreria standard (chesipuòincludere con #include <string.h> ) contiene la definizione di un certonumero di funzioniquali. strcpy (stringcopy) chesipuòrichiamarenelseguentemodo:  strcpy (string1, string2); • L'effetto è copiare il contenuto di string2   in string1.   • string2 può essere sia un array sia unastringa costante, il che ci permette di assegnare la stringa costante "Hello"all'array di caratteri mystringusando la seguente notazione: • strcpy(mystring, "Hello");

  14. // assegnazione a stringhe #include <iostream>#include <string>int main (){  char stMyName [20];strcpy (stMyName,“M.V.Avolio");cout << stMyName;  return 0;}

  15. Un altromodo per assegnare un valore ad un array di caratteri è quelldi usaredirettamenteilflusso di input cin. Nellalibreriaiostream è infattidefinitaunafunzionegetlineil cui prototipo è: • cin.getline ( char buffer [], intlength, char delimiter = ' \n'); • #include <iostream>int main (){  char nome[100];cout << "Come tichiami? ";cin.getline(nome, 100);cout << "Salve " << nome<< ".\n";cout << “Il tuocolorepreferito? ";cin.getline(nome,100);cout << “Il" << nome<< " piaceanche a me.\n";  return 0;}

  16. STRINGHE Si puòancheusarel'operatore di estrazione  (>>)  per leggeredellestringhe da cin : cin >> nome; chefunziona ma con le seguentilimitazionichecin.getlinenon ha:  • sipossonoleggeresoltanto parole e non interefrasi in quantol'operatoredi estrazioneusa come delimitatorequalsiasioccorrenza di un carattereinvisibile(spazio, tabulazione, nuovalinea, ritornocarrello). • non sipuòspecificare la dimensionedell'arrayilcherendeinstabileilprogramma, nelcaso in cui l'inputsiaunaparolapiùlungadelladimensionedell'array.

  17. AlTRE OPERAZIONI CON LE STRINGHE strcat: char* strcat (char* dest , const char* src ); Aggiunge (appende) la stringasrcalla fine dellastringadest. Ritornadest strcmp:  intstrcmp (const char* str1, const char* str2 ); Confronta le stringhestr1edstr2 . Ritorna0 se sonouguali. strcpy:  char* strcpy (char* dest, const char* src ); Copiailcontenuto di src in dest. Ritornadest. strlen: size_tstrlen (const char* str); Ritorna la lunghezza di str. • NOTA: char* ha lo stesso significato di char[]

  18. PAROLA PALINDROMA PSEUDO-CODICE: condizione=true; //LETTURA DELA PAROLA ………. //CONTROLLO DELLA PAROLAfor (i=0; i<(lunghezza totale-1)/2; i++)if(parola[i]!=parola[lunghezza totale-1-i]) condizione=false;if (condizione==true) parola palindroma else parola non palindroma

  19. Esercizio 1 proposto (uso dell’array) : • Compattazione di un vettore • Scrivere un programma che legge Nnumeri interi da tastiera e li memorizza in un vettore. Il numero N viene inserito dall’utente ed è minore di 20. Il programma deve generare un secondo vettore che compatta i numeri contenuti nel primo vettore. In particolare: • ogni numero che compare ripetuto nel primo vettore, deve comparire una sola volta • nel secondo vettore • ogni numero uguale a zero presente nel primo vettore non deve comparire nel secondo • vettore. • Il programma deve visualizzare il contenuto del secondo vettore. • Ad esempio, si supponga N=8 e si consideri la sequenza di numeri 1 18 3 0 24 3 6 0 • inseriti da tastiera. Il programma deve visualizzare 1 18 3 24 6.

  20. Esercizio 2 proposto (uso delle stringhe): • Conta vocali e consonanti • Scrivere un programma che legga una frase introdotta da tastiera. La frase è terminata dall’introduzione del carattere di invio. La frase contiene sia caratteri maiuscoli che caratteri minuscoli, e complessivamente al più 100 caratteri. Il programma dovrà stampare su schermo le seguenti informazioni: • per ognuna delle lettere dell’alfabeto, il numero di volte che la lettera compare nella stringa • il numero di consonanti presenti nella stringa • il numero di vocali presenti nella stringa.

  21. Esercizio 3proposto (uso delle matrici): Concorso di intelligenza In un concorso di intelligenza, N giudici esprimono il loro giudizio su K candidati. Il giudizio è un valore numerico tra 0 e 5. Si scriva un programma per determinare il candidato più intelligente,edil giudice più severo.

More Related