Liste, Code, Pile. Problema

Documenti analoghi
INFORMATICA GRAFICA - FONDAMENTI DI INFORMATICA Ing. Civile - Edile/Architettura Dott. Penzo SOLUZIONE PROVA SCRITTA DEL 16/09/2002.

Parcheggio.rtf 1/8 6 gennaio Prova di programmazione: parcheggio a pagamento

Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 2

Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 2

PILE E CODE. Pile (stack):

/** * VETTORE DINAMICO elementi */ private Vector elementi; /** * METODO COSTRUTTORE */ public coda() { elementi=new Vector(); }

Polimorfismo parametrico vs polimorfismo per inclusione

Classi Wrapper. int Integer float Float char Char byte Byte double Double. classe "wrapper"

Implementazione ADT: Alberi

Laboratorio di Programmazione Lezione 2. Cristian Del Fabbro

Algoritmi di Ricerca. Esempi di programmi Java

Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 2

// inizializzazione della biblioteca con utenti, libri e prestiti // non richiesta Biblioteca.inizializza();

Esempi di Problemi Iterativi

Algoritmi e Strutture Dati. Tipo di dato astratto e Strutture dati elementari

Linguaggi di programmazione II AA 2010/2011 Esercitazione 2

Metodi di una Collection

Esercizi della lezione 5 di Java

Corso di Laurea in Ingegneria Gestionale Esame di Informatica a.a settembre 2012

Esempi di Problemi Iterativi

Laboratorio di Programmazione Lezione 4. Cristian Del Fabbro

Algoritmi di Ricerca. Esempi di programmi Java

Ingegneria del Software

Definizione di classi con array di oggetti

Programmazione 1 A.A. 2015/2016

Corso di Laurea in Ingegneria Gestionale Esame di Informatica a.a febbraio 2013

Il linguaggio Java: aggiunte in Java 1.5

Studente (Cognome Nome):

Linguaggi Corso M-Z - Laurea in Ingegneria Informatica A.A Esercitazione. Programmazione Object Oriented in Java

Compute engine generici in RMI

QUEUE : considerazioni. QUEUE : considerazioni. QUEUE : esempio. QUEUE : esempio

Java, Oggetti e Strutture Dati di G. Callegarin - Edizioni CEDAM

Esercitazione 15. Il problema dello Sleeping Barber

sayhello public private protected return public class Greeter { public String sayhello() { String message = Hello, World! ; return message; } }

Programmare in Java. Olga Scotti

Le variabili. Olga Scotti

Prossime lezioni. Dai TDA agli oggetti. Riassunto. Riassunto TDA. Oggi. Stefano Mizzaro 1

SAPIENZA Università di Roma Facoltà di Ingegneria dell Informazione, Informatica e Statistica

La gestione dell input/output da tastiera La gestione dell input/output da file La gestione delle eccezioni

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

Realizzazione di Phone Plan. Soluzione - SimpleTime. Realizzazione e testing! Soluzione - SimpleTime. Soluzione - SimpleTime

Scope e visibilità per classi

Cognome Nome Matricola Postazione PC. Corso di Laurea in Ingegneria Gestionale Esame di Informatica - a.a Gennaio 2015

Corso di Laurea in Ingegneria Gestionale Esame di Informatica a.a luglio 2011

Studente (Cognome Nome): Corso di Informatica Corso di Laurea in Ingegneria Gestionale a.a Primo scritto 11 Gennaio 2008

Corso di Laurea Ingegneria Informatica Fondamenti di Informatica

Cifratura simmetrica

Concetti Base Eccezioni Eccezioni e Metodi Gerarchia di Eccezioni. Java: Eccezioni. Damiano Macedonio

Esercitazione 6. Tutor: Ing. Diego Rughetti. Anno Accademico 2007/2008

STRUTTURE DATI: OLTRE GLI ARRAY LISTE

Esempi di esercizi d esame

Classi astratte e progettazione OOP Esempio: l enciclopedia degli animali. Esempio Animali

Corso di Laurea in Ingegneria Gestionale Esame di Informatica a.a I scritto Febbraio 11 Febbraio 2011

Corso di Laurea in Ingegneria Gestionale Esame di Informatica a.a luglio 2011

Corso di Laurea in Ingegneria Gestionale Esame di Informatica - a.a luglio 2013

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

Studente (Cognome Nome): Corso di Informatica Corso di Laurea in Ingegneria Gestionale a.a Secondo Compitino 21 Dicembre 2006

Esempio su strutture dati dinamiche: ArrayList

Java vs Ocaml. Una prima analisi

Corso di Laurea in Ingegneria Gestionale Esame di Informatica a.a gennaio 2012

R. Focardi 2002 Laboratorio di Ingegneria del Software Slide 1. Applicazioni = programmi stand-alone

7 Esercitazione (svolta): Callback. Polling. Java RMI: callback. Server. Server. Client. Client. due possibilità:

Studente (Cognome Nome):

Corso di Laurea Ingegneria Civile Fondamenti di Informatica. Esercizi sui metodi. Carla Limongelli. Maggio Esercizi 1

IL LINGUAGGIO JAVA Input, Tipi Elementari e Istruzione Condizionale

Esempio: L EURO-CONVERTITORE (1) Scopo

Esempio: Interfacce. Gioco Interfacce

Complessità computazionale

Algebra di Boole: Concetti di base. Fondamenti di Informatica - D. Talia - UNICAL 1. Fondamenti di Informatica

Unità B2.1. I tipi di dato

Prova d Esame Compito A

Esempio: Interfacce. Gioco Interfacce

Fondamenti di Informatica. Dichiarazione, creazione e gestione di array in Java

Decomposizione per scelta

Compito di Programmazione, 22 marzo 2007 INFORMATICI E MULTIMEDIALI

Operazioni di scrittura e lettura con periferici in linguaggio Java

Corso di Laurea in Ingegneria Gestionale Esame di Informatica a.a giugno 2013

Laboratorio di Programmazione 1 [Java]

Tipi primitivi. Ad esempio, il codice seguente dichiara una variabile di tipo intero, le assegna il valore 5 e stampa a schermo il suo contenuto:

(VHUFLWD]LRQLGLEDVHVXOOH6RFNHWLQ-DYD 6RFNHWGLWLSRGDWDJUDP

Informatica 3 secondo recupero 13 Settembre 2002

Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 2

Informatica I. Ingegneria Medica. Prof. Diego Salamon

Esercizi Java. class somma2 { static int somma(int a,int b) {return a+b; }

ARRAY E STRINGHE. G. Frosini Slide 1

Polinomio di secondo grado: Calcolo delle soluzioni di una equazione di secondo grado: import GraphicIO.*; public class Polinomio2 {

Programmazione generica

Studente (Cognome Nome):

Classi astratte e progettazione OOP Esempio: l enciclopedia degli animali

Programmazione Orientata agli Oggetti in Linguaggio Java

Iterazioni. L istruzione while. while (condition) istruzione

Muoversi all interno di un Vector. Vector e Enumeration. Enumeration. Collezioni di oggetti: Vector. La classe Object. Aggiungere oggetti a un Vector

28/05/2015 Laura Ricci

Introduzione a Java. Riferimenti

Unità 2 I file binari

Programmazione 1 A.A. 2015/2016

12 - Introduzione alla Programmazione Orientata agli Oggetti (Object Oriented Programming OOP)

Progetto Automi e Linguaggi Parser svliluppato con JLex e cup

Fondamenti di Informatica T-1, 2010/2011 Modulo 2. Prova d Esame 5A di Mercoledì 13 Luglio 2011 tempo a disposizione 2h

Collezioni. (a cura del Prof. Marco Patella)

Transcript:

Liste, Code, Pile Informatica 3 - Esercitazioni 1 Problema Sei il titolare di un agenzia matrimoniale e devi assicurarti che le coppie da te create siano coppie stabili. Ci sono tante donne quanti uomini Ciascuno ordina tutti gli altri iscritti all agenzia a seconda della sua preferenza Come garantire il funzionamento dei matrimoni? Informatica 3 - Esercitazioni 2 1

Idea Per evitare che una coppia si separi bisogna evitare che ci siano: una coppia 1 formata da u1 e d1 una coppia 2 formata da u2 e d2 in cui u1 preferisca d2 a d1 e d2 preferisca u1 a suo marito u2. Se questo non accade, non può succedere che una coppia si lasci, perché se anche una persona non è sposata con la sua prima scelta, non c è una persona che preferisce e che la preferisce al consorte Informatica 3 - Esercitazioni 3 Classe PersonList public class PersonList { public Object person; public PersonList next; PersonList(Object p, PersonList next) { person = p; this.next = next; if (next == null) return person.tostring(); return ("" + person.tostring() + " " + next); Informatica 3 - Esercitazioni 4 2

Classe Man public class Man { String name; PersonList list; // pila public Man(String name) { this.name = name; list = null; public void push(woman w) { // gestisce le preferenze con una pila list = new PersonList(w, list); public Woman pop() { Object top = list.person; list = list.next; return (Woman) top; public String getlist() { return list.tostring(); return name; Informatica 3 - Esercitazioni 5 Classe Woman (1) public class Woman { String name; PersonList list; // testa PersonList rear; // ultimo elemento (coda) public Woman(String name) { this.name = name; list = null; rear = null; public void add(man w) { // gestisce gli uomini come una coda if (list == null) { list = new PersonList(w, list); rear = list; { rear.next = new PersonList(w, null); rear = rear.next; Informatica 3 - Esercitazioni 6 3

public boolean likes(man m) { PersonList ls = list; while ((ls!= null) && (ls.person!= m)) ls = ls.next; return (ls!= null); public void trimlist(man m) { // suppone che list contenga m if (list.person == m) { list = null; rear = null; { PersonList ls = list; while (ls.next.person!= m) ls = ls.next; ls.next = null; // molla m e tutti quelli sotto rear = ls; public String getlist() { if (list == null) return "nessuno"; return list.tostring(); return name; Informatica 3 - Esercitazioni 7 class Association { Object domain; Object range; Association next; Classe Association public Association(Object d, Object r, Association next) { domain = d; range = r; this.next = next; return ( "(" + domain + "," + range + ")" ); Informatica 3 - Esercitazioni 8 4

public class Relation { Association list; Classe Relation public Relation() { list = new Association(null, null, null); Association find(object target) { // return Assocation _before_ target in list Association cur = list; while ((cur.next!= null) && (cur.next.domain!= target)) cur = cur.next; return cur; Informatica 3 - Esercitazioni 9 public void map(object d, Object r) { Association onebefore = find(d); if (onebefore.next == null) // didn't find it, so append new item to list end onebefore.next = new Association(d, r, null); // did find it, so replace range onebefore.next.range = r; public Object lookup(object d) { Association onebefore = find(d); if (onebefore.next == null) // didn't find it, return null return null; return onebefore.next.range; String result = "("; Association cur = list; while (cur.next!= null) { result = result + cur.next; cur = cur.next; return result + ")"; Informatica 3 - Esercitazioni 10 5

Classe StableMarriage public class StableMarriage { public static void main(string args[]) { test(); public static void test() { Man giovanni, mattia, vincenzo, pietro; Woman barbara, francesca, chiara, elisa; giovanni = new Man("giovanni"); mattia = new Man("mattia"); vincenzo = new Man("vincenzo"); pietro = new Man("pietro"); barbara = new Woman("barbara"); francesca = new Woman("francesca"); chiara = new Woman("chiara"); elisa = new Woman("elisa"); Informatica 3 - Esercitazioni 11 // NB pila: dalla peggiore alla migliore giovanni.push(francesca); giovanni.push(chiara); giovanni.push(barbara); giovanni.push(elisa); mattia.push(barbara); mattia.push(elisa); mattia.push(francesca); mattia.push(chiara); vincenzo.push(francesca); vincenzo.push(chiara); vincenzo.push(barbara); vincenzo.push(elisa); pietro.push(francesca); pietro.push(chiara); pietro.push(barbara); pietro.push(elisa); // NB coda: in ordine di preferenza barbara.add(mattia); barbara.add(pietro); barbara.add(vincenzo); barbara.add(giovanni); elisa.add(mattia); elisa.add(giovanni); elisa.add(pietro); elisa.add(vincenzo); francesca.add(giovanni); francesca.add(mattia); francesca.add(pietro); francesca.add(vincenzo); chiara.add(mattia); chiara.add(giovanni); chiara.add(pietro); chiara.add(vincenzo); PersonList eligible = new PersonList(vincenzo, new PersonList(pietro, new PersonList(mattia, new PersonList(giovanni,null)))); System.out.println("" + findmarriages(eligible)); Informatica 3 - Esercitazioni 12 6

public static Relation findmarriages(personlist eligible) { Relation couples = new Relation(); while (eligible!= null) { Man m = (Man) eligible.person; Woman w = m.pop(); System.out.println("" + m + " si propone a " + w); if (w.likes(m)) { System.out.print(" lei accetta "); Man oldhusband = (Man) couples.lookup(w); if (oldhusband == null) eligible = eligible.next; { System.out.print("(lasciando " + oldhusband + ")"); eligible = new PersonList(oldHusband, eligible.next); couples.map(w,m); w.trimlist(m); System.out.println("\n ma tuttora preferisce: " + w.getlist()); return couples; Informatica 3 - Esercitazioni 13 Output vincenzo si propone a elisa, lei accetta, ma tuttora preferisce: mattia giovanni pietro pietro si propone a elisa, lei accetta (lasciando vincenzo), ma tuttora preferisce: mattia giovanni vincenzo si propone a barbara, lei accetta, ma tuttora preferisce: mattia pietro mattia si propone a chiara, lei accetta, ma tuttora preferisce: nessuno giovanni si propone a elisa, lei accetta (lasciando pietro), ma tuttora preferisce: mattia pietro si propone a barbara, lei accetta (lasciando vincenzo), ma tuttora preferisce: mattia vincenzo si propone a chiara vincenzo si propone a francesca, lei accetta, ma tuttora preferisce: giovanni mattia pietro ((elisa,giovanni)(barbara,pietro)(chiara,mattia)(francesca,vincenzo)) Informatica 3 - Esercitazioni 14 7