Java: esempi di programmazione

Documenti analoghi
Java: esempi di programmazione

Pascal: esempi di programmazione

Esempi di programmazione in C

Scheme: esempi di programmazione

Scheme: esempi di programmazione

BC: linguaggio aritmetico a precisione arbitraria

BC: linguaggio aritmetico a precisione arbitraria

Pseudocodifica e Progammazione

Algoritmi e notazioni

Algoritmi e notazioni

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

Laboratorio di Programmazione Lezione 2. Cristian Del Fabbro

Python per sopravvivere

ALGORITMI DI ORDINAMENTO E RICERCA BINARIA. Docente: Giorgio Giacinto AA 2008/2009. problema dell ordinamento in modi diversi

Algoritmi di Ricerca. Esempi di programmi Java

Sviluppo di progetti. metodologie di soluzione di un problema. iterazione o ricorsione nel pensare per OGGETTI

Approcci nella soluzione di un problema

Dal linguaggio macchina al C

Informatica/ Ing. Meccanica e Ing. Edile/ Prof. Verdicchio/ 16/07/2013 / Foglio delle domande / VERSIONE 1

Comunicazioni di servizio. I metodi - III. Oggi. Dove siamo. Esempio. Parametri di tipo array. Stefano Mizzaro 1. Domani non c è lezione :-(

Cast implicito. Il cast è fatto automaticamente quando un tipo più basso viene assegnato ad un tipo più alto. byte short int long float double

Algoritmi di Ricerca. Esempi di programmi Java

Corso di Programmazione

COMPITO DI LABORATORIO DI PROGRAMMAZIONE Dicembre Alcune Soluzioni

Programmazione in Java (I modulo) Lezione 11: Metodi della classe Math

Esercizi in Java. 22 novembre Anni Bisestili 3. 2 Massimo e Media di un array di 10 elementi 3. 3 Primi 10 Numeri Triangolari 4

Capitolo 16 Iterazione

Cominciamo con un esempio... Utilizzando un sottoprogramma 16/12/2017

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

Array di array. Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 1. Dispensa 03. A. Miola Febbraio 2008

liceo B. Russell PROGRAMMAZIONE INDIRIZZO: SCIENTIFICO SCIENZE APPLICATE BIENNIO: SECONDA DISCIPLINA: INFORMATICA

Algoritmi di Ricerca. Esempi di programmi Java. Prof. Angela Bonifati

Fondamenti di Informatica

Istruzioni Ripetitive

Fondamenti di Informatica. Algoritmi di Ricerca e di Ordinamento

Algoritmo di ordinamento sul posto che ha tempo di esecuzione :

Istruzioni Ripetitive

Programmazione in Java (I modulo)

Esercizi riassuntivi (Fondamenti di Informatica 2 Walter Didimo) Soluzioni

Programmazione 1 A.A. 2015/2016

! Intro metodi/sottoprogrammi. ! Definizione (intestazione e corpo) e uso. ! Parametri formali e attuali, associazione

Laboratorio di Programmazione Appunti sulla lezione 5: Algoritmi di ordinamento (cont.) Alessandra Raffaetà. Bubblesort

Esercitazioni del Corso di Fondamenti di Informatica ARRAY. Prof. Giuseppe Manco. A cura di Ing. Andrea Tagarelli

come segue: data una collezione C di elementi e una un elemento che verifica la proprietà P

Laboratorio di Programmazione Appunti sulla lezione 4: Divide et impera e algoritmi di ordinamento

Laboratorio di Programmazione Appunti sulla lezione 5: Algoritmi di ordinamento (cont.) Alessandra Raffaetà

A. Ferrari. algoritmi notevoli. Python. Alberto Ferrari Informatica

LABORATORIO DI PROGRAMMAZIONE 2 Corso di laurea in matematica. Algoritmi ricorsivi

Indice PARTE A. Prefazione Gli Autori Ringraziamenti dell Editore La storia del C. Capitolo 1 Computer 1. Capitolo 2 Sistemi operativi 21 XVII XXIX

Algoritmi di ordinamento e ricerca. Classe SelSort.java

Capitolo 9. Tipi enumerativi, tipi generici e interfacce. c 2005 Pearson Education Italia Capitolo 9-1 / 73

Fondamenti di informatica 2 Claudio Biancalana. Esercitazione capitolo 19 Array

definire definire una una funzione in termini di se stessa compare una chiamata alla funzione stessa identificare un caso base

Corso di Fondamenti di Informatica

definire definire una una funzione in termini di se stessa compare una chiamata alla funzione stessa identificare un caso base

Metodi statici. Dichiarazione e chiamata di metodi statici

Informatica (A-K) 5. Algoritmi e pseudocodifica

Fondamenti di Informatica 6. Algoritmi e pseudocodifica

System.out.print("\tATTENZIONE: hi inserito un valore non valido!\n");

Fondamenti di Programmazione

Array. Walter Didimo

Gocce di Java. Gocce di Java. Metodi e ricorsione. Pierluigi Crescenzi. Università degli Studi di Firenze

Alberi. Strutture dati: Alberi. Alberi: Alcuni concetti. Alberi: definizione ricorsiva. Alberi: Una prima realizzazione. Alberi: prima Realizzazione

RicercaSequenziale import public class public static void throws new new new int int int char boolean true true false false out true out out else

Insieme.java. Printed by Paolo. Feb 24, 04 16:44 Page 1/1 class Insieme { private int[] elementi; Tuesday February 24, /10

Array e Oggetti. Corso di Laurea Ingegneria Informatica Fondamenti di Informatica. Dispensa 17. A. Miola Gennaio 2012

Laboratorio di Programmazione Appunti sulla lezione 4: Divide et impera e algoritmi di ordinamento

Esempio: Tombola! Vogliamo progettare una applicazione che realizza il gioco della tombola Versione semplificata: un banco, un

Note ed esercizi aggiuntivi

import public static boolean int boolean false boolean false boolean false boolean false true false

Introduzione a Java e all'ambiente di sviluppo

Semplici Algoritmi di Ordinamento

Tecniche iterative. Walter Didimo

Ricerca binaria. Corso di Algoritmi e Strutture Dati Esercitazione 4

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

Laboratorio di Informatica L-A 1

Corso di Fondamenti di Programmazione canale E-O. Un esempio. Funzioni ricorsive. La ricorsione

Paolo Bison. Fondamenti di Informatica A.A. 2006/07 Università di Padova

Programmazione Procedurale in Linguaggio C++

array in Java come disporre di un numero arbitrariamente alto di variabili omogenee

Algoritmi e Strutture Dati

Algoritmi di Ricerca. Esempi di programmi Java

Scheme: struttura del programma e campo di azione

Array mono- e bi-dimensionali Cicli while e do-while

Iterazione (introduzione)

Ricorsione. La ricorsione consiste nella possibilità di definire una funzione in termini di se stessa

Algoritmi e Strutture Dati. Capitolo 3 Strutture dati elementari

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

Algoritmi e Strutture Dati. Capitolo 4 Ordinamento

Corso di Laurea Ingegneria Elementi di Informatica. Iterazione. C. Limongelli. Iterazione

Introduzione. Programma didattico

Corso di Laurea Ingegneria Informatica Fondamenti di Informatica

Esercizi su array di array

RICERCA BINARIA...1 ALBERO BINARIO DI RICERCA (ABR)...3 RICORSIONE...4 ESEMPI DI RICORSIONE IN VISUAL BASIC...5 ESEMPI DI RICORSIONE IN C / C++...

E17 Esercizi sugli Array in Java

Esercitazione 5. Procedure e Funzioni Il comando condizionale: switch

INPUT COMPUTER OUTPUT

Esame di Algoritmi e Strutture Dati Corso di Laurea in Ingegneria Informatica Canali A-L, M-Z

Transcript:

Java: esempi di programmazione Problemi elementari di programmazione.................. 1025 Somma tra due numeri positivi........................ 1025 Moltiplicazione di due numeri positivi attraverso la somma 1026 Divisione intera tra due numeri positivi.................1027 Elevamento a potenza................................ 1027 Radice quadrata......................................1028 Fattoriale............................................1028 Massimo comune divisore............................ 1029 Numero primo....................................... 1029 Scansione di array...................................... 1030 Ricerca sequenziale.................................. 1030 Ricerca binaria...................................... 1031 Algoritmi tradizionali................................... 1032 Bubblesort.......................................... 1032 Torre di Hanoi...................................... 1033 Quicksort........................................... 1033 Permutazioni........................................ 1035 Questo capitolo raccoglie solo alcuni esempi di programmazione, in parte già descritti in altri capitoli. Lo scopo di questi esempi è solo didattico, utilizzando forme non ottimizzate per la velocità di esecuzione. a2» 2013.11.11 --- Copyright Daniele Giacomini -- appunti2@gmail.com http://informaticalibera.net Problemi elementari di programmazione.................. 1025 Somma tra due numeri positivi........................ 1025 Moltiplicazione di due numeri positivi attraverso la somma 1026 Divisione intera tra due numeri positivi.................1027 Elevamento a potenza................................ 1027 Radice quadrata......................................1028 Fattoriale............................................1028 Massimo comune divisore............................ 1029 Numero primo....................................... 1029 Scansione di array...................................... 1030 Ricerca sequenziale.................................. 1030 Ricerca binaria...................................... 1031 Algoritmi tradizionali................................... 1032 Bubblesort.......................................... 1032 Torre di Hanoi...................................... 1033 Quicksort........................................... 1033 Permutazioni........................................ 1035 Problemi elementari di programmazione In questa sezione vengono mostrati alcuni algoritmi elementari portati in Java. Somma tra due numeri positivi Il problema della somma tra due numeri positivi, attraverso l incremento unitario, è descritto nella sezione 62.3.1. java SommaApp <x> <y> Somma esclusivamente valori positivi. class SommaApp static int somma (int x, int y) 1025

int z = x; for (i = 1; i <= y; i++) Inizio del programma. System.out.println (x + "+" + y + "=" + somma (x, y)); In alternativa si può tradurre il ciclo for in un ciclo while : static int somma (int x, int y) int z = x; int i = 1; while (i <= y) Moltiplicazione di due numeri positivi attraverso la somma Il problema della moltiplicazione tra due numeri positivi, attraverso la somma, è descritto nella sezione 62.3.2. java MoltiplicaApp <x> <y> Moltiplica esclusivamente valori positivi. class MoltiplicaApp static int moltiplica (int x, int y) for (i = 1; i <= y; i++) z = z + x; Inizio del programma. System.out.println (x + "*" + y + "=" + moltiplica (x, y)); In alternativa si può tradurre il ciclo for in un ciclo while : static int moltiplica (int x, int y) int i = 1; while (i <= y) z = z + x; Divisione intera tra due numeri positivi Il problema della divisione tra due numeri positivi, attraverso la sottrazione, è descritto nella sezione 62.3.3. java DividiApp <x> <y> Divide esclusivamente valori positivi. class DividiApp static int dividi (int x, int y) int i = x; while (i >= y) i = i - y; Inizio del programma. System.out.println (x + ":" + y + "=" + dividi (x, y)); Elevamento a potenza Il problema dell elevamento a potenza tra due numeri positivi, attraverso la moltiplicazione, è descritto nella sezione 62.3.4. java ExpApp <x> <y> Elevamento a potenza di valori positivi interi. class ExpApp static int exp (int x, int y) int z = 1; for (i = 1; i <= y; i++) z = z * x; Inizio del programma. System.out.println (x + "**" + y + "=" + exp (x, y)); In alternativa si può tradurre il ciclo for in un ciclo while : static int exp (int x, int y) int z = 1; int i = 1; while (i <= y) z = z * x; Infine, si può usare anche un algoritmo ricorsivo: 1026 1027

static int exp (int x, int y) if (x == 0) return 0; if (y == 0) return 1; return (x * exp (x, y-1)); Radice quadrata Il problema della radice quadrata è descritto nella sezione 62.3.5. java RadiceApp <x> Estrazione della parte intera della radice quadrata. class RadiceApp static int radice (int x) int t = 0; t = z * z; if (t > x) È stato superato il valore massimo. z--; Teoricamente, non dovrebbe mai arrivare qui. Inizio del programma. System.out.println ("radq(" + x + ")=" + radice (x)); In alternativa, l algoritmo si può tradurre in modo ricorsivo: static int fattoriale (int x) if (x > 1) return (x * fattoriale (x - 1)); return 1; Teoricamente non dovrebbe arrivare qui. Massimo comune divisore Il problema del massimo comune divisore, tra due numeri positivi, è descritto nella sezione 62.3.7. java MCDApp <x> <y> Determina il massimo comune divisore tra due numeri interi positivi. class MCDApp static int mcd (int x, int y) while (x!= y) if (x > y) x = x - y; y = y - x; return x; Inizio del programma. System.out.println ("Il massimo comune divisore tra " + x + " e " + y + " è " + mcd (x, y)); Fattoriale Il problema del fattoriale è descritto nella sezione 62.3.6. java FattorialeApp <x> Calcola il fattoriale di un valore intero. class FattorialeApp static int fattoriale (int x) int i = x - 1; while (i > 0) x = x * i; i--; return x; Inizio del programma. System.out.println (x + "! = " + fattoriale (x)); 1028 Numero primo Il problema della determinazione se un numero sia primo o meno, è descritto nella sezione 62.3.8. java PrimoApp <x> Determina se un numero sia primo o meno. class PrimoApp static boolean primo (int x) boolean primo = true; int i = 2; int j; while ((i < x) && primo) j = x / i; j = x - (j * i); if (j == 0) primo = false; return primo; 1029

Inizio del programma. if (primo (x)) System.out.println (x + " è un numero primo"); System.out.println (x + " non è un numero primo"); Scansione di array In questa sezione vengono mostrati alcuni algoritmi, legati alla scansione degli array, portati in Java. Ricerca sequenziale Il problema della ricerca sequenziale all interno di un array, è descritto nella sezione 62.4.1. java RicercaSeqApp class RicercaSeqApp static int ricercaseq (int[] lista, int x, int a, int z) Scandisce l array alla ricerca dell elemento. for (i = a; i <= z; i++) if (x == lista[i]) return i; La corrispondenza non è stata trovata. return -1; Inizio del programma. int[] lista = new int[args.length-1]; Conversione degli argomenti della riga di comando in numeri. for (i = 1; i < args.length; i++) lista[i-1] = Integer.valueOf(args[i]).intValue (); Esegue la ricerca. In Java, gli array sono oggetti e come tali vengono passati per riferimento. i = ricercaseq (lista, x, 0, lista.length-1); Visualizza il risultato. System.out.println (x + " si trova nella posizione " + i + "."); Esiste anche una soluzione ricorsiva che viene mostrata nella subroutine seguente: static int ricercaseq (int[] lista, int x, int a, int z) if (a > z) La corrispondenza non è stata trovata. return -1; if (x == lista[a]) return a; return ricercaseq (lista, x, a+1, z); Ricerca binaria Il problema della ricerca binaria all interno di un array, è descritto nella sezione 62.4.2. java RicercaBinApp.java class RicercaBinApp static int ricercabin (int[] lista, int x, int a, int z) int m; Determina l elemento centrale. m = (a + z) / 2; if (m < a) Non restano elementi da controllare: l elemento cercato non c è. return -1; if (x < lista[m]) Si ripete la ricerca nella parte inferiore. return ricercabin (lista, x, a, m-1); if (x > lista[m]) Si ripete la ricerca nella parte superiore. return ricercabin (lista, x, m+1, z); m rappresenta l indice dell elemento cercato. return m; Inizio del programma. int[] lista = new int[args.length-1]; Conversione degli argomenti della riga di comando in numeri. for (i = 1; i < args.length; i++) lista[i-1] = Integer.valueOf(args[i]).intValue (); Esegue la ricerca. In Java, gli array sono oggetti e come tali vengono passati per riferimento. i = ricercabin (lista, x, 0, lista.length-1); Visualizza il risultato. System.out.println (x + " si trova nella posizione " + i + "."); 1030 1031

Algoritmi tradizionali In questa sezione vengono mostrati alcuni algoritmi tradizionali portati in Java. Bubblesort Il problema del Bubblesort è stato descritto nella sezione 62.5.1. Viene mostrata prima una soluzione iterativa e successivamente il metodo bsort in versione ricorsiva. java BSortApp class BSortApp static int[] bsort (int[] lista, int a, int z) int j; int k; Inizia il ciclo di scansione dell array. for (j = a; j < z; j++) Scansione interna dell array per collocare nella posizione j l elemento giusto. for (k = j+1; k <= z; k++) if (lista[k] < lista[j]) Scambia i valori. lista[k] = lista[j]; lista[j] = scambio; In Java, gli array sono oggetti e come tali vengono passati per riferimento. Qui si restituisce ugualmente un riferimento all array ordinato. return lista; Inizio del programma. int[] lista = new int[args.length]; Conversione degli argomenti della riga di comando in numeri. for (i = 0; i < args.length; i++) lista[i] = Integer.valueOf(args[i]).intValue (); Ordina l array. In Java, gli array sono oggetti e come tali vengono passati per riferimento. bsort (lista, 0, args.length-1); Visualizza il risultato. for (i = 0; i < lista.length; i++) System.out.println ("lista[" + i + "] = " + lista[i]); Segue il metodo bsort in versione ricorsiva: 1032 static int[] bsort (int[] lista, int a, int z) int k; if (a < z) Scansione interna dell array per collocare nella posizione a l elemento giusto. for (k = a+1; k <= z; k++) if (lista[k] < lista[a]) Scambia i valori. lista[k] = lista[a]; lista[a] = scambio; bsort (lista, a+1, z); return lista; Torre di Hanoi Il problema della torre di Hanoi è descritto nella sezione 62.5.3. java HanoiApp <n-anelli> <piolo-iniziale> <piolo-finale> class HanoiApp static void hanoi (int n, int p1, int p2) if (n > 0) hanoi (n-1, p1, 6-p1-p2); System.out.println ("Muovi l anello " + n + " dal piolo " + p1 + " al piolo " + p2 + "."); hanoi (n-1, 6-p1-p2, p2); Inizio del programma. int n; int p1; int p2; n = Integer.valueOf(args[0]).intValue (); p1 = Integer.valueOf(args[1]).intValue (); p2 = Integer.valueOf(args[2]).intValue (); hanoi (n, p1, p2); Quicksort L algoritmo del Quicksort è stato descritto nella sezione 62.5.4. java QSortApp class QSortApp static int part (int[] lista, int a, int z) Si assume che a sia inferiore a z. int i = a + 1; int cf = z; Inizia il ciclo di scansione dell array. Sposta i a destra. if ((lista[i] > lista[a]) (i >= cf)) break; 1033

Sposta cf a sinistra. if (lista[cf] <= lista[a]) break; cf--; if (cf <= i) È avvenuto l incontro tra i e cf. break; Vengono scambiati i valori. scambio = lista[cf]; lista[cf] = lista[i]; lista[i] = scambio; cf--; A questo punto lista[a..z] è stata ripartita e cf è la collocazione di lista[a]. scambio = lista[cf]; lista[cf] = lista[a]; lista[a] = scambio; A questo punto, lista[cf] è un elemento (un valore) nella giusta posizione. return cf; static int[] quicksort (int[] lista, int a, int z) int cf; if (z > a) cf = part (lista, a, z); quicksort (lista, a, cf-1); quicksort (lista, cf+1, z); In Java, gli array sono oggetti e come tali vengono passati per riferimento. Qui si restituisce ugualmente un riferimento all array ordinato. return lista; Inizio del programma. int[] lista = new int[args.length]; Conversione degli argomenti della riga di comando in numeri. for (i = 0; i < args.length; i++) lista[i] = Integer.valueOf(args[i]).intValue (); Ordina l array. In Java, gli array sono oggetti e come tali vengono passati per riferimento. quicksort (lista, 0, args.length-1); Visualizza il risultato. for (i = 0; i < lista.length; i++) System.out.println ("lista[" + i + "] = " + lista[i]); 1034 Permutazioni L algoritmo ricorsivo delle permutazioni è descritto nella sezione 62.5.5. java PermutaApp class PermutaApp static void permuta (int[] lista, int a, int z) int k; Se il segmento di array contiene almeno due elementi, si procede. if ((z - a) >= 1) Inizia un ciclo di scambi tra l ultimo elemento e uno degli altri contenuti nel segmento di array. for (k = z; k >= a; k--) Scambia i valori. lista[k] = lista[z]; lista[z] = scambio; Esegue una chiamata ricorsiva per permutare un segmento più piccolo dell array. permuta (lista, a, z-1); Scambia i valori. lista[k] = lista[z]; lista[z] = scambio; Visualizza la situazione attuale dell array. for (i = 0; i < lista.length; i++) System.out.print (" " + lista[i]); System.out.println (""); Inizio del programma. int[] lista = new int[args.length]; Conversione degli argomenti della riga di comando in numeri. for (i = 0; i < args.length; i++) lista[i] = Integer.valueOf(args[i]).intValue (); Esegue le permutazioni. permuta (lista, 0, args.length-1); 1035

1036