SlideShare a Scribd company logo
1 of 12
Download to read offline
PROGETTO DI ALGORITMI E STRUTTURE DATI



                                          LISTE




                           IGNAZIO ALTOMARE

                              FABIO GADALETA

                            SERGIO CENTRONE




Altomare Ignazio, Centrone Sergio, Gadaleta Fabio   Pag.1 di 12
ANALISI

Liste:

    •    Confronto sovrapposizione(Lista<Tipoelem> I1, Lista<Tipoelem> I2), dove class

         Confronto {private: Lista<Tipoelem> C; int lunghezzaC; Lista<Tipoelem>R1; int

         lunghezzaR1; Lista<Tipoelem>R2; int lunghezzaR2}: C contiene gli elementi iniziali in

         comune fra I1 e I2, R1 contiene il resto degli elementi di I1 ed R2 contiene il resto degli

         elementi di I2.

    •    <Tipoelem> intersezione(Lista<Tipoelem> I1, Lista<Tipoelem> I2), che restituisce

         l'ultimo elemento in comune fra I1 e I2.

Esempio:

sovrapposizione((a b c d e f g), (a b c e l)) = {C: (a b c); lunghezzaC: 3; R1: (d e f g); lunghezzaR1:

4; R2: (e); lunghezzaR2: 2}

intersezione((a b c d e f g), (a b c e l)) = e




Dall'analisi della traccia emerge che si devono realizzare due funzioni che operino su due liste

distinte.

La prima effettuerà un'operazione di sovrapposizione sulle due liste che saranno fornite.

Lo scopo di questa sovrapposizione sarà quello di ottenere tre liste differenti nelle quali saranno

presenti :

        LISTA C: conterrà gli elementi iniziali in comune tra le 2 liste che verranno date in input

         alla funzione sovrapposizione

        LISTA R1: conterrà gli elementi non inseriti nella lista C facenti parte della prima lista

         fornita in input alla funzione

        LISTA R2: conterrà gli elementi non inseriti nella lista C facenti parte della seconda lista


Altomare Ignazio, Centrone Sergio, Gadaleta Fabio                                           Pag.2 di 12
fornita in input alla funzione

   Viene in oltre richiesto il calcolo della lunghezza di ciascuna delle liste definite in precedenza.

   La seconda funzione avrà il compito di computare l'intersezione delle due liste date in input alla

   funzione.

   La funzione restituirà l'ultimo elemento computato.

   Dall'analisi della traccia non risultano riferimenti relativi ai seguenti problemi:

1. Dimensioni massime delle liste date come input alle funzioni.

2. Tipo di elemento che sarà contenuto nelle liste.

3. Non è definito se le liste inserite saranno ordinate oppure no.

4. Non vi è accenno alla possibilità che una delle liste, o entrambe, possano essere vuote.

5. Comportamento della funzione in caso di mancanza di elementi di intersezione tra le due liste date

    in input.

6. Comportamento della funzione in caso di presenza degli ultimi elementi di intersezione nelle stesse

    posizioni all'interno delle due liste.

7. Non viene definito se all interno delle liste possano essere presenti elementi duplicati.

8. Non viene definito se le due liste debbano essere di stessa dimensione oppure di dimensione

    distinta.

   Ai problemi risultati sono state prese le seguenti decisioni:

1. La dimensione massima delle liste verrà chiesta all utente al momento della creazione delle stesse.

2. Visto che le funzioni implementate sono eseguibili su vari tipi di dati, le funzioni saranno

   implementate in maniera generica.

3. Viene considerato che le liste non siano ordinate.

4. Quando viene chiesta la dimensione massima della lista vi sarà un opportuno controllo affinché

   entrambe le liste contengano almeno un elemento.


   Altomare Ignazio, Centrone Sergio, Gadaleta Fabio                                            Pag.3 di 12
5. La funzione di intersezione può essere applicata solo nel caso in cui tra le due liste sono presenti

     degli elementi di intersezione.

6.   Prendiamo l elemento ultimo assoluto di entrambe le liste.

7. Nel caso in cui vi siano duplicati saranno considerati come normali elementi della lista.

8. Le due liste potranno avere sia una dimensione identica oppure dimensione diversa.




     Altomare Ignazio, Centrone Sergio, Gadaleta Fabio                                         Pag.4 di 12
DEFINIZIONE DEI DATI

La struttura dati utilizzata per la risoluzione del problema è la seguente:

                                                LISTA

Specifica sintattica:

TIPI:

        Lista

        Posizione

        Boolean

        Tipoelem




OPERATORI:

        CREALISTA :                                    ( )  Lista

        LISTAVUOTA:                               ( Lista)  Boolean

        LEGGILISTA :                   (Posizione, Lista)  Tipoelem

        SCRIVILISTA :       (Tipoelem, Posizione ,Lista)  Lista

        PRIMOLISTA :                              (Lista)  Posizione

        FINELISTA :                    (Posizione, Lista)  Boolean

        SUCCLISTA :                    (Posizione, Lista)  Posizione

        PREDLISTA :                    (Posizione, Lista)  Posizione

        INSLISTA :          (Tipoelem, Posizione, Lista)  Lista

        CANCLISTA :                    (Posizione, Lista)  Lista




Altomare Ignazio, Centrone Sergio, Gadaleta Fabio                             Pag.5 di 12
Specifica semantica:

TIPI:

        Lista: insieme delle sequenze L = < a1, a2, & , an >, n ≥ 0, di elementi di tipo Tipoelem, dove

l'elemento i-esimo ha valore ai e posizione pos(i)

        Boolean: insieme dei valori di verità



OPERATORI:

        CREALISTA = L'

               POST: L' = L, L = < > (sequenza vuota)

        LISTAVUOTA(L) = b

               POST: b = true se L= < >, b = false altrimenti

        LEGGILISTA(p,L) = a

               PRE: L = < a1, a2, & , an >, p = pos(i), 1 ≤ i ≤ n

               POST: a = ai

        SCRIVILISTA(a,p,L) = L'

               PRE: L = < a1, a2, & , an >, p = pos(i), 1 ≤ i ≤ n

               POST: L' = < a1, a2, & , ai-1, a, ai+1, & , an >

        PRIMOLISTA(L) = p

               POST: p = pos(1)

        FINELISTA(p,L) = b

               PRE: L = < a1, a2, & , an >, p = pos(i), 1 ≤ i ≤ n + 1

               POST: b = true se p = pos(n+1), b= false altrimenti

        SUCCLISTA(p,L) = q

               PRE: L = < a1, a2, & , an >, p = pos(i), 1 ≤ i ≤ n

               POST: q = pos(i+1)

        PREDLISTA(p,L) = q

               PRE: L = < a1, a2, & , an >, p = pos(i), 1 ≤ i ≤ n

Altomare Ignazio, Centrone Sergio, Gadaleta Fabio                                          Pag.6 di 12
POST: q = pos(i-1)

        INSLISTA(a,p,L) = L'

                 PRE: L = < a1, a2, & , an >, p = pos(i), 1 ≤ i ≤ n + 1

                 POST: L' = < a1, a2, & , ai-1, a, ai, ai+1, & , an >, se 1 ≤ i ≤ n

                         L' = < a1, a2, & , an, a > , se i = n+1 (e quindi L' = < a > se i = 1 e L = < >)

        CANCLISTA(p,L) = L'

                 PRE: L = < a1, a2, & , an >, p = pos(i), 1 ≤ i ≤ n

                 POST: L' = < a1, a2, & , ai-1, ai+1, & , an >


Realizziamo, oltre alla specifica sintattica e semantica della lista, anche quella delle funzione che

andranno realizzate:

                                               CONFRONTO

Specifica sintattica:

TIPI:

        ListaC

        ListaR1

        ListaR2

        Boolean

        Tipoelem

        Intero

        LunghezzaC

        LunghezzaR1

        LunghezzaR2




Altomare Ignazio, Centrone Sergio, Gadaleta Fabio                                                Pag.7 di 12
OPERATORI:

        incC : (Confronto)  (confronto)

        incR1 : (Confronto)  (confronto)

        incR2: (Confronto)  (confronto)

        prendiC(Confronto)  (Lista);

        prendiR1(Confronto)  (Lista);

        prendiR2(Confronto)  (Lista);

        lunghC(Confronto)  (Intero)

        lunghR1(Confronto)  (Intero);

        lunghR2(Confronto)  (Intero);



Specifiche semantiche:

TIPI:

        Lista C: Lista i cui elementi sono di tipoelem che conterrà gli elementi presenti in entrambe

                le liste fornite alla funzione.

        Lista R1: Lista i cui elementi sono di tipoelem che conterrà gli elementi non presenti il C e

                  facenti parte della prima lista data alla funzione.

        Lista R2: Lista i cui elementi sono di tipoelem che conterrà gli elementi non presenti il C e

                  facenti parte della seconda lista data alla funzione.

        LunghezzaC: intero che rappresenta la dimensione della lista C

        LunghezzaR1: intero che rappresenta la dimensione della lista R1

        LunghezzaR2: intero che rappresenta la dimensione della lista R2



OPERATORI

        inc C (temp)  temp' : denota dinamicamente la dimensione della lista C

        inc R1 (temp)  temp' : denota dinamicamente la dimensione della lista R1

        inc R2 (temp)  temp' : denota dinamicamente la dimensione della lista R2



Altomare Ignazio, Centrone Sergio, Gadaleta Fabio                                          Pag.8 di 12
prendiC(temp)  L : rende possibile eseguire sulla lista C tutte le operazioni eseguibili su

                                 una lista

       prendiR1(temp)  L : rende possibile eseguire sulla lista R1 tutte le operazioni eseguibili su

                                 una lista

       prendiR2(temp)  L : rende possibile eseguire sulla lista R2 tutte le operazioni eseguibili su

                             una lista

       lunghC(temp)  Int : indica la lunghezza della lista C

       lunghR1(temp)  Int : indica la lunghezza della lista R1

       lunghR2(temp)  Int : indica la lunghezza della lista R2




                   ALGORITMO RISOLUTIVO DELLA

                                 SOVRAPPOSIZIONE

confronto sovrapposizione (lista lista1, lista lista2)

confronto temp;

indice1  lista1.primolista();

indice2  lista2.primalista();

indiceC  temp.prendiC().primolista();

indiceR1 temp.prendiR1().primolista();

indiceR2  temp.prendiR2().primolista();

Fintanto che (not lista1.finelista(indice1) AND not lista2.finelista(indice2) AND

(lista1.leggiLista(indice1) == (lista2.leggiLista(indice2))

       temp.prendiC().insLista(lista1.leggiLista(indice1),indiceC);

       indice1  lista1.succLista(indice1);

       indice2  lista2.succLista(indice2);

       indiceC  temp.prendiC().succLista(indiceC);



Altomare Ignazio, Centrone Sergio, Gadaleta Fabio                                         Pag.9 di 12
Fintanto che (not lista1.finelista(indice1))

       temp.prendiR1().insLista(lista1.leggiLista(indice1),indiceR1);

       indiceR1  temp.listaR1().succLista(indiceR1);

       indice1  lista1.succLista(indice1);



Fintanto che (not lista2.finelista(indice2))

       temp.prendiR2().insLista(lista2.leggiLista(indice2),indiceR2);

       indiceR2  temp.listaR2().succLista(indiceR2);

       indice2  lista2.succLista(indice2);

restituisci (temp);




     ALGORITMO RISOLUTIVO PER IL CALCOLO

                             DELL INTERSEZIONE

Tipoelem intersezione (Lista lista1, Lista lista2);

indice1  lista1.primolista();

tipoelem temp1;

tipoelem temp2;

intero contatore  1;

intero numero1  0;

intero numero2  0;

Fintanto che (not lista1.fineLista(indice1))

       posizione indice2  lista2.primoLista();

       Fintanto che (not lista2.finelista(indice2)

               Se (lista1.leggiLista(indice1) == (lista2.leggiLista(indice2)



Altomare Ignazio, Centrone Sergio, Gadaleta Fabio                              Pag.10 di 12
temp1  lista1.leggiLista(indice1);

                      numero1  contatore;

              indice2  lista2.succLista(indice2);

       indice1  lista1.succLista(indice1);

       contatore  contatore+1;

indice2  lista2.primolista();

contatore  1;

Fintanto che (not lista2.fineLista(indice2) AND (not numero1 == 0))

       posizione indice1  lista1.primoLista();

       Fintanto che (not lista1.finelista(indice1)

              Se (lista1.leggiLista(indice1) == (lista2.leggiLista(indice2)

                      temp2  lista2.leggiLista(indice2);

                      numero2  contatore;

              indice1  lista1.succLista(indice1);

       indice2  lista2.succLista(indice2);

       contatore  contatore+1;

Se(numero1 == 0)

       avvisa l' utente che non c è intersezione tra le due liste;

altrimenti

       Se (numero1 >= numero2)

              restituisci(temp1);

       altrimenti

              restituisci(temp2);




Altomare Ignazio, Centrone Sergio, Gadaleta Fabio                             Pag.11 di 12
REALIZZAZIONE

Le realizzazioni effettuate per l implementazione della funzione definita nella progettazione

saranno le seguenti:

   •   Realizzazioni con Vettore

   •   Realizzazione con Puntatori

Da notare che nella realizzazione con vettore la dimensione massima della lista consentita sarà di

1023 elementi.

                                             TEST
Classi di equivalenza:

   1. La dimensione di una delle due liste date in input, o di entrambe, è pari a 0.

   2. Le due liste sono composte da elementi non omogenei.

   3. Le due liste non sono della stessa dimensione.

   4. Le due liste sono della stessa dimensione.

   5. L intersezione delle due liste produce un valore.

   6. La sovrapposizione delle due liste risulta nulla.

   7. La sovrapposizione delle due liste produce risultati.

   8. La sovrapposizione e l intersezione non producono entrambi risultati.

   9. La sovrapposizione e l intersezione producono entrambi risultati.




Altomare Ignazio, Centrone Sergio, Gadaleta Fabio                                       Pag.12 di 12

More Related Content

More from Alartzero

Linguaggi Di Programmazione Caso Di Studio
Linguaggi Di Programmazione   Caso Di StudioLinguaggi Di Programmazione   Caso Di Studio
Linguaggi Di Programmazione Caso Di StudioAlartzero
 
Programmazione Doc Gest, Codifica
Programmazione   Doc Gest, CodificaProgrammazione   Doc Gest, Codifica
Programmazione Doc Gest, CodificaAlartzero
 
Virginio Desktop Codifica
Virginio Desktop   CodificaVirginio Desktop   Codifica
Virginio Desktop CodificaAlartzero
 
Algoritmi E Strutture Dati Alberi N Ari
Algoritmi E Strutture Dati   Alberi N AriAlgoritmi E Strutture Dati   Alberi N Ari
Algoritmi E Strutture Dati Alberi N AriAlartzero
 
Virginio Desktop Analisi
Virginio Desktop   AnalisiVirginio Desktop   Analisi
Virginio Desktop AnalisiAlartzero
 
Algoritmi E Strutture Dati Code
Algoritmi E Strutture Dati   CodeAlgoritmi E Strutture Dati   Code
Algoritmi E Strutture Dati CodeAlartzero
 
Algoritmi E Strutture Dati Pile
Algoritmi E Strutture Dati   PileAlgoritmi E Strutture Dati   Pile
Algoritmi E Strutture Dati PileAlartzero
 
Ingegneria Del Software Schedule, Test
Ingegneria Del Software   Schedule, TestIngegneria Del Software   Schedule, Test
Ingegneria Del Software Schedule, TestAlartzero
 
Ingegneria Del Software Schedule, Progetto
Ingegneria Del Software   Schedule, ProgettoIngegneria Del Software   Schedule, Progetto
Ingegneria Del Software Schedule, ProgettoAlartzero
 
Ingegneria Del Software Schedule, Analisi
Ingegneria Del Software   Schedule, AnalisiIngegneria Del Software   Schedule, Analisi
Ingegneria Del Software Schedule, AnalisiAlartzero
 

More from Alartzero (10)

Linguaggi Di Programmazione Caso Di Studio
Linguaggi Di Programmazione   Caso Di StudioLinguaggi Di Programmazione   Caso Di Studio
Linguaggi Di Programmazione Caso Di Studio
 
Programmazione Doc Gest, Codifica
Programmazione   Doc Gest, CodificaProgrammazione   Doc Gest, Codifica
Programmazione Doc Gest, Codifica
 
Virginio Desktop Codifica
Virginio Desktop   CodificaVirginio Desktop   Codifica
Virginio Desktop Codifica
 
Algoritmi E Strutture Dati Alberi N Ari
Algoritmi E Strutture Dati   Alberi N AriAlgoritmi E Strutture Dati   Alberi N Ari
Algoritmi E Strutture Dati Alberi N Ari
 
Virginio Desktop Analisi
Virginio Desktop   AnalisiVirginio Desktop   Analisi
Virginio Desktop Analisi
 
Algoritmi E Strutture Dati Code
Algoritmi E Strutture Dati   CodeAlgoritmi E Strutture Dati   Code
Algoritmi E Strutture Dati Code
 
Algoritmi E Strutture Dati Pile
Algoritmi E Strutture Dati   PileAlgoritmi E Strutture Dati   Pile
Algoritmi E Strutture Dati Pile
 
Ingegneria Del Software Schedule, Test
Ingegneria Del Software   Schedule, TestIngegneria Del Software   Schedule, Test
Ingegneria Del Software Schedule, Test
 
Ingegneria Del Software Schedule, Progetto
Ingegneria Del Software   Schedule, ProgettoIngegneria Del Software   Schedule, Progetto
Ingegneria Del Software Schedule, Progetto
 
Ingegneria Del Software Schedule, Analisi
Ingegneria Del Software   Schedule, AnalisiIngegneria Del Software   Schedule, Analisi
Ingegneria Del Software Schedule, Analisi
 

Algoritmi E Strutture Dati Liste

  • 1. PROGETTO DI ALGORITMI E STRUTTURE DATI LISTE IGNAZIO ALTOMARE FABIO GADALETA SERGIO CENTRONE Altomare Ignazio, Centrone Sergio, Gadaleta Fabio Pag.1 di 12
  • 2. ANALISI Liste: • Confronto sovrapposizione(Lista<Tipoelem> I1, Lista<Tipoelem> I2), dove class Confronto {private: Lista<Tipoelem> C; int lunghezzaC; Lista<Tipoelem>R1; int lunghezzaR1; Lista<Tipoelem>R2; int lunghezzaR2}: C contiene gli elementi iniziali in comune fra I1 e I2, R1 contiene il resto degli elementi di I1 ed R2 contiene il resto degli elementi di I2. • <Tipoelem> intersezione(Lista<Tipoelem> I1, Lista<Tipoelem> I2), che restituisce l'ultimo elemento in comune fra I1 e I2. Esempio: sovrapposizione((a b c d e f g), (a b c e l)) = {C: (a b c); lunghezzaC: 3; R1: (d e f g); lunghezzaR1: 4; R2: (e); lunghezzaR2: 2} intersezione((a b c d e f g), (a b c e l)) = e Dall'analisi della traccia emerge che si devono realizzare due funzioni che operino su due liste distinte. La prima effettuerà un'operazione di sovrapposizione sulle due liste che saranno fornite. Lo scopo di questa sovrapposizione sarà quello di ottenere tre liste differenti nelle quali saranno presenti :  LISTA C: conterrà gli elementi iniziali in comune tra le 2 liste che verranno date in input alla funzione sovrapposizione  LISTA R1: conterrà gli elementi non inseriti nella lista C facenti parte della prima lista fornita in input alla funzione  LISTA R2: conterrà gli elementi non inseriti nella lista C facenti parte della seconda lista Altomare Ignazio, Centrone Sergio, Gadaleta Fabio Pag.2 di 12
  • 3. fornita in input alla funzione Viene in oltre richiesto il calcolo della lunghezza di ciascuna delle liste definite in precedenza. La seconda funzione avrà il compito di computare l'intersezione delle due liste date in input alla funzione. La funzione restituirà l'ultimo elemento computato. Dall'analisi della traccia non risultano riferimenti relativi ai seguenti problemi: 1. Dimensioni massime delle liste date come input alle funzioni. 2. Tipo di elemento che sarà contenuto nelle liste. 3. Non è definito se le liste inserite saranno ordinate oppure no. 4. Non vi è accenno alla possibilità che una delle liste, o entrambe, possano essere vuote. 5. Comportamento della funzione in caso di mancanza di elementi di intersezione tra le due liste date in input. 6. Comportamento della funzione in caso di presenza degli ultimi elementi di intersezione nelle stesse posizioni all'interno delle due liste. 7. Non viene definito se all interno delle liste possano essere presenti elementi duplicati. 8. Non viene definito se le due liste debbano essere di stessa dimensione oppure di dimensione distinta. Ai problemi risultati sono state prese le seguenti decisioni: 1. La dimensione massima delle liste verrà chiesta all utente al momento della creazione delle stesse. 2. Visto che le funzioni implementate sono eseguibili su vari tipi di dati, le funzioni saranno implementate in maniera generica. 3. Viene considerato che le liste non siano ordinate. 4. Quando viene chiesta la dimensione massima della lista vi sarà un opportuno controllo affinché entrambe le liste contengano almeno un elemento. Altomare Ignazio, Centrone Sergio, Gadaleta Fabio Pag.3 di 12
  • 4. 5. La funzione di intersezione può essere applicata solo nel caso in cui tra le due liste sono presenti degli elementi di intersezione. 6. Prendiamo l elemento ultimo assoluto di entrambe le liste. 7. Nel caso in cui vi siano duplicati saranno considerati come normali elementi della lista. 8. Le due liste potranno avere sia una dimensione identica oppure dimensione diversa. Altomare Ignazio, Centrone Sergio, Gadaleta Fabio Pag.4 di 12
  • 5. DEFINIZIONE DEI DATI La struttura dati utilizzata per la risoluzione del problema è la seguente: LISTA Specifica sintattica: TIPI: Lista Posizione Boolean Tipoelem OPERATORI: CREALISTA : ( )  Lista LISTAVUOTA: ( Lista)  Boolean LEGGILISTA : (Posizione, Lista)  Tipoelem SCRIVILISTA : (Tipoelem, Posizione ,Lista)  Lista PRIMOLISTA : (Lista)  Posizione FINELISTA : (Posizione, Lista)  Boolean SUCCLISTA : (Posizione, Lista)  Posizione PREDLISTA : (Posizione, Lista)  Posizione INSLISTA : (Tipoelem, Posizione, Lista)  Lista CANCLISTA : (Posizione, Lista)  Lista Altomare Ignazio, Centrone Sergio, Gadaleta Fabio Pag.5 di 12
  • 6. Specifica semantica: TIPI: Lista: insieme delle sequenze L = < a1, a2, & , an >, n ≥ 0, di elementi di tipo Tipoelem, dove l'elemento i-esimo ha valore ai e posizione pos(i) Boolean: insieme dei valori di verità OPERATORI: CREALISTA = L' POST: L' = L, L = < > (sequenza vuota) LISTAVUOTA(L) = b POST: b = true se L= < >, b = false altrimenti LEGGILISTA(p,L) = a PRE: L = < a1, a2, & , an >, p = pos(i), 1 ≤ i ≤ n POST: a = ai SCRIVILISTA(a,p,L) = L' PRE: L = < a1, a2, & , an >, p = pos(i), 1 ≤ i ≤ n POST: L' = < a1, a2, & , ai-1, a, ai+1, & , an > PRIMOLISTA(L) = p POST: p = pos(1) FINELISTA(p,L) = b PRE: L = < a1, a2, & , an >, p = pos(i), 1 ≤ i ≤ n + 1 POST: b = true se p = pos(n+1), b= false altrimenti SUCCLISTA(p,L) = q PRE: L = < a1, a2, & , an >, p = pos(i), 1 ≤ i ≤ n POST: q = pos(i+1) PREDLISTA(p,L) = q PRE: L = < a1, a2, & , an >, p = pos(i), 1 ≤ i ≤ n Altomare Ignazio, Centrone Sergio, Gadaleta Fabio Pag.6 di 12
  • 7. POST: q = pos(i-1) INSLISTA(a,p,L) = L' PRE: L = < a1, a2, & , an >, p = pos(i), 1 ≤ i ≤ n + 1 POST: L' = < a1, a2, & , ai-1, a, ai, ai+1, & , an >, se 1 ≤ i ≤ n L' = < a1, a2, & , an, a > , se i = n+1 (e quindi L' = < a > se i = 1 e L = < >) CANCLISTA(p,L) = L' PRE: L = < a1, a2, & , an >, p = pos(i), 1 ≤ i ≤ n POST: L' = < a1, a2, & , ai-1, ai+1, & , an > Realizziamo, oltre alla specifica sintattica e semantica della lista, anche quella delle funzione che andranno realizzate: CONFRONTO Specifica sintattica: TIPI: ListaC ListaR1 ListaR2 Boolean Tipoelem Intero LunghezzaC LunghezzaR1 LunghezzaR2 Altomare Ignazio, Centrone Sergio, Gadaleta Fabio Pag.7 di 12
  • 8. OPERATORI: incC : (Confronto)  (confronto) incR1 : (Confronto)  (confronto) incR2: (Confronto)  (confronto) prendiC(Confronto)  (Lista); prendiR1(Confronto)  (Lista); prendiR2(Confronto)  (Lista); lunghC(Confronto)  (Intero) lunghR1(Confronto)  (Intero); lunghR2(Confronto)  (Intero); Specifiche semantiche: TIPI: Lista C: Lista i cui elementi sono di tipoelem che conterrà gli elementi presenti in entrambe le liste fornite alla funzione. Lista R1: Lista i cui elementi sono di tipoelem che conterrà gli elementi non presenti il C e facenti parte della prima lista data alla funzione. Lista R2: Lista i cui elementi sono di tipoelem che conterrà gli elementi non presenti il C e facenti parte della seconda lista data alla funzione. LunghezzaC: intero che rappresenta la dimensione della lista C LunghezzaR1: intero che rappresenta la dimensione della lista R1 LunghezzaR2: intero che rappresenta la dimensione della lista R2 OPERATORI inc C (temp)  temp' : denota dinamicamente la dimensione della lista C inc R1 (temp)  temp' : denota dinamicamente la dimensione della lista R1 inc R2 (temp)  temp' : denota dinamicamente la dimensione della lista R2 Altomare Ignazio, Centrone Sergio, Gadaleta Fabio Pag.8 di 12
  • 9. prendiC(temp)  L : rende possibile eseguire sulla lista C tutte le operazioni eseguibili su una lista prendiR1(temp)  L : rende possibile eseguire sulla lista R1 tutte le operazioni eseguibili su una lista prendiR2(temp)  L : rende possibile eseguire sulla lista R2 tutte le operazioni eseguibili su una lista lunghC(temp)  Int : indica la lunghezza della lista C lunghR1(temp)  Int : indica la lunghezza della lista R1 lunghR2(temp)  Int : indica la lunghezza della lista R2 ALGORITMO RISOLUTIVO DELLA SOVRAPPOSIZIONE confronto sovrapposizione (lista lista1, lista lista2) confronto temp; indice1  lista1.primolista(); indice2  lista2.primalista(); indiceC  temp.prendiC().primolista(); indiceR1 temp.prendiR1().primolista(); indiceR2  temp.prendiR2().primolista(); Fintanto che (not lista1.finelista(indice1) AND not lista2.finelista(indice2) AND (lista1.leggiLista(indice1) == (lista2.leggiLista(indice2)) temp.prendiC().insLista(lista1.leggiLista(indice1),indiceC); indice1  lista1.succLista(indice1); indice2  lista2.succLista(indice2); indiceC  temp.prendiC().succLista(indiceC); Altomare Ignazio, Centrone Sergio, Gadaleta Fabio Pag.9 di 12
  • 10. Fintanto che (not lista1.finelista(indice1)) temp.prendiR1().insLista(lista1.leggiLista(indice1),indiceR1); indiceR1  temp.listaR1().succLista(indiceR1); indice1  lista1.succLista(indice1); Fintanto che (not lista2.finelista(indice2)) temp.prendiR2().insLista(lista2.leggiLista(indice2),indiceR2); indiceR2  temp.listaR2().succLista(indiceR2); indice2  lista2.succLista(indice2); restituisci (temp); ALGORITMO RISOLUTIVO PER IL CALCOLO DELL INTERSEZIONE Tipoelem intersezione (Lista lista1, Lista lista2); indice1  lista1.primolista(); tipoelem temp1; tipoelem temp2; intero contatore  1; intero numero1  0; intero numero2  0; Fintanto che (not lista1.fineLista(indice1)) posizione indice2  lista2.primoLista(); Fintanto che (not lista2.finelista(indice2) Se (lista1.leggiLista(indice1) == (lista2.leggiLista(indice2) Altomare Ignazio, Centrone Sergio, Gadaleta Fabio Pag.10 di 12
  • 11. temp1  lista1.leggiLista(indice1); numero1  contatore; indice2  lista2.succLista(indice2); indice1  lista1.succLista(indice1); contatore  contatore+1; indice2  lista2.primolista(); contatore  1; Fintanto che (not lista2.fineLista(indice2) AND (not numero1 == 0)) posizione indice1  lista1.primoLista(); Fintanto che (not lista1.finelista(indice1) Se (lista1.leggiLista(indice1) == (lista2.leggiLista(indice2) temp2  lista2.leggiLista(indice2); numero2  contatore; indice1  lista1.succLista(indice1); indice2  lista2.succLista(indice2); contatore  contatore+1; Se(numero1 == 0) avvisa l' utente che non c è intersezione tra le due liste; altrimenti Se (numero1 >= numero2) restituisci(temp1); altrimenti restituisci(temp2); Altomare Ignazio, Centrone Sergio, Gadaleta Fabio Pag.11 di 12
  • 12. REALIZZAZIONE Le realizzazioni effettuate per l implementazione della funzione definita nella progettazione saranno le seguenti: • Realizzazioni con Vettore • Realizzazione con Puntatori Da notare che nella realizzazione con vettore la dimensione massima della lista consentita sarà di 1023 elementi. TEST Classi di equivalenza: 1. La dimensione di una delle due liste date in input, o di entrambe, è pari a 0. 2. Le due liste sono composte da elementi non omogenei. 3. Le due liste non sono della stessa dimensione. 4. Le due liste sono della stessa dimensione. 5. L intersezione delle due liste produce un valore. 6. La sovrapposizione delle due liste risulta nulla. 7. La sovrapposizione delle due liste produce risultati. 8. La sovrapposizione e l intersezione non producono entrambi risultati. 9. La sovrapposizione e l intersezione producono entrambi risultati. Altomare Ignazio, Centrone Sergio, Gadaleta Fabio Pag.12 di 12