Programmazione strutturata IV e Gli array. Dove siamo. Un esercizio. Oggi. Schema 1. Prima idea. 7. Programmazione strutturata 4 & Array

Documenti analoghi
Esercitazione 6. Array

Istruzioni iterative. Istruzioni iterative

Algebra di Boole: Concetti di base. E un algebra basata su tre operazioni logiche

osservazione: 1 MCD(m,n) min(m,n) = si provano i numeri compresi tra 1 e min(m,n) conviene iniziare da min(m,n) e scendere verso 1

Fondamenti di Informatica

6 - Blocchi e cicli. Programmazione e analisi di dati Modulo A: Programmazione in Java. Paolo Milazzo

Compitino di Laboratorio di Informatica CdL in Matematica 13/11/2007 Teoria Compito A

Errori frequenti Cicli iterativi Array. Cicli e array. Laboratorio di Programmazione I. Corso di Laurea in Informatica A.A.

Allocazione Dinamica della Memoria

Iterazione determinata e indeterminata

Fondamenti di Informatica 1. Prof. B.Buttarazzi A.A. 2010/2011

Laboratorio di Programmazione Lezione 2. Cristian Del Fabbro

PROGRAMMAZIONE STRUTTURATA

Calcolare x n = x x x (n volte)

Variabili. Unità 2. Domenico Daniele Bloisi. Corso di Programmazione e Metodi Numerici Ingegneria Aerospaziale BAER

Costanti e Variabili

ELEMENTI DI INFORMATICA L-B. Ing. Claudia Chiusoli

A lezione sono stati presentati i seguenti passi per risolvere un problema:

Tipi di dato strutturati: Array

PROGRAMMAZIONE: Le strutture di controllo

public static boolean occorre (int[] a, int n) { int i = 0; boolean trovato = false;

Programmare in C. Esempio: Algoritmo del Risveglio

Applicando lo stesso meccanismo al tipo puntatore, possiamo dichiarare un array di puntatori:

Istruzioni di ripetizione in Java 1

Esercizi Programmazione I

Le basi del linguaggio Java

INFORMATICA. Strutture iterative

Le Strutture di controllo Del Linguaggio C. Prof. Francesco Accarino IIS Altiero Spinelli Sesto San Giovanni

Introduzione all algebra

Iterazione (introduzione)

5 - Istruzioni condizionali

Università degli studi di Roma Tor Vergata Ingegneria Medica Informatica I Programma del Corso

Prima lezione di laboratorio. I mattoni di base di un programma Java. Riassunto. Comandi Unix. Oggi. Blog & Group.

SCHEMI DI MATEMATICA

PREPARAZIONE ALLE GARE DI MATEMATICA - CORSO BASE

Riassunto. La programmazione OO. Oggi. Esempio

Programmazione strutturata

Indice. Prefazione. 3 Oggetti e Java 53

LABORATORIO DI PROGRAMMAZIONE 1 CORSO DI LAUREA IN MATEMATICA UNIVERSITÀ DEGLI STUDI DI MILANO III Indice

Prima lezione di laboratorio. I mattoni di base di un programma Java. Comandi Unix. Riassunto. Oggi. Un programma complicato.

Caratteri e stringhe

Un esempio per iniziare. Il controllo del programma in C. Altri cenni su printf() Esercizi (printf) printf( 8!=%d, fatt);

Argomenti della lezione. Criteri di divisibilità fattorizzazione m.c.m. e M.C.D. frazioni ed espressioni

Università di Roma Tor Vergata L6-1. iterazione: struttura di controllo per ripetere più volte uno stesso comando

Gocce di Java. Gocce di Java. Selezione e ripetizione. Pierluigi Crescenzi. Università degli Studi di Firenze

L Allocazione Dinamica della Memoria

Elementi di Informatica A. A. 2016/2017

Array multidimensionali e stringhe

Laboratorio di Python

Corso di Fondamenti di Informatica

Un esempio di if annidati

Problemi, algoritmi e oggetti

Riassunto. I mattoni di base di un programma Java. Oggi. Un programma complicato. Oggi. Perché è complicato? Stefano Mizzaro 1.

Appunti di informatica. Lezione 4 anno accademico Mario Verdicchio

7. Strutture di controllo

Progetto e analisi di algoritmi

Informatica B. Sezione D. Scuola di Ingegneria Industriale Laurea in Ingegneria Energetica Laurea in Ingegneria Meccanica

Esercizi. Andrea Marin. a.a. 2011/2012. Università Ca Foscari Venezia Laurea in Informatica Corso di Programmazione part-time

Linguaggio C. strutture di controllo: strutture iterative. Università degli Studi di Brescia. Docente: Massimiliano Giacomin

Linguaggio C: Espressioni

Programmazione in Java (I modulo)

Problema: calcolare il massimo tra K numeri

Problemi e algoritmi. Il che cosa ed il come. Il che cosa ed il come. Il che cosa e il come

Corso di Informatica

Sommario PREFAZIONE...XI CAPITOLO 1: INTRODUZIONE AI COMPUTER, A INTERNET E AL WEB... 1 CAPITOLO 2: INTRODUZIONE ALLA PROGRAMMAZIONE IN C...

Lezione 4. Problemi trattabili e soluzioni sempre più efficienti. Gianluca Rossi

Corso di Informatica B - Sezione D. Esercitazioni Linguaggio C

STRUTTURE DI CONTROLLO DEL C++

Appunti di informatica. Lezione 7 anno accademico Mario Verdicchio

a.a Codice corso: 21012, HOMEWORKS

Esercizi riassuntivi (Fondamenti di Informatica 2 Walter Didimo) Soluzioni

Programmazione = decomposizione basata su astrazioni

ESERCIZI DI PROGRAMMAZIONE. - condizionali e cicli -

Esempio: Problema 2 Il Progetto degli Algoritmi (Il linguaggio degli schemi a blocchi: seconda parte)

Fondamenti di Programmazione. Strutture di controllo

Stringhe e allocazione dinamica della memoria

Linguaggio C: PUNTATORI

Esercizi per il corso di Architettura dei Calcolatori. Anno accademico 2008/09. Si prevede l utilizzo dell emulatore Eniac ( presentato a lezione )

Linguaggio C. tipi di dati definiti dall utente. Università degli Studi di Brescia. Docente: Massimiliano Giacomin

Piccolo teorema di Fermat

Due numeri naturali non nulli a, b tali che MCD(a,b) = 1 si dicono coprimi o relativamente primi.

Correttezza (prima parte)

Introduzione ai puntatori in C Definizione

Unità Didattica 2 Linguaggio C. Espressioni, Operatori e Strutture linguistiche per il controllo del flusso

Istruzioni Condizionali

Laboratorio di Programmazione I Compitino (Vers. C)

Concetti base programmazione. Antonio Gallo

Introduzione alla programmazione Algoritmi e diagrammi di flusso. Sviluppo del software

PON Liceo Scientifico Leonardo da Vinci Vallo della Lucania Nuovi percorsi matematici: Osservare, descrivere, costruire.

Elementi di Algebra e di Matematica Discreta Numeri interi, divisibilità, numerazione in base n

Programmazione I - Laboratorio

Le strutture di controllo in C++

Puntatori. Fondamenti di Programmazione

Elementi di C++ di base

Monomi L insieme dei monomi

Dizionari. Hashtables.

Appunti del corso di Informatica 1 (IN110 Fondamenti) 5 Rappresentazione delle informazioni

HOMEWORKS. in modo che il programma stampi N ripetizioni della stringa HelloWorld (su righe diverse), con N inserito dall utente.

Il linguaggio C Strutture

Algoritmi e basi del C

Transcript:

Programmazione strutturata IV e Gli array Stefano Mizzaro Dipartimento di matematica e informatica Università di Udine http://www.dimi.uniud.it/mizzaro/ mizzaro@uniud.it Programmazione, lezione 7 18/10/2013 Dove siamo Programmazione strutturata Strutture di controllo Sequenza: ; e { Selezione: if, if/, switch/case Iterazione: while, do/while, for Equivalenze, ++ e --, errori tipici, regole di buona programmazione, esempi, Sviluppo incrementale Leggi.java S. Mizzaro - Prog. strutt. 4 & Array 2 Oggi Esempio Introduzione agli array Un esercizio Scrivere un programma per calcolare il massimo comun divisore di due numeri naturali Facciamolo insieme Diciamo, per fissare le idee, che i due numeri sono memorizzati nelle variabili x e y S. Mizzaro - Prog. strutt. 4 & Array 3 S. Mizzaro - Prog. strutt. 4 & Array 4 Prima idea Schema 1 Usiamo un ciclo che fa assumere alla variabile i tutti i valori da 1 fino al minimo dei due numeri x e y Per ogni valore di i verifichiamo se i è un divisore sia di x sia di y Se lo è, lo memorizziamo in una variabile mcd L ultimo divisore che troviamo (che memorizziamo in mcd) è il massimo schema S. Mizzaro - Prog. strutt. 4 & Array 5 S. Mizzaro - Prog. strutt. 4 & Array 6 Stefano Mizzaro 1

Prima versione "Per i che va da 1 al minimo fra x e y" "se i divide x e y allora metto i in mcd" "Stampo mcd" for (i = 1; i <= "minimo fra x e y"; i++) { if ("i e' un divisore di x e y") "Stampo mcd" for (i = 1; i <= ((x < y)? x : y); i++) { if ((x % i == 0) && (y % i == 0)) S. Mizzaro - Prog. strutt. 4 & Array 7 Seconda idea Mai accontentarsi Ma se invece di incrementare i e aspettare di trovare l ultimo divisore facciamo al contrario? Il ciclo che fa assumere a i tutti i valori dal minimo di x e y fino a 1 Per ogni valore di i verifichiamo se i è un divisore sia di x sia di y Il primo divisore che troviamo è il massimo schema S. Mizzaro - Prog. strutt. 4 & Array 8 Schema 2 Seconda versione for (i = ((x < y)? x : y); i >= 1; i--) if ((x % i == 0) && (y % i == 0)) { break; mcd = 1; i = ((x < y)? x : y); while (i >= 1 && mcd == 1) { if ((x % i == 0) && (y % i == 0)) i--; S. Mizzaro - Prog. strutt. 4 & Array 9 S. Mizzaro - Prog. strutt. 4 & Array 10 Confronto Qual è la migliore? La seconda versione è più veloce Nella prima i deve assumere sempre tutti i min (x,y) valori Nella seconda assume tutti i min(x,y) valori solo se x e y sono primi fra loro Meno iterazioni del ciclo = più veloce Meno iterazioni = meno valori assunti da i Terza idea Mai accontentarsi!!!! Ci sono altri valori di i che possiamo escludere? Cioè: ci sono valori di i che non sono senz altro un MCD? Sì! Dato un numero k, quanto grande è, al massimo, il suo massimo divisore? (escluso k stesso) (quindi non dimentichiamoci di min(x,y) ) schema S. Mizzaro - Prog. strutt. 4 & Array 11 S. Mizzaro - Prog. strutt. 4 & Array 12 Stefano Mizzaro 2

Schema 3 Terza versione min = ((x < y)? x : y); if ((x % min == 0) && (y % min == 0)) mcd = min; for (i = min/2; i >= 1; i--) if ((x % i == 0) && (y % i == 0)) { break; Anche qui il break interrompe min evita calcoli inutili (e se min è dispari?) S. Mizzaro - Prog. strutt. 4 & Array 13 S. Mizzaro - Prog. strutt. 4 & Array 14 Quarta idea! Schema 4 MAI ACCONTENTARSI!!!! E ricordare che ragionare a livello del codice non è sempre il metodo migliore Idea completamente diversa, basata su una proprietà algebrica (Euclide) Se x = y mcd(x,y) = x = y Se x > y mcd(x,y) = mcd(x y, y) Possiamo sfruttarla per decrementare x e y fino a quando sono uguali schema S. Mizzaro - Prog. strutt. 4 & Array 15 S. Mizzaro - Prog. strutt. 4 & Array 16 Quarta versione while (x!= y) if (x > y) x = x - y; y = y - x; System.out.println(x); Più elegante Più sintetico Più efficiente Meglio di così cosa vogliamo? Quinta versione while (x!= 0 && y!= 0) if (x > y) x = x % y; y = y % x; System.out.println(x==0?y:x); Fare più volte x = x - y è equivalente a fare un unica volta x = x % y Quando l ultimo resto è zero, un numero è multiplo dell altro, e il risultato è nell altra variabile Esempi di while for S. Mizzaro - Prog. strutt. 4 & Array 17 S. Mizzaro - Prog. strutt. 4 & Array 18 Stefano Mizzaro 3

Schema 5 Schemi 1-5 S. Mizzaro - Prog. strutt. 4 & Array 19 S. Mizzaro - Prog. strutt. 4 & Array 20 Gli array (Cap. 4) Variabile: Scatola Con nome, valore e tipo Array: Sequenza di scatole, ognuna delle quali Ha un nome (posizione) Contiene un valore È di un tipo (= per tutte) x 12.34 a 12.34 3.14 0.43 3E-12 0.98 0.01 S. Mizzaro - Prog. strutt. 4 & Array 21 0 1 2 3 4 5 Esempio Programma che deve memorizzare 10 valori di temperatura Uso 10 variabili double temperatura1, temperatura2,, temperatura10?? Uso un array temperature di 10 posizioni di double Posso comunque accedere ad ogni singola scatola tramite la posizione (la prima, la seconda, ) temperature 0 1 2 3 4 5 6 7 8 9 20.5 20.0 19.8 19.4 20.4 21.6 22.0 21.9 21.0 21.1 S. Mizzaro - Prog. strutt. 4 & Array 22 In Java double[] temperature; temperature = new double[10]; temperature[0] = 20.5; temperature[1] = 20.0; temperature[2] = 19.8; temperature[3] = 19.4; temperature[4] = 20.4; temperature[5] = 21.6; System.out.print(temperature[1]); System.out.print(temperature[5]); temperature[5] = temperature[4]; temperature[5] = temperature[5]+1; temperature[5+1] = temperature[5]; temperature 0 1 2 3 4 5 6 7 8 9 20.5 20.0 19.8 19.4 20.4 21.6 22.0 21.9 21.0 21.1 S. Mizzaro - Prog. strutt. 4 & Array 23 Sintassi Dichiarazione tipo[] nome; Es.: double[] temperature; Allocazione nome = new tipo[lunghezza]; Es.: temperature = new double[10]; Uso nome[posizione] Es.: temperature[5+1] = temperature[5]; S. Mizzaro - Prog. strutt. 4 & Array 24 Stefano Mizzaro 4

Vantaggio degli array Gestione uniforme Ad es., per azzerare tutte le temperature temperature[0] = 0; temperature[1] = 0; temperature[2] = 0; temperature[9] = 0; for (int i = 0; i <= 9; i++) temperature[i] = 0; S. Mizzaro - Prog. strutt. 4 & Array 25 Gestione uniforme Calcolare la media delle temperature double[] temperature; temperature = new double[10]; double media = 0; for (int i = 0; i <= 9; i++) media = media + temperature[i]; System.out.print(media/10); Fatelo con le 10 variabili e poi fatelo per 100 temperature (N.B. Brutti i letterali ) S. Mizzaro - Prog. strutt. 4 & Array 26 Dichiarazione Simile alle dichiarazioni di variabili Si usano le [] dopo il tipo (meglio! Array di tipo ) o dopo il nome int[] a1; int i; char[] a2, a3; char c; double[] a4; int a1[], i; char a2[], a3[], c; double a4[]; S. Mizzaro - Prog. strutt. 4 & Array 27 Allocazione Non c era per le variabili, serve per allocare la memoria necessaria per gli elementi Si usano new [lunghezza] (numero di elementi) a1 = new int[10]; a2 = new char[12]; a3 = new char[5]; a4 = new double[7]; Dichiarazione e allocazione si possono fare insieme int a1[] = new int[10], i; char a2[] = new char[12], a3[] = new char[5], c; double[] a4 = new double[7]; S. Mizzaro - Prog. strutt. 4 & Array 28 Inizializzazione È possibile assegnare valori iniziali a un array int[] giornimese = {31,28,31,30,31,30,31,31,30,31,30,31; int[] giornimese; giornimese={31,28,31,30,31,30,31,31,30,31,30,31; int[] giornimese; giornimese = new int[] {31,28,31,30,31,30,31,31,30,31,30,31; Uso Per ora, ogni posizione è come una variabile (si può anche lavorare su tutto un array) Si usano le [] e un indice (un espressione int) Però l indice può essere un espressione! (for, ) L indice del primo elemento è 0 (zero)!!! a1[4] = 5; if (a1[4] > i) { a2[10] = 'p'; a4[0] = a4[1]; S. Mizzaro - Prog. strutt. 4 & Array 29 S. Mizzaro - Prog. strutt. 4 & Array 30 Stefano Mizzaro 5

Il.length C è modo di sapere la lunghezza di un array (il numero di locazioni) nomearray.length th, non ht!!!!!!!!!!!!!! char[] a = new char[12]; char[] b = {'a', 's', 'd'; System.out.println(a.length); System.out.println(b.length); System.out.println(b[b.length 2]); System.out.println(b[a.length/6]); S. Mizzaro - Prog. strutt. 4 & Array 31 Esercizi Azzerare un array di int, diciamo di nome a (ossia, assegnare zero a tutti gli elementi di a) Assegnare 0, 1, 2, agli elementi di a Incrementare di 1 ogni elemento dell array a Assegnare 1 agli elementi di a di indice dispari e 2 a quelli di indice pari S. Mizzaro - Prog. strutt. 4 & Array 32 Esercizi Azzerare un array di int, diciamo di nome a (ossia, assegnare zero a tutti gli elementi di a) a[i] = 0; Assegnare 0, 1, 2, agli elementi di a a[i] = i; Incrementare di 1 ogni elemento dell array a a[i] = a[i] + 1; // o a[i]++, o ++a[i] S. Mizzaro - Prog. strutt. 4 & Array 33 Esercizi Assegnare 1 agli elementi di a di indice dispari e 2 a quelli di indice pari if (i % 2!= 0) a[i] = 1; a[i] = 2; a[i] = (i % 2!= 0)? 1 : 2; a[i] = 2 - (i % 2); S. Mizzaro - Prog. strutt. 4 & Array 34 Osservazioni Il primo elemento di un array ha indice ZERO L ultimo elemento di un array a ha indice a.length 1 (MENO UNO!) Nei cicli for che spazzolano un array a, i < a.length invece di i <= a.length - 1 è più comodo, ed è frequente ma ricordarsi gli Errori di uno e fare attenzione! S. Mizzaro - Prog. strutt. 4 & Array 35 Il final e le dimensioni degli array int[] a = new int[10]; final int N = 10; int[] a = new int[n]; Modifiche più semplici nel secondo caso for (int i = 0; i < N; i++) (es.: da 10 a 1000 ) Ma in Java c è il.length S. Mizzaro - Prog. strutt. 4 & Array 36 Stefano Mizzaro 6

Riassunto ~1/4 del corso Mattoni Programmazione strutturata Array (rudimenti) Ho seguito il libro, fino a 4.3, pg. 85 Eserciziario: capp. 1 e 2 Prossima lezione Sempre array S. Mizzaro - Prog. strutt. 4 & Array 37 Stefano Mizzaro 7