Programmazione Mod. B - prof. Burattini - Cap 17 1.

Slides:



Advertisements
Presentazioni simili
Introduzione al linguaggio C++
Advertisements

Shell: variabili di sistema PATH HOME USER PWD SHELL HOSTNAME HOSTTYPE Per visualizzare il valore di tutte le variabili dambiente si usa il comando set.
LINGUAGGIO DI PROGRAMMAZIONE C
Nel C non esiste un dato primario di tipo stringa; queste sono rappresentate con un array monodimensionale di caratteri (tipo char). Così per definire.
Informatica 22/03/2012.
Selezione - approfondimento
PROGRAMMARE IN PASCAL (le basi)
I File di testo in Pascal
MATLAB. Scopo della lezione Programmare in Matlab Funzioni Cicli Operatori relazionali Esercizi vari.
Type Checking (1° parte)
Algoritmi e Programmazione
GLI INSIEMI.
INSIEMI INSIEME= gruppo di oggetti di tipo qualsiasi detti elementi dell’insieme. Un insieme è definito quando viene dato un criterio non ambiguo che.
Laboratorio Matematica e Informatica
Il linguaggio della geometria
Programmazione Concorrente
Reaching Definitions. Tino CortesiTecniche di Analisi di Programmi 2 Reaching definitions Dato un punto del programma, quali sono i comandi di assegnamento.
Algebra di Boole ed elementi di logica
Algebra di Boole ed elementi di logica
Università degli Studi di Bergamo Facoltà di Lingue e Letterature Straniere Facoltà di Lettere e Filosofia A.A Informatica generale 1 Appunti.
1 Corso di Informatica (Programmazione) Lezione 10 (12 novembre 2008) Programmazione in Java: espressioni booleane e controllo del flusso (selezione)
Esercizio 4 Data una stringa P di lunghezza m e definita sullalfabeto, scrivere un programma PERL per calcolare la seguente funzione: PREFIX_FUNCTION:
1 Corso di Laurea in Biotecnologie Informatica (Programmazione) Le stringhe di caratteri in Java Anno Accademico 2009/2010.
Introduzione agli stream e alle classi
Il linguaggio Fortran 90: 4. Array: Vettori e Matrici
Somma = A + B start Stampa Somma Leggi A,B stop Sub SOMMA( ) Dim A, B as Integer A = InputBox("Immetti un numero") B = InputBox(Immetti un secondo numero)
Corso di Informatica A.A Corso di Informatica Laurea Triennale - Comunicazione&Dams Dott.ssa Adriana Pietramala Dott.ssa.
Lezione 4: Costrutti Condizionali Prof. Raffaele Montella.
1 Implementazione di Linguaggi 2 Implementazione di Linguaggi 2 Federico Bernardi Type checking 2° parte Type checking 2° parte - Equivalenza di type expressions.
Procedure e funzioni nei linguaggi di alto livello Lab Programmazione - turno /2006.
Istruzioni di selezione in Java Programmazione Corso di laurea in Informatica.
Esercitazioni sui File Nicola Fanizzi - DIB Corso (B) di Programmazione CdL in Informatica – I livello A.A. 2003/2004.
Istruzioni Decisionali
Esercizio: Copiare un file in un nuovo file mediante le funzioni read e write.
OPERAZIONI CON STRINGHE Le operazioni più interessanti da fare, per ora, con le stringhe sono: determinare la lunghezza della stringa, cioè quanti caratteri.
CAPITOLO 7.
FILE TESTO OUTPUT INPUT + DATI PROGRAMMA OUTPUT INPUT PROGRAMMA CARICAMENTO DATI FILE DATI.
Primo progetto intercorso Simulare lattività di un distributore automatico di generi alimentari in cui sono in vendita prodotti con data di scadenza.
I File.
Sistemi Operativi - Introduzione 1 Il sistema operativo UNIX AWK Niccolò Battezzati Politecnico di Torino Dip. Automatica e Informatica.
Java base I: Sintassi e tipi di dati
GLI INSIEMI Presentazione a cura della Prof.ssa anNUNZIAta DI BIASE
Programmazione Mod. B - prof. Burattini - Cap 17 1.
TURBOPASCAL …. ripassiamo - prof. V. Riboldi -.
PROBLEMA ALGORITMO PROGRAMMA LINGUAGGI di PROGRAMMAZIONE
Parte 4 Elementi di Informatica di base
Dispensa a cura del prof. Vincenzo Lo Presti
Laboratorio di Informatica1 Parte 4 Laboratorio di Informatica Dott.ssa Elisa Tiezzi Dott.ssa Elisa Mori.
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Array e stringhe Marco D. Santambrogio – Ver. aggiornata al 9 Agosto 2013.
BIOINFO3 - Lezione 211 INPUT La lettura di un input dallo standard input (tastiera) si effettua utilizzando lespressione. Quando il programma incontra.
AB =x/xA  xB Unione tra insiemi o
Fopndamenti di programmazione. 2 La classe String Una stringa è una sequenza di caratteri La classe String è utilizzata per memorizzare caratteri La classe.
Funzioni per il trattamento delle stringhe
CORSO DI PROGRAMMAZIONE II Lezione 22
08/04/2017 TEORIA DEGLI INSIEMI In inglese set theory.
JavaScript Generalità Cos'è JavaScript?
Lezione 3 Struttura lessicale del linguaggio
Introduzione a Javascript
Variabili Numeriche –Interi (byte, short, int, long): complemento a 2 –A virgola mobile (float, double): IEEE 745 Alfanumeriche –Carattere (char): Unicode.
Esercitazione su Vector. Permette di definire collezioni di dati generiche, che sono in grado di memorizzare elementi di ogni sottotipo di Object Definito.
Lez. 9 (13/14)Elementi di Programmazione1 Lezione 9 Valutazione di espressioni File di testo sequenziali.
PROVA INTERCORSO MOD.B a.a RICORSIONE ESERCIZI A1.1-A1.6.
In Pascal è possibile avere oltre ai file testo, cioè file di char, anche file di interi, stringhe, records. Unica condizione è quella che se un file.
Lez. 11 (13/14)Elementi di Programmazione1 Lezione 11 Esercizi.
Operatori di incremento e decremento
Ancora sulla shell. Shell e comandi La shell e' un programma che interpreta i comandi dell'utente. I comandi possono essere dati da terminale, oppure.
Linguaggio C: Le basi Stefano Cagnoni e Monica Mordonini
Corso di Laurea Ingegneria Informatica Fondamenti di Informatica
LA TEORIA DEGLI INSIEMI. Il concetto di insieme è un concetto primitivo La parola insieme (o comunità, gregge, raccolta,...) la usiamo molto spesso: l’insieme.
Lezione n. Parole chiave: Corso di Laurea: Insegnamento: Docente: A.A Salvatore Cuomo Esercizi su stringhe e file 15 Stringhe e file.
Transcript della presentazione:

Programmazione Mod. B - prof. Burattini - Cap 17 1

2 GLI INSIEMI Un insieme è una collezione di oggetti aventi in comune determinate proprietà. Per determinare se una espressione assume un valore che appartiene ad un certo insieme si è finora adoperata lespressione IF Variabile IN [xx,yy,…..,zz] THEN Per meglio lavorare con gli insiemi in Pascal si introducono variabili ed espressioni definite specificamente per essi.

Programmazione Mod. B - prof. Burattini - Cap 17 3 Il valore che può assumere una espressione di insiemi deve appartenere ad un preciso insieme. Esempio Insieme delle vocali maiuscole e dei primi dieci digiti decimali (0-9) [A,E,I,O,U,0..9] [A,E,0..9,I,U,O] Lordine con cui sono elencati gli elementi appartenenti ad un insieme è non significativo.

Programmazione Mod. B - prof. Burattini - Cap 17 4 SET VARIABLE : valore assunto da una variabile di un set espression [A..C] [K..Z] TYPE Numeri= InsiemeNumeri = SET OF Numeri VAR Universale, AlcuniInteri, Nullo: InsiemeNumeri Universale:=[1..100] ; AlcuniInteri:=[20,40,60,80,100] ; Nullo:=[]; SET OF TYPE

Programmazione Mod. B - prof. Burattini - Cap 17 5 TYPE Numeri= InsiemeNumeri = SET OF Numeri VAR Universale, AlcuniInteri, Nullo: InsiemeNumeri Universale:=[1..100] ; AlcuniInteri:=[20,40,60,80,100] ; Nullo:=[]; UNIVERSAL SET: linsieme di tutti i possibili membri definiti dal BASE TYPE (al massimo 256 elementi). Un SET VARIABLE può contenere solo elementi appartenenti al type del set di definizione. Questo type è detto BASE TYPE. EMPTY SET è un insieme che non contiene elementi.BASE TYPE: un ordinal type che definisce tutti i possibili membri che un set variable può assumere. Ordinal type: type dove ciascun valore, escluso il primo e lultimo ha un valore precedente o seguente riconoscibile (Meyers pg.191)

Programmazione Mod. B - prof. Burattini - Cap 17 6 SET EXPRESSION : una espressione che opera su SET VARIABLE [A..C]+[K..Z]

Programmazione Mod. B - prof. Burattini - Cap 17 7 Esempio Si vuole realizzare un correttore di testi che controlli se i caratteri letti appartengono a Lettere, Numeri o caratteri speciali come quelli usati per la Punteggiatura di fine frase. Introduciamo le seguenti SET VARIABLE Lettere=[tutte le lettere Maiuscole e tutte le lettere Minuscole] Numeri =[caratteri numerici tra 0 e 9] Punteggiatura=[punto, punto interrogativo e punto esclamativo ]

Programmazione Mod. B - prof. Burattini - Cap 17 8 TYPE CharSet=SET OF char; ………. VAR {variabili globali} Lettere, Numeri, Punteggiatura: CharSet; …………………………. PROCEDURE InizializzaSet(VAR Lettere, Numeri, Punteggiatura: CharSet); BEGIN Lettere:=[A..Z,a..z]; Numeri:=[0..9]; Punteggiatura:=[.,?,!] END;

Programmazione Mod. B - prof. Burattini - Cap 17 9 ESEMPIO Dato un testo, su un file, vogliamo estrarre da questo le parole. Quando si giunge a fine rigo allora al posto delleoln si mette un blank. Soluzione Leggiamo le parole del testo carattere per carattere e ricostruiamole mediante una operazione di concatenazione. Controlliamo ad ogni lettura che il carattere letto appartenga allinsieme Lettere e che non siamo giunti alla fine della linea (eoln). Se siamo in questo caso sostituiamo eoln con un blank.

Programmazione Mod. B - prof. Burattini - Cap PROCEDURE ReadInCh(VAR Ch.char; VAR InFile:text); {} BEGIN IF NOT eoln(InFile) THEN read(InFile,Ch) ELSE Ch:= END; PROCEDURE GetWord(VAR Word:StringType; VAR LastCh:char; VAR InFile:text); {} BEGIN Word:=; ReadInCh(LastCh, InFile); WHILE LastCh IN Letters DO BEGIN Word:=Word+Ch; ReadInCh(LastCh, InFile) END END;

Programmazione Mod. B - prof. Burattini - Cap Esercizio Dato un testo, su un file, vogliamo estrarre da questo le parole escludendo numeri e punteggiatura o altri tipi di caratteri. Quando appare un carattere non appartenente a Lettere questo viene ignorato, e la parola viene scritta su un file. Esempio Testo: La vispa Teresa, avea tra l'erbetta, a volo sorpresa gentil Farfalletta! Risultato: LavispaTeresaaveatral'erbettaavolosorpresagentilFarfalletta

Programmazione Mod. B - prof. Burattini - Cap ESPRESSIONI E OPERAZIONI CON INSIEMI Per definire insiemi di oggetti distinti possiamo ricorrere agli Enumerated Type OperatoreOperazioneEsempio +unione[A..C] + [1..5] [A..C,1..5] AB A+B * intersezione [1,3,5,7] * [1,2,5] [1,5] BA A*B - differenza [1,3,5,7] - [1,2,5] [3,7] BA A-B

Programmazione Mod. B - prof. Burattini - Cap ESEMPIO TYPE VegType=(Asparagi, Bietole, Broccoli, Carote, Cipolle, Patate, Piselli, Pomodori, Sedano,Spinaci); VegSet=SET OF VegType; VAR Coop, {verdure per la Coop} Gs, {verdure per il GS} TutteVerdure, {insieme di tutte le verdure} Verdure: {verdure per la Coop e GS} VegSet; TutteVerdure:=[Asparagi..Spinaci]; Coop:=[Bietole..Patate, Spinaci]; Gs:=[Asparagi..Carote,Pomodori,Spinaci]

Programmazione Mod. B - prof. Burattini - Cap Coop:=[Bietole..Patate, Spinaci]; Gs:=[Asparagi..Carote,Pomodori,Spinaci] TutteVerdure:=[Asparagi..Spinaci]; Nella set variable Verdure possiamo mettere il risultato delle operazioni insiemistiche che si possono applicare agli insiemi Coop e Gs e TutteVerdure Verdure:=Coop+Gs [Asparagi..Patate, Pomodori, Spinaci] Verdure:=Coop*Gs [Bietole..Carote, Spinaci] Verdure:=TutteVerdure-Coop [Asparagi,Piselli..Sedano] Verdure:=TutteVerdure-Gs [Cipolle..Piselli,Sedano] Verdure:=TutteVerdure-Coop-GS [Piselli,Sedano] Verdure:=Gs-Coop [Asparagi,Pomodori,Spinaci] Verdure:=Coop-GS [Cipolle,Patate] Asparagi, Bietole, Broccoli, Carote, Cipolle, Patate, Piselli, Pomodori, Sedano,Spinaci Bietole, Broccoli, Carote, Cipolle, Patate, Spinaci Asparagi, Bietole, Broccoli, Carote, Pomodori, Spinaci TutteVerdure Coop Gs

Programmazione Mod. B - prof. Burattini - Cap Verdure:=Coop+Gs [Asparagi..Patate, Pomodori, Spinaci] Verdure:=Coop*Gs [Bietole..Carote, Spinaci] Verdure:=TutteVerdure-Coop [Asparagi,Piselli..Sedano] Verdure:=TutteVerdure-Gs [Cipolle..Piselli,Sedano] Verdure:=TutteVerdure-Coop-GS [Piselli,Sedano] Verdure:=Gs-Coop [Asparagi,Pomodori,Spinaci] Verdure:=Coop-GS [Cipolle,Patate] Asparagi, Bietole, Broccoli, Carote, Cipolle, Patate, Piselli, Pomodori, Sedano,Spinaci Bietole, Broccoli, Carote, Cipolle, Patate, Spinaci Asparagi, Bietole, Broccoli, Carote, Pomodori, Spinaci TutteVerdure Coop Gs Tutte le verdure disponibili nei due supermercati Tutte le verdure disponibili sia nelluno che nellaltro supermercato Tutte le verdure non disponibili alla Coop Tutte le verdure non disponibili al Gs Tutte le verdure non disponibili né alla Coop né al Gs Tutte le verdure disponibili al Gs ma non alla Coop Tutte le verdure disponibili alla Coop ma non al Gs

Programmazione Mod. B - prof. Burattini - Cap OPERATORI RELAZIONALI =eguaglianza tra insiemi <>diseguaglianza tra insiemi <=sottoinsieme di altro insieme <sottoinsieme proprio di altro insieme <=soprainsieme di altro insieme <soprainsieme proprio di altro insieme Asparagi, Bietole, Broccoli, Carote, Cipolle, Patate, Piselli, Pomodori, Sedano,Spinaci Bietole, Broccoli, Carote, Cipolle, Patate, Spinaci Asparagi, Bietole, Broccoli, Carote, Pomodori, Spinaci TutteVerdure Coop Gs [Coop+Gs]*[Piselli,Sedano]=[] Coop<>Gs [Bietole,Carote..Patate]<Coop Coop<=TutteVerdure Coop+Gs+[Piselli,Sedano]>=TutteVerdure TutteVerdure >Coop+Gs

Programmazione Mod. B - prof. Burattini - Cap SEMANTICA [Coop+Gs]*[Piselli,Sedano]=[] Né la Coop né il Gs hanno Piselli e Sedano Coop<>Gs La Coop e il Gs non hanno esattamente le stesse verdure [Bietole,Carote,Patate]<Coop Le Carote, Cipolle e Patate sono tutte vendute alla Coop Coop<TutteVerdure La Coop non ha tutte le verdure possibili Coop+Gs+[Piselli,Sedano]>=TutteVerdure Le verdure della Coop più quelle del Gs più i Piselli e il Sedano rappresentano tutte le verdure del mercato TutteVerdure >Coop+Gs Le verdure disponibili sul mercato sono di più di quelle vendute dalla Coop e dal Gs

Programmazione Mod. B - prof. Burattini - Cap Sia dato un insiemi di possibili eventi, esempio tutti i numeri interi tra 1 e 100. Si vuole costruire linsieme di tutti i numeri estratti a caso da un generatore random in 50 chiamate. Chiamiamo AccumulatoreUniversale linsieme di tutti i possibili numeri da estrarre, Accumulatore linsieme in cui mettiamo i numeri estratti, EventoCasuale il singolo numero estratto. Pseudo Codice Accumulatore [] WHILE non si sono generati tutti i numeri DO genera un EventoCasuale IF EventoCasuale appartiene allAccumulatoreUniversale THEN Accumulatore Accumulatore + [EventoCasuale] Alcuni algoritmi per lelaborazione di insiemi Algoritmo 14.1

Programmazione Mod. B - prof. Burattini - Cap Sia dato un insiemi di possibili eventi, esempio tutti i numeri interi tra 1 e 100. Si vuole costruire linsieme di tutti i numeri non estratti da un generatore random in 150 chiamate. Chiamiamo RegistratoreUniversale linsieme di tutti i possibili numeri da estrarre Registratore linsieme di tutti i possibili numeri ancora non estratti EventoCasuale il singolo numero estratto. Pseudo Codice Registratore RegistratoreUniversale {insieme universale degli eventi} WHILE non si sono generati tutti i numeri DO genera un EventoCasuale IF EventoCasuale appartiene al Registratore THEN Registratore Registratore - [EventoCasuale] Algoritmo 14.2

Programmazione Mod. B - prof. Burattini - Cap Un SET VARIABLE può essere interpretato come una astrazione capace di caratterizzare uno o più oggetti di un array di variabili booleane. Quando un SET VARIABLE è inizializzato a [ ] questo implica che tutti i flag booleani che riguardano i suoi elementi nellarray sono posti a FALSE. In altre parole è falso che un qualunque elemento X appartenga allinsieme vuoto. Quando un SET VARIABLE è inizializzato allUNIVERSAL SET questo implica che tutti i flag booleani che riguardano i suoi elementi nellarray sono posti a TRUE. In altre parole è vero che qualunque elemento X dellUNIVERSAL SET appartiene allinsieme. Se si aggiunge un nuovo elemento al SET VARIABLE il flag corrispondente diventa TRUE Se si elimina un elemento dal SET VARIABLE il flag corrispondente diventa FALSE

Programmazione Mod. B - prof. Burattini - Cap Supponiamo di voler fare delle elaborazioni su un set variable denominato SomeSet. Chiamiamo SomeSet il set variable su cui si vuole operare Candidato il singolo elemento di SomeSet. MinVal e MaxVal i valori minimo e massimo assunti dagli elementi di SomeSet tra i quali si vuole fare lelaborazione {Elabora gli elementi di SomeSet} Pseudo Codice FOR Candidato MinVal TO MaxVal DO IF Candidato IN SomeSet THEN elabora Candidato Algoritmo 14.3 SomeSet deve essere un sottoinsieme di un UNIVERSAL SET mentre la Base Type è determinata dal sub-range MinVal..MaxVal

Programmazione Mod. B - prof. Burattini - Cap Caso di studio 14.1 Scrivere un programma che mostri tutte le lettere maiuscole presenti in un preassegnato testo e tutte le minuscole non presenti. Abbiamo bisogno di due SET VARIABLE InsiemeMaiuscole InsiemeMinuscole Pseudo codice Inizializza(InsiemeMinuscole, InsiemeMaiuscole, File) {assegna gli insiemi universali a InsiemeMinuscole=[a..z], InsiemeMaiuscole=[] e reset File} RegistraInformazioni(InsiemeMinuscole, InsiemeMaiuscole, File) {legge i caratteri da File li cancella da InsiemeMinuscole se minuscoli, se maiuscoli li aggiuge a InsiemeMaiuscole} MostraInformazioni(InsiemeMinuscole, InsiemeMaiuscole) {mostra il contenuto di InsiemeMinuscole e InsiemeMaiuscole al termine dellelaborazione}

Programmazione Mod. B - prof. Burattini - Cap PROGRAM MostraCaratteri(output,Teresa) {} TYPE MinuSetType=SET OF a..z; MaiuSetType=SET OF A..Z; VAR Teresa :text; InsiemeMaiuscole: MaiuSetType; InsiemeMinuscole: MinuSetType; PROCEDURE Inizializza(VAR InsiemeMaiuscole: MaiuSetType; VAR InsiemeMinuscole: MinuSetType; VAR Teresa:text); BEGIN reset(Teresa); InsiemeMinuscole:=[a..z]; InsiemeMaiuscole:=[] END; …………………………………...

Programmazione Mod. B - prof. Burattini - Cap RegistraInformazioni WHILE NOT eof(Teresa) DO read(Teresa,Ch) IF Ch IN [a..z] THEN InsiemeMinuscole InsiemeMinuscole - [Ch] ELSE IF Ch IN [A..Z] THEN InsiemeMaiuscole InsiemeMaiuscole + [Ch] Domanda: perché non è necessario controllare leoln?

Programmazione Mod. B - prof. Burattini - Cap PROCEDURE RegistraInformazioni(VAR InsiemeMinuscole: MinuSetType; VAR InsiemeMaiuscole: MaiuSetType; VAR Teresa:text); {} VAR Ch:char; BEGIN WHILE NOT eof(Teresa) DO BEGIN read(Teresa,Ch); IF Ch IN [a..z] THEN InsiemeMinuscole:= InsiemeMinuscole - [Ch] ELSE IF Ch IN [A..Z] THEN InsiemeMaiuscole:= InsiemeMaiuscole + [Ch] END END;

Programmazione Mod. B - prof. Burattini - Cap MostraInformazioni mostra testo esplicativo FOR Ch A TO Z DO IF Ch IN InsiemeMaiuscole THEN write(Ch) writeln mostra testo esplicativo FOR Ch a TO z DO IF Ch IN InsiemeMinuscole THEN write(Ch) writeln

Programmazione Mod. B - prof. Burattini - Cap PROCEDURE MostraInformazioni(VAR InsiemeMinuscole: MinuSetType; VAR InsiemeMaiuscole: MaiuSetType; {} VAR Ch: char; BEGIN write( Lettere maiuscole presenti: ); FOR Ch A TO Z DO IF Ch IN InsiemeMaiuscole THEN write(Ch); writeln; write( Lettere minuscole assenti: ); FOR Ch a TO z DO IF Ch IN InsiemeMinuscole THEN write(Ch); writeln END;

Programmazione Mod. B - prof. Burattini - Cap {BODY} BEGIN Inizializza(InsiemeMinuscole, InsiemeMaiuscole, Teresa); RegistraInformazioni(InsiemeMinuscole, InsiemeMaiuscole, Teresa); MostraInformazioni(InsiemeMinuscole, InsiemeMaiuscole); END.

Programmazione Mod. B - prof. Burattini - Cap SET VARIABLE [ ]INSIEME VUOTO SET VARIABLE [X,Y,…... ]INSIEME UNIVERSALE Problema n Sistema per evidenziare leventuale assenza di vocali nellambito di una parola. Se cè almeno una vocale va bene altrimenti il sistema deve eseguire la seguente procedura: mostrare la parola memorizzarla in un file memorizzarla in un array

Programmazione Mod. B - prof. Burattini - Cap Dove SomeFile è un file testo da cui si legge la parola Vocali è il valore che assume un insieme inizializzato con tutte le vocali ChSet è linsieme di caratteri che costituiscono la parola contenuta nella variabile Word VocaliMancanti è una funzione booleana che ritorna TRUE se mancano le vocali in Word Pseudo codice GetAWord(Word, ChSet, SomeFile) IF VocaliMancanti(Vocali, ChSet) THEN Process(Word)

Programmazione Mod. B - prof. Burattini - Cap Prima di lanciare GetAWord e VocaliMancanti supponiamo di avere eseguito il seguente codice: TYPE ChSet Type= SET OF char; VAR Wordset, Vocali: ChSetType; {inizializza Vocali} Vocali:=[A,E,I,O,U,a,e,i,o,u]; se ora facciamo lintersezione tra Vocali e WordSet e troviamo che lintersezione è vuota questo significa che nella parola non ci sono vocali. FUNCTION VocaliMancanti(Vocali,WordSet:ChSetType):boolean; BEGIN VocaliMancanti:=(Vocali*WordSet=[]) END;

Programmazione Mod. B - prof. Burattini - Cap FUNCTION NoConsonant(Vocali,WordSet:ChSetType):boolean; VAR ConSet:ChSetType; BEGIN ConSet:=[a..z;A..Z]- Vocali; NoConsonant :=(ConSet*WordSet=[]) END; Se vogliamo una funzione che controlli che ci sia almeno una consonante nella nostra parola basterà definire un inseme di consonanti ottenuto per differenza tra tutte le lettere dellalfabeto e Vocali.

Programmazione Mod. B - prof. Burattini - Cap Problema del Consiglio di Amministrazione Supponiamo che un Consiglio di Amministrazione possa tenere riunioni valide solo quando: la metà più uno dei suoi membri è presente e o il presidente (P) e la segretaria (S) sono presenti o il presidente (P) e il tesoriere (T) sono presenti o il vice-presidente (VP) e la segretaria (S) e il tesoriere (T) sono presenti Valido= (TotMembri/2) AND ( (P AND S) OR (P AND T) OR (VP AND S AND T) )

Programmazione Mod. B - prof. Burattini - Cap TYPE ConsiglioType=(P,S,T,M1,M2,M3,M4,M5,M6,M7,M8,M9); InsiemePresenti=SET OF ConsiglioType; CONST TotaleMembri:=9; VAR Presenti: InsiemePresenti; TotPresenti:integer; ……………….. FUNCTION Valido(Presenti: InsiemePresenti; TotPresenti:integer):boolean; BEGIN Valido:=(TotPresenti>TotaleMembri DIV 2) AND ( ([P,S]< Presenti) OR ([P,T]< Presenti) OR ([VP,S,T]< Presenti) ) END;

Programmazione Mod. B - prof. Burattini - Cap UNIT STRINGHE Si vuole creare una UNIT che operi sulle stringhe e che sia il più possibile indipendente dal dialetto PASCAL adoperato. StringADT Len Chars Adoperiamo una struttura a RECORD per il data Type Array

Programmazione Mod. B - prof. Burattini - Cap UNIT Stringa; INTERFACE CONST MaxLength=80; TYPE SysString=STRING[MaxLength]; StringADT=RECORD Chars:ARRAY[1.. MaxLength] OF char; Len:0.. MaxLength END;

Programmazione Mod. B - prof. Burattini - Cap Constructor - cambia o inizializza i valori di una variabile astratta Primitive constructor - assegna un valore ad una variabile astratta senza fare uso di altre variabili astratte dello stesso tipo. Ha una sola variabile di output e quelle di input servono per costruire loutput.

Programmazione Mod. B - prof. Burattini - Cap IMPLEMENTATION PROCEDURE NullString(VAR OutStr:StringADT); BEGIN END; ritorna una la stringa nulla. Primitive constructor PROCEDURE ConvertSysString(StrValue:SysString; VAR OutStr:StringADT); VAR Position:1..MaxLength; BEGIN WITH OutStr DO BEGIN Len:=length(StrValue); FOR Position:=1 TO Len DO Chars[Position]:=StrValue[Position] END END; converte una stringa rappresentata in un qualche sistema nella stringa equivalente di type StringADT

Programmazione Mod. B - prof. Burattini - Cap Primitive constructor PROCEDURE ReadString(Sentinel:char;VAR OutStr:StringADT; VAR InFile:text); VAR Ch:char; BEGIN WITH OutStr DO BEGIN Len:=0; ReadCh(Sentinel,Ch,Len,InFille) WHILE Ch<>Sentinel DO BEGIN Len:=Len+1; Chars[Len]:=Ch; ReadCh(SentinelCh,Len,InFile) END END; legge la stringa da un file escludendo eventuali caratteri sentinella

Programmazione Mod. B - prof. Burattini - Cap PROCEDURE ReadlnString (Sentinel:char; VAR OutStr:StringADT;VAR InFile:text); VAR Ch:char; BEGIN WITH InString DO BEGIN Len:=0; WHILE NOT eoln(InFile) AND NOT (Len=MaxLength) DO BEGIN Read(Infile,Ch); Len:=Len+1; Chars[Len]:=Ch; END END; legge una stringa da una linea di un file predeterminato Primitive constructor

Programmazione Mod. B - prof. Burattini - Cap SELECTOR - fornisce informazioni su una variabile di input ADT ad un parametro di uscita. Spesso è una funzione (il parametro di uscita in tal caso è la funzione stessa). Primitive selector - ritorna il valore di uno dei componenti della variabile astratta.

Programmazione Mod. B - prof. Burattini - Cap FUNCTION ACh(Instr:StringADT;Position:integer):char; BEGIN IF Position>InStr.Len THEN Ach:=chr(0) ELSE Ach:=InStr.Chars[Position] END; ritorna il carattere N-esimo di una stringa Primitive selector FUNCTION StrLength(Instr:StringADT):integer; BEGIN StrLength:=Instr.Len END; ritorna la lunghezza della stringa Primitive selector

Programmazione Mod. B - prof. Burattini - Cap Non-primitive selector - ritorna il valore che non è relativo ad uno dei componenti della variabile astratta ma ciò nonostante è utile al client.

Programmazione Mod. B - prof. Burattini - Cap PROCEDURE WritelnString(InStr:StringADT; VAR OutFile:text); BEGIN WriteString(Instr,OutFile); writeln(OutFile) END; scrive una stringa in un file seguita da un Non-primitive selector PROCEDURE WriteString (InStr:StringADT; VAR OutFile:text); VAR Position:integer; BEGIN WITH InStr DO FOR Position:=1 TO Len DO write(OutFile,Chars[Position]) END; scrive una stringa in un file Non-primitive selector

Programmazione Mod. B - prof. Burattini - Cap Ritorna la posizione di partenza di una data sub- stringa nellambito di una preassegnata stringa Selector operations FUNCTION StartPos((Substr, SearchStr:StringADT):integer; VAR SLen,Pos: integer; Found: Boolean; CandStr: StringADT; BEGIN SLen:=SubStr.Len; Found:=FALSE; Pos:=1; WHILE NOT (SearchStr.Len+1-Pos>SLen) AND NOT Found DO BEGIN StrExtract(SearcStr,Pos,SLen,CandStr); IF StrEqual(CandStr,SearchStr) THEN Found:=TRUE ELSE Pos:=Pos+1 END; IF Found THEN StratPos:=Pos ELSE StratPos:=0 END;

Programmazione Mod. B - prof. Burattini - Cap PREDICATE - è una funzione booleana che ritorna informazioni sul valore o lo stato di una variabile astratta.

Programmazione Mod. B - prof. Burattini - Cap FUNCTION StrEqual(Instr1, Instr2:StringADT):boolean; VAR Pos, TotalChars:integer; StillEqual:boolean; BEGIN IF Instr1.Len<>Instr2.Len THEN StillEqual:= FALSE ELSE StillEqual:= TRUE; TotalChars:= Instr1.Len; Pos:=1; WHILE NOT(Pos>TotalChars) AND StillEqual DO IF Minuscole(InStr1.Chars[Pos])<> Minuscole(InStr2.Chars[Pos]) THEN StillEqual:= FALSE ELSE Pos:=Pos+1; StrEqual:=StillEqual END; ritorna TRUE se due stringhe hanno gli stessi caratteri e la stessa lunghezza Predicate operations

Programmazione Mod. B - prof. Burattini - Cap Predicate operations FUNCTION StrLessThan(InStr1, InStr2:StringADT):boolean BEGIN ………………. END; ritorna TRUE se la prima stringa precede alfabeticamente la seconda

Programmazione Mod. B - prof. Burattini - Cap Non-primitive constructor -. Ha almeno una variabile di input il cui tipo è uguale a quello delloutput.

Programmazione Mod. B - prof. Burattini - Cap PROCEDURE ChConcat (Ch; VAR InOutStr:StringADT); BEGIN WITH InOutStr DO IF Len<MaxLength THEN BEGIN Len:=Len+1; Chars[Len]:=Ch END END; concatena un singolo carattere ad una stringa Non-primitive constructor

Programmazione Mod. B - prof. Burattini - Cap Non-primitive constructor PROCEDURE StrConcat (InStr1, InStr2:StringADT Ch; VAR InOutStr:StringADT); VAR PosStr2:integer; BEGIN OutStr:=Instr1; PosStr2=0; WITH OutStr DO WHILE NOT (PosStr2=Instr2.Len) AND NOT (Len=MaxChars) DO BEGIN PosStr2:= PosStr2+1; Len:=Len+1; Chars[Len]:=InStr2.Chars[PosStr2] END END; concatena due stringhe

Programmazione Mod. B - prof. Burattini - Cap Non-primitive constructor PROCEDURE StrExtract(InStr:StringADT; Start, TotalChs:integer; VAR OutStr: StringADT); VAR InStrPos, OutStrPos :integer; BEGIN WITH OutStr DO BEGIN IF Start > Instr.Len THEN Len:=0 ELSE IF TotalChs > InStr.Len+1-Start THEN Len:=InStr.Len+1-Start ELSE Len:=TotalChs; InStrPos:=Start; FOR OutStrPos:=1 TO Len DO BEGIN Chars[OutStrPos]:=InStr.Chars[InStrPos]; InStrPos:=InStrPos+1 END END; copia una stringa di una predeterminata lunghezza a partire da una determinata posizione in una stringa di output

Programmazione Mod. B - prof. Burattini - Cap Non-primitive constructor PROCEDURE StrRemove(Start, TotalChs:integer; VAR InOutStr: StringADT); PredString, SuccString: StringADT; BEGIN IF NOT (Start>InOutStr.Len) THEN BEGIN StrExtract(InOutStr,1,Start-1,PredString); StrExtract(InOutStr,1,Start+TotalChs,InOutStr.Len,SuccString); StrConcat(PredString, SuccString,InOutStr) END END; rimuove un predeterminato numero di caratteri a partire da una certa posizione di una stringa di input/output PROCEDURE StrInsert(InStr:StringADT; Start:integer; VAR InOutStr: StringADT); BEGIN END; inserisce un predeterminata stringa di caratteri a partire da una certa posizione in una variabile stringa.

Programmazione Mod. B - prof. Burattini - Cap PROCEDURE ReadCh(Sentinel:char;PresentLength:integer; VAR Ch:char;VAR InFile:text); BEGIN IF NOT(eoln(InFile) OR (PredsentLength= MaxLength)) THEN Read(InFile,Ch); ELSE Ch:=Sentinel END; legge i caratteri di una stringa da un file e se supera la lunghezza prefissata o trova eoln restituisce un carattere sentinella Non-primitive constructor

Programmazione Mod. B - prof. Burattini - Cap FUNCTION Minuscole(Ch:char):char; BEGIN IF Ch IN ['A'..'Z'] THEN Minuscole:=chr(ordCh)+ord('a')-ord('A')) ELSE Minuscole:=Ch END; trasforma le maiuscole in minuscole

Programmazione Mod. B - prof. Burattini - Cap PROCEDURE ChConcat (Ch; VAR InOutStr:StringADT); BEGIN WITH InOutStr DO IF Len<MaxLength THEN BEGIN Len:=Len+1; Chars[Len]:=Ch END END; concatena i caratteri in una stringa controllando che la lunghezza massima non venga superata

Programmazione Mod. B - prof. Burattini - Cap Dato il tipo astratto lista utilizzare le routine elencate per sviluppare il seguente algoritmo: date tre liste di interi L1, L2, L3, aggiungere in L1 solo gli elementi di L2 presenti in L3 e non in L1, eliminando tutti gli altri. Function Lung(L:tipolista): integer; (*valuta la lunghezza della lista*) Function estrai(L:tipolista, n:integer): integer; (* fornisce il valore dellennesimo intero della lista, se esiste, maxint altrimenti*) Procedure aggiungi(L:tipolista, n:integer; k:integer): integer; (* aggiunge nella posizione n della lista, lelemento k*) Procedure cancella(var L:tipolista; n: integer); (*cancella lennesimo elemento della lista, se esiste*) Es. L L L Risultato L1173

Programmazione Mod. B - prof. Burattini - Cap Utilizzare le seguenti routine per il tipo astratto lista per sviluppare il seguente algoritmo: date tre liste L1, L2, L3, contenenti lettere dellalfabeto, lasciare in L1 tutte le vocali presenti in L1, L2 e L3, senza ripetizioni, ordinate in maniera crescente, in L2 tutte le consonanti presenti in L1, L2 e L3, senza ripetizioni, ordinate in maniera decrescente in L3, tutti caratteri, presenti in L1, L2 e L3, senza ripetizioni, ordinate in maniera crescente. Function Lung(L:tipolista): integer; (*valuta la lunghezza della lista*) Function estrai(L:tipolista, n:integer): char; (* fornisce il valore dellennesimo carattere della lista, se esiste, ? altrimenti*) Procedure cancella(var L:tipolista; n: integer); (*cancella lennesimo elemento della lista, se esiste*) Procedure aggiungi(var L:tipolista; n: integer; lettera:char); (*aggiunge dopo lennesimo elemento della lista il carattere lettera*) Es. L1 b a z e f o a e i o L2 i q w e a z z w q f b L3 f b o a ab e f i o q w z