Esercizi di Specifiche di I/O e Specifiche Algebriche

Documenti analoghi
Compito Scritto di Ingegneria del Software. 15 Gennaio h. 10 Aula Tempo a disposizione: 3 ore

Compito Scritto di Ingegneria del Software

Università Ca Foscari Dipartimento di informatica. Programmazione part-time. Esame Ocaml

Informatica/ Ing. Meccanica/ Edile/ Prof. Verdicchio/ 17/01/2014/ Foglio delle domande / VERSIONE 1

Capitolo 5. Array e collezioni. c 2005 Pearson Education Italia Capitolo 5-1 / 61

Esercitazioni di Fondamenti di Informatica - Lez. 5 30/10/2018

5 - Istruzioni condizionali

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

3. un metodo che restituisce l elenco delle matricole di tutti gli studenti del corso;

Programmazione Procedurale in Linguaggio C++

VBA è un linguaggio di scripting derivato da Visual Basic, da cui prende il nome. Come ogni linguaggio ha le sue regole.

Cognome-Nome:... Matricola...

Laboratorio di Programmazione (Corso di Laurea in Informatica)

Cognome e Nome : Corso e Anno di Immatricolazione: Modalità di Laboratorio (Progetto/Prova) :

5.4 Istruzione di input L istruzione di input ha la forma:

Linguaggi di interrogazione. linguaggi interrogazione 1

Programmazione Procedurale in Linguaggio C++

Fondamenti di Informatica

Programmare. Definire una sequenza di istruzioni che specificano come effettuare una elaborazione

ESAME DI FONDAMENTI DI INFORMATICA I ESAME DI ELEMENTI DI INFORMATICA. 21 Gennaio 1998

PROGETTO ASSEMBLY: REQUISITI,

Programma del corso. Elementi di Programmazione. Introduzione agli algoritmi. Rappresentazione delle Informazioni. Architettura del calcolatore

Corso di Fondamenti di Informatica

Università di Roma Tor Vergata L16-1. Ricerca: esaminare una collezione di dati, cercando un particolare valore. nome e cognome

COMPITO DI LABORATORIO DI PROGRAMMAZIONE Dicembre Alcune Soluzioni

Informatica/ Ing. Meccanica/ Edile/ Prof. Verdicchio/ 02/07/2015/ Foglio delle domande /VERSIONE 1 Matricola Cognome Nome

INFORMATICA 2010/11 - CdL in FISICA TERZO APPELLO 8/09/2011: SOLUZIONI PROPOSTE

Istruzioni Condizionali

Caratteristiche generali del linguaggio Visual Basic

Strutture di controllo condizionali in Matlab

ELEMENTI DI INFORMATICA E PROGRAMMAZIONE

Istruzioni Condizionali

Esercizi su specifiche algebriche

Ing. Lorenzo Vismara

Linguaggi e Traduttori: Analisi lessicale

Il presente plico contiene 3 esercizi e deve essere debitamente compilato con cognome e nome, numero di matricola.

Corso di Laurea in Ingegneria Gestionale Esame di Informatica - a.a. 2016/ Giugno 2017

28/02/2014 Copyright V. Moriggia

Alcuni Soluzioni. Fornire la specifica di un algoritmo risolutivo utilizzando lo pseudocodice visto a lezione.

Programmazione in Java (I modulo) Lezione 5: Più dettagli su Input e Output La classe String L'istruzione while

Lezione 3 Esercitazione

Esercizi su array di array

Università degli Studi di Cassino Corso di Fondamenti di Informatica Tipi strutturati: Stringhe. Anno Accademico 2010/2011 Francesco Tortorella

PASCAL standard. Il linguaggio PASCAL nasce come evoluzione del linguaggio ALGOL60 (ALGOrithmic Language) nel 1968 ad opera di N. Wirth.

19 - Eccezioni. Programmazione e analisi di dati Modulo A: Programmazione in Java. Paolo Milazzo

ESAME DI FONDAMENTI DI INFORMATICA I ESAME DI ELEMENTI DI INFORMATICA. 21 Gennaio 1998

Argomenti della lezione. Introduzione agli Algoritmi e alle Strutture Dati. Lista Lineare. Lista Lineare come Tipo di Dato Astratto

Introduzione alla programmazione C++ Argomenti. Macchina astratta C

Corso di Fondamenti di Informatica Tipi strutturati: Stringhe

Gestore di Stringhe 1

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

Sistemi di Elaborazione delle Informazioni

Laboratorio n 6 del Ing. Dario Cogliati

Laboratorio Informatica Classe 4A Serale Venerdì 18/02/2011. Gruppo. Cognome Riontino Nome Raffaele. Cognome Nome

ELEMENTI DI INFORMATICA L-B. Ing. Claudia Chiusoli

Grafi: visita generica

ISTRUZIONI A B K A, B, K A<B? SI A<B? SI A<B? SI

Fondamenti di informatica 1 - A.A. 2000/ 01 Prof. V. de Nitto Personè. Esercizi ("OK" indica la risposta corretta)

Descrizione del progetto di laboratorio.

Sviluppo di programmi

Laboratorio di Informatica

Tipi di dato strutturati: Array

- int nbrani = 0; //numero di brani presenti in archivio. int creaplaylist(tipobrano[] playlist, int n, TipoGenere g, TipoFile t);

ADT LISTA: altre operazioni non primitive ADT LISTA COSTRUZIONE ADT LISTA COSTRUZIONE ADT LISTA (2)

Programma del corso. Elementi di Programmazione. Introduzione agli algoritmi. Rappresentazione delle Informazioni. Architettura del calcolatore

18 - Vettori. Programmazione e analisi di dati Modulo A: Programmazione in Java. Paolo Milazzo

Fondamenti di Informatica T-1

Questa dispensa propone esercizi riepilogativi sui concetti visti finora ovvero: Esercizio 7.1

Documento di Analisi. Mockup

Prova di esame del 19 giugno 2017

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

VBA Principali Comandi

PREPARAZIONE PER SECONDA PROVA IN ITINERE Esercizio 1 SULLA MODELLAZIONE DEI DATI

Dall algoritmo al programma

Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 2

Esercizio 1: media di numeri reali (uso funzioni e struct)

La connessione ai database MySQL tramite script PHP versione 5.5

Fondamenti di Informatica e Laboratorio T-AB Ingegneria Elettronica e Telecomunicazioni. Lab 06 Array" Lab06 1

Programmazione con il linguaggio LibreOffice Basic

Esercitazioni di Fondamenti di Informatica - Lez /12/2018

Fondamenti di Informatica T-1 Modulo 2

ESERCITAZIONI ACCESS

STRUTTURE DI CONTROLLO DEL C++

Laboratorio di Programmazione

Linguaggio C: Strutture e Liste Concatenate Valeria Cardellini

Corso di Laurea in Ingegneria Gestionale Esame di Informatica - a.a. 2015/ Luglio 2016

Laboratorio di Informatica I

Trasformare array paralleli in array di record

Esercizio 1: funzione con valore di ritorno di tipo puntatore

struct costobiglietto { //struttura per prezzo float prezzo; float tasse; float prezzototale; };

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

Transcript:

Esercizi di Specifiche di I/O e Specifiche Algebriche July 6, 2004 1 Specifiche con DFD X arriva dalla sorgente S1 ed e trasformato in Y da un processo P 1 che utilizza anche dati provenienti da un data base A. Infine, Y e trasformato in Z da un processo P 2 che li immagazzina in S2. Si considerino le attivita di un magazzino con vendita porta a porta. Ogni venditore inizia le attivita del giorno pianificando le attivita del giorno seguente. In particolare, riempe un modulo d ordine con il dettaglio degli ordini per il giorno seguente. Tale ordine viene riempito in duplice copia, e una copia viene consegnata al gestore del magazzino. Il magazziniere, collezionati tutti gli ordini dai venditori, convalida gli ordini verificandone la disponibilita in magazzino e prepara gli ordini definitivi (ed il materiale relativo pronto per il ritiro), uno per venditore. Il giorno seguente, ogni venditore firma il proprio ordine definitivo e ritira il materiale relativo. L ordine firmato viene catalogato e archiviato dal gestore. Si consideri un sistema di gestione degli esami di una facolta universitaria. Le date degli appelli sono fissati dal Professore. Per iscriversi all esame, uno studente deve specificare i propri dati compresa la matricola. Prima dell esame, il professore genera la lista degli iscritti: All esame si possono presentare i soli studenti nella lista. Durante l esame, gli studenti valutati positivamente vengono registrati e i loro dati vengono inviati alla segreteria che li archivia. Gli studenti che non hanno superato l esame possono ri-iscriversi allo stesso esame in una data a non meno di un mese di distanza. Si consideri la gestione di gruppi di studenti, ognuno supervisionato da un professore. Il professore, alla ricezione di un compito da parte di uno studente, per prima cosa verifica se lo studente appartiene al gruppo che sta supervisionando. Nel caso che cosi non fosse, il compito e passato al professore opportuno. Quando un professore riceve un compito da uno studente nel suo gruppo, lo corregge, e ne annota il voto in un registro. Qualora il compito sia ricevuto in ritardo, il professore, attraverso una lista di corrispondenza ritardo-penalita, assegna al compito una penalita che e marcato in un secondo registro. Infine, una media pesata dei due voti e inserita nella lista finale che e inviata al direttore della scuola, mentre il compito e il voto corrispondente sono ridati allo studente. Si consideri una compagnia di viaggio. Le prenotazioni sono fatte direttamente dai clienti. Alla richiesta di un cliente, l agente seleziona i voli e gli hotel appropriati e li inserisce in una prenotazione preliminare. Il cliente, alla ricezione di tale prenotazione preliminare, deve confermare la prenotazione entro tre giorni inviando un deposito del 10% dei costi. Ricevuto il deposito, l agente inserisce la prenotazione preliminare nella lista delle prenotazioni finali. Quattro settimane prima dell inizio del viaggio, l agenzia invia la fattura al cliente per la parte rimanente dei costi. Una volta ricevuto il saldo, l agenzia emette ed invia i biglietti al cliente. 1

2 Specifiche di I/O: Assumendo che N ew sia una costante che rappresenta l insieme vuoto, e che add(i, S) ritorna l insieme ottenuto aggiungendo l item I all insieme S (si assume che se I S allora add(i, S) = S) si specifichino in logica dei predicati del primo ordine, i seguenti predicati (Si assuma di avere la specifica degli interi data. Si assuma che sugli item siano definite le classiche funzioni di confronto =, <, >,, ): 1. card(s, n) vero se e solo se S ha cardinalita n, 2. in(i, S) vero se e solo se I S, 3. union(s1, S2, S3) vero se e solo se S3 = S1 S2, 4. min(i, S) vero se e solo se I e l elemento piu piccolo in S. 5. assumendo che S sia un insieme di caratteri, che news denoti la stringa vuota e che cat(c, s) aggiunga c alla stringa s (es. (cat( p, ippo ) = pippo ), si specifichi il predicato sort(s, s) vero se e solo se s e la stringa ottenuta concatenando ordinatamente gli elementi di S (es. sort( {a, m, b, abm ) sara vero). Sia A una variabile di tipo array, i di tipo integer, I di tipo item. Assumendo che il predicato not empty(a,i) sia vero quando l iesima cella di A non e vuota, dim(a) ritorni la dimensione di A, e A[i, I] sia vero quando l item memorizzato nell iesima cella di A e I, si scrivano le specifiche in logica dei predicati del primo ordine delle seguenti funzioni e/o predicati. (Si assuma di avere la specifica degli interi data. Si assuma che sugli item siano definite le classiche funzioni di confronto =, <, >,, ). 1. nelem(a,n): vero se e solo se il numero di elementi memorizzati in A e n. Sintassi: nelem: array x integer nelem(a,n) <-> nelem1(a,dim(a)-1,n) nelem1: array x integer x integer nelem1(a,m,n) <-> ((m >= 0 ^ m < dim(a)) ^ ((m=0 ^ not_empty(a,0) ^ n=1) v (m=0 ^ -not_empty(a,0) ^ n=0) v (not_empty(a,m) ^ nelem1(a,m-1,n-1)) v (-not_empty(a,m) ^ nelem1(a,m-1,n)))) 2. search(a,i): ritorna TRUE se I e in A, F ALSE altrimenti. Sintassi: search: array x item search(a,i) <-> search1(a,i,dim(a)-1) 2

search1: array x item x integer search1(a,i,n) <-> ((n >= 0 ^ n < dim(a)) ^ (A[n,I] v search1(a,i,n-1))) 3. count(a,i,m): vero quando il numero di volte che I e memorizzato in A e m. Sintassi: count: array x item x integer count(a,i,m) <-> count1(a,i,dim(a)-1,m) count1: array x item x integer x integer count1(a,i,n,m) <-> ((n >= 0 ^ n < dim(a)) v (A[n,I] ^ n = 0 ^ m = 1) v (-A[n,I] ^ n = 0 ^ m = 0) v (A[n,I] ^ n > 0 ^ count1(a,i,n-1,m-1)) v (-A[n,I] ^ n > 0 ^ count1(a,i,n-1,m))) 4. add(a,i,b): vero quando B e un array ottenuto da A aggiungendo I nel caso che I non sia gia contenuto in A. Se I e gia contenuto in A, allora il predicato sara vero quando A = B. Sintassi: add: array x item x array add(a,i,b) <-> ((search(a,i) ^ A=B) v (-search(a,i) ^ add1(a,i,b))) add1: array x item x array add1(a,i,b) <-> ( forall n. ((n >= 0 ^ n < dim(a)) ^ not_empty(a,n) -> forall J (A[n,J] -> B[n,J])) ^ exists n. ((n >= 0 ^ n < dim(a)) ^ -not_empty(a,n) ^ B[n,I] ^ forall m. (m >= 0 ^ m < dim(a) ^ -not_empty(a,m) ^ B[m,I] -> m = n))) 3

3 Specifiche in TRIO 1. Modellare in TRIO il funzionamento di una porta che si apre quando viene inserita una tessera magnetica in un apposito lettore e si richiude dopo trenta secondi. 2. Modellare in TRIO il funzionamento di un allarme che si attiva quando un sensore rileva una temperatura superiore ai 40 gradi e si disattiva dopo tre minuti. 3. Specificare mediante TRIO il comportamento di un sistema costituito da un pulsante, una leva a due posizioni (alta e bassa) e una lampadina. La lampada si accende quando viene premuto il pulsante e la leva si trova nella posizione alta; la lampada si spegne dopo tre minuti al massimo oppure quando viene la leva viene portata nella posizione opposta. 4. Modellare con TRIO (in alternativa con una rete di Petri) in un sistema di controllo degli accessi a un laboratorio informatico. L accesso avviene attraverso una porta solitamente chiusa e richiede il riconoscimento della persona tramite un tesserino magnetico. Un lettore di tessera magnetica provvede a questo scopo. Quando la tessera viene inserita nel lettore, si apre la porta. La porta si richiude dopo 20 secondi. 5. Un sistema di allarme costituito da un sensore, una sirena e una leva a due posizioni (on/off). Il sistema puo essere inserito (leva on) o disinserito (leva off). Si scriva la specifica TRIO della seguente porzione di sistema: (a) A sistema inserito, la sirena si accende dopo 5 sec. dal rilevamento di una presenza da parte del sensore; (b) La sirena si spegne quando viene girata su off la leva. 6. Un sistema di accesso a un parcheggio e costituito da un lettore di tessera magnetica, una sbarra e una cellula fotoelettrica. Si scriva la specifica TRIO della seguente porzione di sistema: (a) La sbarra si alza dopo 15 sec. dall inserimento della tessera, a meno che in tale intervallo la cellula fotoelettrica non abbia rilevato il passaggio di un veicolo; (b) La sbarra si riabbassa dopo un minuto. 4

4 Specifiche Algebriche: Assumendo di avere gia specificato le primitive per l accesso e la manipolazione di array di elementi generici, si vogliono definire delle ulteriori primitive di manipolazione. In particolare, si assuma di avere gia specificate le primitive (A rappresenta un generico array, I rappresenta un elemento generico dell array, i e un intero): dim(a): ritorna la dimensione dell array, not empty(a,i): ritorna TRUE se 0 i < dim(a) e l elemento i-esimo dell array e non vuoto. Ritorna FALSE altrimenti. A[i]: ritorna l elemento i-esimo dell array se not empty(a,i) e TRUE, ERROR altrimenti. set[a,i,i]: ritorna l array in cui al posto i-esimo e memorizzato I se 0 i < dim(a), ERROR altrimenti. Si definiscano sia sintatticamente che semanticamente le seguenti primitive (Si assuma di avere la specifica dei booleani, e degli interi data. Si assuma che sugli item siano definite le classiche funzioni di confronto =, <, >,, ): 1. nelem(a): ritorna il numero di elementi memorizzati in A. Sintassi: nelem: array -> integer nelem(a) = nelem1(a,dim(a)-1) nelem1: array x integer -> integer nelem1(a,n) = if ((n < 0) or (n >= dim(a))) else if (n = 0) then if (not_empty(a,0)) then 1 else 0 else if (not_empty(a,n)) then 1+nelem1(A,n-1) else nelem1(a,n-1). 2. search(a,i): ritorna TRUE se I e in A, F ALSE altrimenti. Sintassi: search: array x item -> boolean search(a,i) = search1(a,i,dim(a)-1) search1: array x item x integer -> boolean search1(a,i,n) = if ((n < 0) or (n >= dim(a))) 5

else if (n = 0) then if (not_empty(a,0)) then if (A[0]=I) then TRUE else FALSE else FALSE else if (not_empty(a,n)) then if (A[n]=I) then TRUE else search1(a,i,n-1) else search1(a,i,n-1) 3. count(a,i): ritorna il numero di volte che I e memorizzato in A. Sintassi: count: array x item -> integer count(a,i) = count1(a,i,dim(a)-1) count1: array x item x integer -> integer count1(a,i,n) = if ((n < 0) or (n >= dim(a))) else if (n = 0) then if (not_empty(a,0)) then if (A[0]=I) then 1 else 0 else 0 else if (not_empty(a,n)) then if (A[n]=I) then 1+count1(A,I,n-1) else count1(a,i,n-1) else count1(a,i,n-1) 4. add(a,i): ritorna ERROR se non vi sono celle vuote in A. Altrimenti, se I non e gia memorizzato in A, ritorna l array in cui I e aggiunto ad A. Altrimenti, ritorna l array A. Sintassi: add: array x item -> array add(a,i) = if (nelem(a) = dim(a)) else if (search(a,i)) then A else add1(a,i,dim(a)-1) add1: array x item x integer -> array add1(a,i,n) = if ((n < 0) or (n >= dim(a))) 6

else if (n = 0) then if (not_empty(a,0)) else set(a,i,0) else if (not_empty(a,n)) then add1(a,i,n-1) else set(a,i,n) anche la specifica: add1(a,i,n) = if ((n < 0) or (n >= dim(a))) else if (n = 0) then set(a,i,0) else if (not_empty(a,n)) then add1(a,i,n-1) else set(a,i,n) e corretta. 5. Assumendo che gli elementi in A siano memorizzati consecutivamente a partire dalla posizione 0 ed in ordine crescente, si definiscano le primitive: (a) insert(a,i). insert(a,i) ritorna A se I e gia in A, altrimenti ritorna ERROR se A non ha celle vuote, altrimenti ritorna l array in cui I e inserito in modo ordinato in A. Sintassi: insert: array x item -> array insert(a,i) = if (not_empty(a,dim(a)-1)) else if (not_empty(a,pos(a,i))) then if A[pos(A,I)]=I then A else insert1(a,i,pos(a,i)) insert1: array x item x integer -> array insert1(a,i,n) = if ((n < 0) or (n >= dim(a))) else set(shift_r(a,n,nelem(a)),i,n) shift_r: array x integer x integer -> array shift_r(a,n,m) = if (m = n) then A else shift_r(set(a,a[m-1],m),n,m-1) pos: array x item -> integer 7

pos(a,i) = pos1(a,i,0,nelem(a)-1) pos: array x item x integer x integer -> integer pos1(a,i,l,h) = if (l=(l+h)/2) then l else if (A[(l+h)/2] < I) then pos1(a,i,((l+h)/2)+1,h) else pos1(a,i,l,(l+h)/2) (b) delete(a,i). delete(a,i) ritorna ERROR se A non ha nessun elemento, altrimenti ritorna l array in cui I e eliminato da A. Si assume che vi sia una sola occorrenza di I in A. Sintassi: delete: array x item -> array delete(a,i) = if (-not_empty(a,0)) else if (search(a,i)) then shift_l(a,pos(a,i),nelem(a)) else A shift_l: array x integer x integer -> array shift_l(a,n,m) = if (m = n) then A else shift_l(set(a,a[n+1],n),n+1,m) Si noti che la specifica sopra provoca una eliminazione dell elemento desiderato, attraverso uno shift a sinistra degli elementi. Tuttavia, e possibile che l ultimo elemento dell array venga duplicato. Per ovviare a questo problema, assumendo di avere data una funzione mak_empty: array x integer -> integer tale che (assumendo che 0 <= n < dim(a)) not_empty(mak_empty(a,n),n) = FALSE allora si poteva scrivere: delete(a,i) = if (-not_empty(a,0)) else if (search(a,i)) then mak_empty(shift_l(a,pos(a,i),nelem(a)),nelem(a)-1) else A 8

5 Testing: Si considerino le seguenti funzioni C++. int f (int num) { int primo; primo = 1; if ((num % 2) == 0) primo = 0; if (((num % 3) == 0) ((num % 5) == 0)) primo = 0; if (primo == 1) cout << "Il numero " << num << " non e divisibile per 2, 3, 5\n"; else cout << "Il numero " << num << " e divisibile per 2, o per 3, o per 5\n"; int f (int num1, int num2, int num3) { if ((num1 < num2) (num1 < num3)) cout << "no ok"; while (num2 > 0) { num1 = num1-1; num2 = num2-1; if (num1 == num3) cout << "ok"; else cout << "no ok"; int f (int num1, int num2, int num3) { int n = 0; if ((num1 > num2) && (num3 == 0)) cout << "ok"; while (num1 < num2) { n = n+1; num1 = 2*num1; if (n == num3) cout << "ok"; else cout << "no ok"; int f (int num1, int num2, int num3) { int n = 0; if (num2 > num1/2) 9

if (num3 == 0) cout << "ok"; else cout << "no ok"; while (num1 >= 2*num2) { if ((num1 % num2) == 0) n = n+1; num2 = num2+1 if (n == num3) cout << "ok"; else cout << "no ok"; int f (int num) { int i, primo; primo = 1; i = 3; if ((num % 2) == 0) primo = 0; while ((i <= num/2) && (primo)){ if (num % i == 0) primo=0; i=i+2; if (primo) cout << "Il numero " << num << " e primo \n"; else cout << "Il numero " << num << " non e primo \n"; Per ognuna delle funzioni, definire insiemi di test (ognuno corrispondente a un insieme di valori per le variabili in input) che copra i comandi ma non le decisioni, le decisioni ma non le condizioni, le condizioni ma non le decisioni, le condizioni e le decisioni. Ogni insieme di test non deve contenere piú di 4 elementi. 10