Anteprima
Vedrai una selezione di 4 pagine su 12
Appello svolto esame programmazione orientata ad oggetti 9-12 CFU Pag. 1 Appello svolto esame programmazione orientata ad oggetti 9-12 CFU Pag. 2
Anteprima di 4 pagg. su 12.
Scarica il documento per vederlo tutto.
Appello svolto esame programmazione orientata ad oggetti 9-12 CFU Pag. 6
Anteprima di 4 pagg. su 12.
Scarica il documento per vederlo tutto.
Appello svolto esame programmazione orientata ad oggetti 9-12 CFU Pag. 11
1 su 12
D/illustrazione/soddisfatti o rimborsati
Disdici quando
vuoi
Acquista con carta
o PayPal
Scarica i documenti
tutte le volte che vuoi
Estratto del documento

STORE SLOAD# WADD ISTORE WILOAD# ZADD ISTORE ZILOAD SSUB@ WIJNZ ELSELOAD# 1STORE@ ZIJUMP FINEIFELSE:LOAD# 0STORE@ ZIFINEIF:LOAD IADD# 1STORE IJUMP FORROF:LOAD# 0STORE IFORZ:LOAD ISUB LENGTHJZ FINEFORZLOAD# ZADD ISTORE ZI; z[i]WRITE@ ZI; scrivi z[i]LOAD IADD# 1STORE IJUMP FORZFINEFORZ:HALT 4

Esercizio 3 bis.Leggere un array di 10 interi, ordinarlo con il metodo selection sort e scrivere su output il vettore ordinato.Progettare prima l'algoritmo in Java e quindi derivare sistematicamente una sua versione RASP.

int[] a=new int[10];
leggi a;
for( int j=a.length-1; j>0; j-- ){
  int iMax=0;
  for( int i=1; i<=j; i++ ){
    if( a[i]>a[iMax] ) iMax=i;
  }
  //scambia a[j] con a[iMax]
  int park=a[j];
  a[j]=a[iMax];
  a[iMax]=park;
}
//for esterno
scrivi a;

A: RES 10
LOAD# 10
STORE LENGTH
lettura di A
LOAD# 0
STORE ILA
LOAD I ;qui inizia il ciclo Lettura di A
SUB LENGTHJZ AL
LOAD# A
ADD I
STORE AIREAD@ AI
LOAD IADD# 1
STORE IJUMP LA
AL: ;qui finisce la lettura di A
LOAD LENGTH
SUB# 1
STORE JFORE:

;FOREsterno
<FOR>
    <LOAD> JJZ
    <EROFLLOAD> # 0</EROFLLOAD>
    <STORE> IMAX
    <LOAD> # 1</LOAD>
    <STORE> IFOR
    <I: ;FORInterno>
        <LOAD> ISUB
        <JJGZ> IROF
    </I: ;FORInterno>
</FOR>

<LOAD> # A
<ADD> IMAX
<STORE> AIMAX
<LOAD> # A
<ADD> 5
<ADD> I
<STORE> AI
<LOAD@> AI
<ISUB@> AIMAX
<JLEZ> AVANTI
<LOAD> I
<STORE> IMAX
<AVANTI:LOAD> I
<ADD> # 1
<STORE> I
<JUMP> FORIIROF

<LOAD> # A
<ADD> J
<STORE> AJ
<LOAD> # A
<ADD> IMAX
<STORE> AIMAX
<LOAD@> AJ
<STORE> PARK
<LOAD@> AIMAX
<STORE@> AJ
<LOAD> PARK
<STORE@> AIMAX
<LOAD> J
<SUB> # 1
<STORE> J
<JUMP> FOREEROF

<LOAD> # A
<ADD> I
<STORE> AI
<WRITE@> AI
<LOAD> I
<ADD> # 1
<STORE> I
<JUMP> SAAS

<HALT> 6
Esercizio 4. Data la sequenza di input: 14, -2, 5, 4, 12, -14, 7, 3, 10, -1, mostrare il contenuto dell'heap corrispondente. Nell'ipotesi che venga rimosso il primo elemento dell'heap, derivare e riportare il suo nuovo contenuto. Heap iniziale:
[-14,-1,-2,4,3,5,7,14,10,12]
Heap dopo la rimozione del minimo:
[-2,-1,5,4,3,12,7,14,10]
Esercizio 5. Scrivere un programma per la generazione dell'indice dei riferimenti incrociati (cross index) Formattazione del testo

package poo.indice;
import java.util.*;

public class Parola implements Comparable<Parola>{
    private String ortografia;
    private Set<Integer> elenco=new TreeSet<Integer>(); // numeri di linea su cui ortografia compare

    public Parola(String ortografia){
        this.ortografia=ortografia;
    }

    public void add(int nr){
        elenco.add(nr);
    }

    public int size(){
        return elenco.size();
    }

    public String getOrtografia(){
        return ortografia;
    }

    public boolean equals(Object o){
        if(!(o instanceof Parola))
            return false;
        if(o==this)
            return true;
        Parola p=(Parola)o;
        return ortografia.equals(p.ortografia);
    }
}

public class Parola implements Comparable<Parola> {
    private String ortografia;
    private List<Integer> elenco;
    
    public Parola(String ortografia) {
        this.ortografia = ortografia;
        this.elenco = new ArrayList<>();
    }
    
    public void addOccorrenza(int numeroRiga) {
        elenco.add(numeroRiga);
    }
    
    public int compareTo(Parola p) {
        if (ortografia.length() < p.ortografia.length() || ortografia.length() == p.ortografia.length() && ortografia.compareTo(p.ortografia) < 0)
            return -1;
        if (this.equals(p))
            return 0;
        return +1;
    }
    
    public String toString() {
        String s = ortografia + "\n";
        Iterator<Integer> i = elenco.iterator();
        while (i.hasNext()) {
            s += i.next() + " ";
        }
        s += "\n";
        return s;
    }
    
    public int hashCode() {
        return ortografia.hashCode();
    }
}

public interface Indice extends Iterable<Parola> {
    int size();
    int occorrenze(String ortografia);
    void add(String ortografia, int numeroRiga);
}

public abstract class IndiceAstratto implements Indice {
    public int size() {
        int c = 0;
        for (Iterator<Parola> it = this.iterator(); it.hasNext(); it.next(), c++);
        return c;
    }
    
    public int occorrenze(String ortografia) {
        int count = 0;
        for (Parola p : this) {
            if (p.getOrtografia().equals(ortografia)) {
                count += p.getElenco().size();
            }
        }
        return count;
    }
}
{Parola orto=new Parola( ortografia );
for( Parola p: this ){
    if( p.equals(orto) ) return p.size();
    if( p.compareTo(orto)>0 ) return 0;
}
return 0;
}//occorrenze

public String toString(){
    StringBuilder sb=new StringBuilder( 400 );
    for( Parola p: this )
        sb.append(p);
    return sb.toString();
}//toString

public boolean equals( Object o ){
    if( !(o instanceof Indice) ) return false;
    if( o==this ) return true;
    Indice ix=(Indice)o;
    if( this.size()!=ix.size() ) return false;
    Iterator<Parola> i1=this.iterator(), i2=ix.iterator();
    while( i1.hasNext() ){
        Parola p1=i1.next(), p2=i2.next();
        if( !p1.equals(p2) ) return false;
    }
    return true;
}//equals

public int hashCode(){
    final int MOLT=43;
    int h=0;
    for( Parola p: this )
        h=h*MOLT+p.hashCode();
    return h;
}//hashCode
}//IndiceAstratto 8

package poo.indice;
import java.util.*;

public class IndiceLinkato extends IndiceAstratto{
    private LinkedList<Parola> indice=new LinkedList<Parola>();
    
    public Iterator<Parola> iterator(){
        return indice.iterator();
    }
    
    public int
size(){ return indice.size(); }
public void add( String ortografia, int nr ){
    Parola p = new Parola( ortografia );
    p.add( nr ); //provvisorio
    ListIterator<Parola> li = indice.listIterator();
    boolean flag = false;
    while( li.hasNext() ){
        Parola q = li.next();
        if( q.equals(p) ){
            q.add( nr );
            return;
        }
        if( q.compareTo(p)>0 ){
            li.previous();
            li.add( p );
            flag=true;
            break;
        }
    }
    if( !flag ) li.add( p );
}//add
public class IndiceMappato extends IndiceAstratto{
    private Map<String,Parola> indice=new TreeMap<String,Parola>();
    
    public Iterator<Parola> iterator(){
        return indice.values().iterator();
    }
    
    public int size(){
        return indice.size();
    }
    
    public int occorrenze( String ortografia ){
        Parola p = indice.get( ortografia );
        if( p == null ) return 0;
        return p.size();
    }//occorrenze
    
    public void add( String ortografia, int nr ){
        Parola p=indice.get( ortografia );
        if( p==null ){
            p=new Parola( ortografia );
            p.add( nr );
            indice.put( ortografia, p );
        }else{
            p.add( nr );
        }
    }//add
}

<!-- IndiceMappatoUtilizzando la classe AlberoBinarioDiRicerca (presente in poo.util) studiata a lezione, è possibile ottenere rapidamente un'altra implementazione di indice concreto come segue. Si ipotizza che AlberoBinarioDiRicerca sia provvisto di struttura di iterazione (come spiegato a lezione). -->
<pre>
<code>
package poo.indice;
import poo.util.*;
import java.util.*;

public class IndiceSuAlbero extends IndiceAstratto {
    private AlberoBinarioDiRicerca<Parola> indice = new AlberoBinarioDiRicerca<Parola>();

    public int occorrenze(String ortografia) {
        Parola p = new Parola(ortografia);
        p = indice.get(p);
        if (p == null) return 0;
        return p.size();
    }//occorrenze

    public void add(String ortografia, int nr) {
        Parola p = new Parola(ortografia);
        if (!indice.contains(p)) {
            p.add(nr);
            indice.add(p);
        } else {
            p = indice.get(p);
            p.add(nr);
        }
    }//add

    public Iterator<Parola> iterator() {
        return indice.iterator();
    }//iterator
}
</code>
</pre>

<pre>
<code>
public class CrossIndex {
    public static void main(String[] args) {
        // Codice del main
    }
}
</code>
</pre>

package poo.indice;
import java.io.*;
import java.util.*;
import poo.testo.*;

public class CrossIndex {
    public static void main(String[] args) throws IOException {
        System.out.println("Indice dei riferimenti incrociati");
        Scanner s = new Scanner(System.in);
        String nomeFile = null;
        File f = null;
        do {
            System.out.print("Nome file testo = ");
            nomeFile = s.nextLine();
            f = new File(nomeFile);
            if (!f.exists())
                System.out.println("File inesistente. Ridarlo!");
        } while (!f.exists());
        
        GestoreTesto gt = new GestoreTesto(f, "\\W+"); // ogni carattere non di word è delimitatore
        Indice indice = new IndiceSuAlbero();
        String word = null;
        int numLinea = 0;
        GestoreTesto.Simbolo simbolo = null;
        
        for (;;) {
            simbolo = gt.prossimoSimbolo();
            if (simbolo == GestoreTesto.Simbolo.EOF)
                break;
            word = gt.getString().toUpperCase();
            numLinea = gt.getNumeroLinea();
            indice.add(word, numLinea);
        }
        
        s.close(); // chiudi scanner su
    }
}

tastieraSystem.out.println();
System.out.println("Contenuto dell'indice");
System.out.println(indice);
}//main}//CrossIndexSi mostra, infine, la classe GestoreTesto (supposta collocata per generalità nel package poo.testo) che si interfaccia con il file testo da elaborare e nasconde i problemi relativi all'ottenimento delle varie parole.
GestoreTesto è un (minimo) analizzatore lessicale (si veda anche l'implementazione della macchina RASP sul libro di testo).
package poo.testo;
import java.io.*;
import java.util.*;
GestoreTestopublic class {
public enum Simbolo{ WORD, EOF }
private boolean EOF=false;
private String linea=null;
private Scanner input, scan;
private int numeroLineaCorrente=0;
private String word, delim;
public GestoreTesto( File f, String delim ) throws IOException{
input=new Scanner( f );
this.delim=delim;
}//costruttore
private void avanza(){
try{
if( linea==null || !scan.hasNext() ){
linea=input.nextLine();
numeroLineaCorrente++;
//echo su output

della lineaSystem.out.println(numeroLineaCorrente+": "+linea);scan=new Scanner( linea );scan.useDelimiter( delim );}}catch( Exception ioe ){EOF=true; input.close();}}//avanzapublic Simbolo prossimoSimbolo() throws IOException{do{avanza()
Dettagli
Publisher
A.A. 2019-2020
12 pagine
SSD Scienze matematiche e informatiche INF/01 Informatica

I contenuti di questa pagina costituiscono rielaborazioni personali del Publisher antonio199696 di informazioni apprese con la frequenza delle lezioni di Programmazione orientata agli oggetti e studio autonomo di eventuali libri di riferimento in preparazione dell'esame finale o della tesi. Non devono intendersi come materiale ufficiale dell'università Università della Calabria o del prof Nigro Libero.