Lez mod 1 cap 2 le strutture dati p1 p33

Page 1

Prof. Remo Misisca

GLI ALGORITMI

LE STRUTTTURE DATI

1


Prof. Remo Misisca

GLI ALGORITMI

ALGORITMI E LORO TIPOLOGIE â– Definizione di Variabili e Costanti

2


Prof. Remo Misisca

GLI ALGORITMI

ALGORITMI E LORO TIPOLOGIE â– Definizione di Variabili e Costanti

Costanti in C

La definizione di una costante cosa fa? Quanto tempo vive una Costante?

3


Prof. Remo Misisca

GLI ALGORITMI

ALGORITMI E LORO TIPOLOGIE ■ Strutture dati e loro tipologie C'è uno stretto legame pure tra algoritmi e strutture dati, in quanto le strutture dati costituiscono gli ingredienti di base degli algoritmi.

Anche l'efficienza di un algoritmo dipende in maniera critica dal modo in cui sono organizzati i dati su cui esso deve operare. Una struttura dati è : un insieme di dati logicamente correlati e opportunamente memorizzati, per i quali sono definiti degli operatori di costruzione, selezione e manipolazione.

4


GLI ALGORITMI

Prof. Remo Misisca

5

ALGORITMI E LORO TIPOLOGIE â– Strutture dati e loro tipologie Le varie strutture dati sono riconducibili a combinazioni di strutture dati appartenenti alle quattro classi fondamentali: Alberi

Array

Liste

Grafi


Prof. Remo Misisca

GLI ALGORITMI

ALGORITMI E LORO TIPOLOGIE ■ Strutture dati e loro tipologie Classificazione delle strutture dati basata sulla loro occupazione di memoria:  Strutture dati statiche: la quantità di memoria di cui esse necessitano è determinabile a priori (array).  Strutture dati dinamiche: la quantità di memoria di cui esse necessitano varia a tempo d'esecuzione e può essere diversa da esecuzione a esecuzione (liste, alberi, grafi).

6


Prof. Remo Misisca

STRUTTURE DATI : GLI ARRAYS

Introduzione agli Arrays  Le variabili primitive sono progettate per contenere

un solo valore alla volta.  Gli array ci consentono di creare una raccolta di valori simili che sono indicizzati.  Un array può memorizzare qualsiasi tipo di dati ma

solo un tipo di dati alla volta.  Una matrice è una lista di elementi di dati.

7


STRUTTURE DATI : GLI ARRAYS

Prof. Remo Misisca

8

Creare un Arrays • Un array è un oggetto quindi necessita di un riferimento a un

oggetto. // Declare a reference to an array that will hold integers. int[] numbers;

• Il prossimo passo crea l'array e assegna il suo indirizzo alla

variabile numerica. // Create a new array that will hold 6 integers. numbers = new int[6]; 0

0

0

0

0

0

index 0

index 1

index 2

index 3

index 4

index 5

Array element values are initialized to 0. Array indexes always start at 0.


Prof. Remo Misisca

STRUTTURE DATI

GLI ARRAYS

Creare gli Arrays • È possibile dichiarare un riferimento ad array e

crearlo nella stessa dichiarazione. int[] numbers = new int[6];

• Gli array possono essere di qualsiasi tipo. float[] temperatures = new float[100]; char[] letters = new char[41]; long[] units = new long[50]; double[] sizes = new double[1200];

9


Prof. Remo Misisca

STRUTTURE DATI : GLI ARRAYS

• La dimensione di una array :  non può essere un numero negativo.  Può essere un valore letterale, una costante o

variabile. final int ARRAY_SIZE = 6; int[] numbers = new int[ARRAY_SIZE]; • Una volta creato, la dimensione di un array non può

essere modificata.

10


STRUTTURE DATI : GLI ARRAYS

Prof. Remo Misisca

11

Accedere agli elementi di una an Array 20

0

0

0

0

0

numbers[0]

numbers[1]

numbers[2]

numbers[3]

numbers[4]

numbers[5]

• Un array è accessibile con: • Il riferimento al suo nome • un indice che identifica l'elemento nell’array per l'accesso. numbers[0] = 20; //pronounced "numbers sub zero"


Prof. Remo Misisca

STRUTTURE DATI : GLI ARRAYS

Inputting and Outputting Array Elements • Gli elementi dell'array possono essere trattati come

una qualsiasi altra variabile. • Sono semplicemente accessibili con lo stesso nome e un indice. • È possibile accedere agli indici delle array usando variabili (come per i contatori di loop).

12


Prof. Remo Misisca

STRUTTURE DATI : GLI ARRAYS

Controllare il limite delle dimesnioni • Gli indici di matrice iniziano sempre da zero e continuano a

(lunghezza dell'array - 1). int values = new int[10]; • In questo array gli indici vanno da 0 a 9.. • Nei loop for, è tipico usare i, j e k come variabili di

conteggio. • Possiamo utilizzare delle variabili per scorrere il contenuto

di un array. In tal caso la variabile viene chiamata “Indice dell’array”

13


Prof. Remo Misisca

STRUTTURE DATI : GLI ARRAYS

14

Errore classico : Sbagliare di un valore l’indice • È veramente facile sbagliare quando si accede ad un indice.

// This code has an off-by-one error. int[] numbers = new int[100]; for (int i = 1; i <= 100; i++) numbers[i] = 99; • Here, the equal sign allows the loop to continue on to index 100,

where 99 is the last index in the array. • Questo codice genererebbe un ArrayIndexOutOfBoundsException.


Prof. Remo Misisca

STRUTTURE DATI : GLI ARRAYS

15

Inizializzazione di un Array • Quando è necessario inizializzare relativamente pochi elementi,

è possibile utilizzare un elenco di inizializzazione per inizializzare l'array. int[]days = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};

• I numeri nell'elenco sono memorizzati nell'array nell'ordine: • days[0] is assigned 31, • days[1] is assigned 28, • days[2] is assigned 31, • days[3] is assigned 30, • etc.


Prof. Remo Misisca

STRUTTURE DATI : GLI ARRAYS

Altre modalità di dichiarazione di array • Precedentemente abbiamo mostrato gli array dichiarati così:

int[] numbers; • Tuttavia, le parentesi possono anche andare qui :

int numbers[]; Questi metodi sono equivalenti, ma il primo stile è quello tipico. • Possiamo dichiarare più array sulla stessa linea.

int[] numbers, codes, scores; • Con la notazione alternativa ogni variabile deve avere parentesi

int numbers[], codes[], scores; • The scores variable in this instance is simply an int variable.

16


Prof. Remo Misisca

STRUTTURE DATI : GLI ARRAYS

Elaborare il contenuto di un Array • L'elaborazione dei dati in un array è uguale a qualsiasi

altra variabile. grossPay = hours[3] * payRate; • Pre e post incremento funzionano allo stesso modo:

int[] score = {7, 8, 9, 10, 11}; ++score[2]; // Pre-increment operation score[4]++; // Post-increment operation

17


Prof. Remo Misisca

STRUTTURE DATI : GLI ARRAYS

Elaborare il contenuto di un Array • Gli elementi dell'array possono essere utilizzati nelle operazioni

relazionali: if(cost[20] < cost[0]) { //statements } • Possono essere usati come condizioni in un ciclo :

while(value[count] != 0) { //statements }

18


Prof. Remo Misisca

STRUTTURE DATI : GLI ARRAYS

Lunghezza di un Array • Gli Array sono oggetti che possiedono un campo

pubblico di nome Length che è una costante che può essere testata. double[] temperatures = new double[25]; • La lunghezza di questo array è 25.

• La lunghezza di un array la possiamo ottenere

utilizzando la costante length. int size = temperatures.length; • La variabile size conterrà 25.

19


Prof. Remo Misisca

STRUTTURE DATI : GLI ARRAYS

Il ciclo for per scorrere gli array • Elaborazione semplificata di un array (sola lettura) • Questo ciclo scorre tutti gli elementi dell’array • Formato generale:

for(datatype elementVariable : array) statement;

20


Prof. Remo Misisca

STRUTTURE DATI : GLI ARRAYS

Il ciclo for per scorrere gli array Example: int[] numbers = {3, 6, 9}; For(int val : numbers) { System.out.println(“Il prossimo valore è " + val); } //l’output sarà 3 6 9

21


Prof. Remo Misisca

STRUTTURE DATI : GLI ARRAYS

Dimensione degli Array • La costante length può essere utilizzata in un ciclo

per fornire il limite superiore automaticamente. Index subscripts start at 0 and end at one less than the array length. for(int i = 0; i < temperatures.length; i++) { System.out.println("Temperatura " + i ": " + temperatures[i]); }

22


Prof. Remo Misisca

STRUTTURE DATI : GLI ARRAYS

Dimensione degli Array • Puoi consentire all'utente di specificare la dimensione

di un array: int numTests; int[] tests; Scanner keyboard = new Scanner(System.in); System.out.print(“Quanti test devi fare?"); numTests = keyboard.nextInt(); tests = new int[numTests]; • Esercitazione :

Scrivere un programma che chiede la dimensione di un array , lo popola e stampa tutti gli elementi a video.

23


Prof. Remo Misisca

STRUTTURE DATI : GLI ARRAYS

Riassegnazione di riferimenti di un array • Un riferimento di matrice può essere assegnato a un altro

array dello stesso tipo. // Crea un array a cui fa riferimento la variabile numerica. int[] numbers = new int[10]; // Riassegna alla variabile numbers un nuovo array numbers = new int[5];

• Se il primo array di 10 elementi non ha più riferimenti ad

alcuni elementi (dal sesto al decimo) , questi saranno cancellati (garbage collection).

24


Prof. Remo Misisca

STRUTTURE DATI : GLI ARRAYS

25

Riassegnazione di riferimenti di un array La variabile numbers contiene il puntatore (Address) ad un un array di interi.

Address

int[] numbers = new int[10];


Prof. Remo Misisca

STRUTTURE DATI : GLI ARRAYS

Riassegnazione di riferimenti di un array La variabile numbers contiene il puntatore (Address) ad un un array di interi. Address

This array gets marked for garbage collection

numbers = new int[5];

26


Prof. Remo Misisca

STRUTTURE DATI : GLI ARRAYS

27

Copiare gli Array • Questo non è la soluzione di copiare un array. int[] array1 = { 2, 4, 6, 8, 10 }; int[] array2 = array1; // This does not copy array1.

2 array1 holds an address to the array

Address

array2 holds an address to the array

Address

4

6

8 10


Prof. Remo Misisca

STRUTTURE DATI : GLI ARRAYS

Copiare gli Array • Non è possibile copiare una array semplicemente

assegnando l’indirizzo di una variabile ad un'altra. • È necessario copiare i singoli elementi di un array all’altro int[] firstArray = {5, 10, 15, 20, 25 }; int[] secondArray = new int[5]; for (int i = 0; i < firstArray.length; i++) secondArray[i] = firstArray[i];

• Questo codice assegna ogni elemento di

firstArray al corrispondente elemento di secondArray.

28


Prof. Remo Misisca

STRUTTURE DATI : GLI ARRAYS

29

Passare un Array come argomento • Gli array sono oggetti. • I loro riferimenti possono essere passati a funzioni e

procedure come qualsiasi altra variabile di riferimento di un oggetto. showArray(numbers);

Address

5 10 15 20 25 30 35 40

Example: PassArray.java

public static void showArray(int[] array) { for (int i = 0; i < array.length; i++) System.out.print(array[i] + " "); }


Prof. Remo Misisca

STRUTTURE DATI : GLI ARRAYS

30

Confrontare gli Array • L’operatore == stabilisce solo se i riferimenti (I

puntatori) degli array puntano allo stesso oggetto array. int[] firstArray = { 5, 10, 15, 20, 25 }; int[] secondArray = { 5, 10, 15, 20, 25 }; if (firstArray == secondArray) // Questo è un errore. System.out.println(“Sono lo stesso array."); else System.out.println(“Non sono gli stessi array.");


Prof. Remo Misisca

STRUTTURE DATI : GLI ARRAYS

Confrontare gli Array: Esempio int[] firstArray = { 2, 4, 6, 8, 10 }; int[] secondArray = { 2, 4, 6, 8, 10 }; boolean arraysEqual = true; int i = 0; // First determine whether the arrays are the same size. if (firstArray.length != secondArray.length) arraysEqual = false;

// Next determine whether the elements contain the same data. while (arraysEqual && i < firstArray.length) { if (firstArray[i] != secondArray[i]) arraysEqual = false; i++; } if (arraysEqual) System.out.println("The arrays are equal."); else System.out.println("The arrays are not equal.");

31


Prof. Remo Misisca

STRUTTURE DATI : GLI ARRAYS

32

Esercitazione 1 : Scrivere una procedura che: 1. verifica se due array dati come input sono o meno uguali 2. Se sono uguali risponde “Gli array sono uguali”. Altrimenti risponde “Gli array sono diversi”.


Prof. Remo Misisca

STRUTTURE DATI : GLI ARRAYS

33

Esercitazione 2 : Scrivere una procedura “InizializzaVettore” che crea un vettore di 10 elementi e lo valorizza con dei dati numerici chiesti all’utente. Esercitazione 3 : Dato il vettore dell’esercitaizone precedente scrivi il programma/la procedure che : a) Trova e stampa il valore Massimo b) Trova e stamp ail valore Minimo c) Stampa la somma di tutti i valori d) Stampa la media di tutti I valori


Issuu converts static files into: digital portfolios, online yearbooks, online catalogs, digital photo albums and more. Sign up and create your flipbook.