Recuperare tutte le risposte Gestione di input-output Fabio Massimo Zanzotto (slides di Andrea Turbati)

Slides:



Advertisements
Presentazioni simili
Active Server Pages ed ADO. Scrivere ASP Le pagine ASP possono contenere codice HTML o XML Le parti del documento che racchiudono codice script vanno.
Advertisements

INFORMATICA Altre Istruzioni di I/O
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
Java Stream e File. La classe File Per operare con lintero file java mette a disposizione la classe File Per utilizzare la classe File è necessario importare.
PROGRAMMARE IN PASCAL (le basi)
I File di testo in Pascal
I DATI I PRINCIPALI TIPI DI DATO UTILIZZATI IN PROGRAMMAZIONE
MATLAB.
MATLAB. Scopo della lezione Programmare in Matlab Funzioni Cicli Operatori relazionali Esercizi vari.
Algoritmi e Programmazione
1 System Call per Comunicazione tra Processi Pipe.
SC che operano su file (1)
Interfaccia del file system
INFORMATICA I file.
Programmazione Procedurale in Linguaggio C++
Programmazione Procedurale in Linguaggio C++
Caratteri e stringhe di caratteri
Argomenti dalla linea dei comandi Gli argomenti possono essere passati a qualsiasi funzione di un programma, compresa la main(), direttamente dalla linea.
Sistemi basati su conoscenza Esercizi Prolog
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Stringhe e Puntatori Marco D. Santambrogio – Ver. aggiornata al 18 Marzo 2013.
File.
Laboratorio di Linguaggi lezione XI: I/O Marco Tarini Università dellInsubria Facoltà di Scienze Matematiche, Fisiche e Naturali di Varese Corso di Laurea.
Cosè un programma? LALA PROGRAMMAZIONE PROGRAMMAZIONELALA PROGRAMMAZIONE PROGRAMMAZIONE UN ELENCO DI ISTRUZIONI, APPARTENENTI A UN BEN DEFINITO LINGUAGGIO,
Introduzione agli stream e alle classi
Il linguaggio Fortran 90: 5. Formato di I/O e Files
INFORMATICA Altre Istruzioni di I/O. © Piero Demichelis 2 Funzioni di I/O Per la lettura e la scrittura da videoterminale il C prevede numerose istruzioni.
Esercizio: Copiare un file in un nuovo file mediante le funzioni read e write.
Fondamenti di Informatica A - Massimo Bertozzi TIPI DI DATO IN C++ What's in a name? That which we call a rose By any other name would smell as sweet.
I File.
Vincoli di integrità generici Con i costrutti visti sinora, non è sempre possibile definire tutti i possibili vincoli di integrità. Per questo esiste listruzione.
Manipolazione dei dati I comandi SQL che permettono di modificare il contenuto di una base di dati sono insertdeleteupdate insert ha la seguente sintassi:
Fondamenti di Informatica Laurea in Ingegneria Civile e Ingegneria per lambiente e il territorio Ambienti di programmazione Stefano Cagnoni e Monica Mordonini.
Sistemi Operativi - Introduzione 1 Il sistema operativo UNIX Dettagli e comandi avanzati Niccolò Battezzati Politecnico di Torino Dip. Automatica e Informatica.
Lezione 2 Programmare in ASP
GESTIONE DEI FILE Per poter mantenere disponibili i dati tra le diverse esecuzioni di un programma (persi-stenza dei dati) è necessario poterli archi-viare.
Corso di PHP.
File ad accesso casuale o random
TURBOPASCAL …. ripassiamo - prof. V. Riboldi -.
Esecuzione dei programmi Prolog Liste ed operatori aritmetici
Il primo passo: I basilari del Prolog
1 Gestione dei File. 2 Perché i file? Sono strutture dati persistenti Sono solitamente memorizzati sui dischi –Si usano dall'interno dei programmi Realizzano.
Fabio Massimo Zanzotto (slides di Andrea Turbati con aggiunte)
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Array e stringhe Marco D. Santambrogio – Ver. aggiornata al 9 Agosto 2013.
Strategie per il problem solving
BIOINFO3 - Lezione 261 ESERCIZIO Esercizio. Leggere delle sequenze di DNA (una per riga, a partire da inizio riga) e stampare solo le sequenze lunghe più
BIOINFO3 - Lezione 201 Come in ogni corso di introduzione ad un linguaggio di programmazione, proviamo a scrivere lormai celebre primo programma di prova.
REDIREZIONE INPUT E OUTPUT
Fopndamenti di programmazione. 2 La classe String Una stringa è una sequenza di caratteri La classe String è utilizzata per memorizzare caratteri La classe.
ASP – Active Server Pages - 1 -Giuseppe De Pietro Introduzione ASP, acronimo di Active Server Pages, sta ad indicare una tecnologia per lo sviluppo di.
Definire operatori Strutture dati Fabio Massimo Zanzotto (slides di Andrea Turbati)
TURBOPASCAL …. ripassiamo - prof. V. Riboldi -.
Linguaggi e Modelli di Programmazione Fabio Massimo Zanzotto.
Pagine ASP parte 2 La gestione dei file Stefano Schacherl.
Lezione 3 Struttura lessicale del linguaggio
Ordinamento e Operazioni su Strutture Dati Fabio Massimo Zanzotto.
Recuperare tutte le risposte Gestione di input-output Fabio Massimo Zanzotto (slides di Andrea Turbati)
Percorsi su grafi, Sottoalberi Comuni e Programmazione Dinamica Fabio Massimo Zanzotto.
Controllare Tipi Dati Decomporre fatti Controllare il database Fabio Massimo Zanzotto (slides di Andrea Turbati)
Capitolo 6 Iterazione Lucidi relativi al volume: Java – Guida alla programmazione James Cohoon, Jack Davidson Copyright © The McGraw-Hill Companies.
File binari Accesso a file con record di lunghezza costante Struct Persona { Int id; Char nome[50];// nome e cognome Double stipendio; }; Persona dipendente;
Lez. 9 (13/14)Elementi di Programmazione1 Lezione 9 Valutazione di espressioni File di testo sequenziali.
1 SC che operano su processi Getpid, fork, exec, wait, waitpid, exit, dup, dup2.
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Array e “stringhe” Marco D. Santambrogio – Ver. aggiornata al 26 Marzo 2014.
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
Informatica e Informatica di Base
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Array e “stringhe” Marco D. Santambrogio – Ver. aggiornata al 14 Marzo 204.
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Array e “stringhe” Marco D. Santambrogio – Ver. aggiornata al 28 Ottobre 2014.
Files in C++ Motivazioni Un programma in esecuzione legge (sequenzialmente) una sequenza di caratteri prodotti "al volo" dall'utente (tramite tastiera)
Transcript della presentazione:

Recuperare tutte le risposte Gestione di input-output Fabio Massimo Zanzotto (slides di Andrea Turbati)

© A.Turbati, F.M.ZanzottoLogica per la Programmazione e la Dimostrazione Automatica University of Rome Tor Vergata Ricordando ! fail true assert retract

© A.Turbati, F.M.ZanzottoLogica per la Programmazione e la Dimostrazione Automatica University of Rome Tor Vergata Trovare tutte le soluzioni Talvolta potrebbe essere utile avere tutte le risposte ad una query su una lista. Esempio: /*padre(PADRE,FIGLIO)*/ padre(gino,pino). padre(gino,rino). padre(gino,dino). … Scrivere un predicato: /*figli(PADRE,FIGLI)*/

© A.Turbati, F.M.ZanzottoLogica per la Programmazione e la Dimostrazione Automatica University of Rome Tor Vergata Il prolog fornisce queste built-in: bagof(+Template, :Goal, -Bag) setof(+Template, +Goal, -Set) findall(+Template, :Goal, -Bag) bagof, setof, findall

© A.Turbati, F.M.ZanzottoLogica per la Programmazione e la Dimostrazione Automatica University of Rome Tor Vergata Analizziamo il bagof bagof(+Template, :Goal, -Bag) Unify Bag with the alternatives of Template, if Goal has free variables besides the one sharing with Template bagof will backtrack over the alternatives of these free variables, unifying Bag with the corresponding alternatives of Template. The construct +Var^Goal tells bagof not to bind Var in Goal. bagof/3 fails if Goal has no solutions.

© A.Turbati, F.M.ZanzottoLogica per la Programmazione e la Dimostrazione Automatica University of Rome Tor Vergata Esempio foo(a, b, c). foo(a, b, d). foo(b, c, e). foo(b, c, f). foo(c, c, g). 3 ?- bagof(C, foo(A, B, C), Cs). A = a, B = b, C = G308, Cs = [c, d] ; A = b, B = c, C = G308, Cs = [e, f] ; A = c, B = c, C = G308, Cs = [g] ; 4 ?- bagof(C, A^foo(A, B, C), Cs). A = G324, B = b, C = G326, Cs = [c, d] ; A = G324, B = c, C = G326, Cs = [e, f, g] ;

© A.Turbati, F.M.ZanzottoLogica per la Programmazione e la Dimostrazione Automatica University of Rome Tor Vergata Analizziamo il setof setof(+Template, +Goal, -Set) Equivalent to bagof/3, but sorts the result using sort/2 to get a sorted list of alternatives without duplicates.

© A.Turbati, F.M.ZanzottoLogica per la Programmazione e la Dimostrazione Automatica University of Rome Tor Vergata Esercizio Realizzare /*duplicates(ListWithDuplicates,ListWithoutDuplicates).*/

© A.Turbati, F.M.ZanzottoLogica per la Programmazione e la Dimostrazione Automatica University of Rome Tor Vergata Gestione dellinput/output Predicati base per gestire standard input/standard output Basic put(CHAR). get(CHAR). nl. For atoms and predicates. write(ATOM). writeq(ATOM). read(ATOM).

© A.Turbati, F.M.ZanzottoLogica per la Programmazione e la Dimostrazione Automatica University of Rome Tor Vergata Durante lesecuzione di un programma Prolog sono sempre attivi due stream di dati, uno di input e uno di output: –Current input stream –Current output stream Di norma questi due stream coincidono con la console utente input/output stream

© A.Turbati, F.M.ZanzottoLogica per la Programmazione e la Dimostrazione Automatica University of Rome Tor Vergata È possibile cambiare i due stream da utilizzare see(Filename). setta il nuovo input stream seen. chiude linput stream corrente tell(filename). setta il nuovo output stream told. chiude loutput stream corrente Input/output stream

© A.Turbati, F.M.ZanzottoLogica per la Programmazione e la Dimostrazione Automatica University of Rome Tor Vergata È possibile avere più stream aperti, ma solo 2 sono gli stream correnti di input e di output Per aprire uno stream: open(+SrcDest, +Mode, ?Stream) La variabile Stream conterrà lo stream aperto e verrà passata ai predicati che hanno bisogno di interagire con esso (lettura o scrittura) Apertura di uno stream

© A.Turbati, F.M.ZanzottoLogica per la Programmazione e la Dimostrazione Automatica University of Rome Tor Vergata open(+SrcDest, +Mode, ?Stream) SrcDest è lidentificativo dello stream da aprire (di solito il path di un file) Mode: –read –write –append (scrittura dalla fine del file) –update (scrittura dallinizio del file) Open

© A.Turbati, F.M.ZanzottoLogica per la Programmazione e la Dimostrazione Automatica University of Rome Tor Vergata Per leggere dallinput stream un termine si può usare read/1 o read/2 –read(-Term) –read(+Stream, -Term) La read legge dei termini che finiscono con il punto (ma in Term non mette il punto ) Per scrivere un termine sulloutput stream si può usare write/1 o write/2 –write(+Term) –write(+Stream, +Term) read e write

© A.Turbati, F.M.ZanzottoLogica per la Programmazione e la Dimostrazione Automatica University of Rome Tor Vergata Vedere lesempio contenuto in prolog-5.pl Il file di input deve contenere dei termini, senza spazi, che terminano con dei punti Il file di output conterrà la lista dei termini trovati nel primo file (esclusi i punti alla fine) e tale lista viene messa un termine per riga Esempio open/read/write

© A.Turbati, F.M.ZanzottoLogica per la Programmazione e la Dimostrazione Automatica University of Rome Tor Vergata cube:- write('Next number, please:'), read(X), process(X). process(stop):- !. process(N):- C is N**3, write('Cube of '), write(N),write(' is '), write(C), nl, cube. Esempio read/write console

© A.Turbati, F.M.ZanzottoLogica per la Programmazione e la Dimostrazione Automatica University of Rome Tor Vergata processFile(File):- see(File), processFile, seen. processFile :- read(Query), process(Query). process(end_of_file):- !. process(Query):- Query, write(Query), nl, processFile. Eseguire delle query da un file

© A.Turbati, F.M.ZanzottoLogica per la Programmazione e la Dimostrazione Automatica University of Rome Tor Vergata In Prolog, oltre a leggere/scrivere i termini completi, è possibile leggere/scrivere un carattere alla volta In alcuni casi questo è preferibile, perché permette di avere una maggiore libertà sul tipo di input da analizzare Manipolare i singoli caratteri

© A.Turbati, F.M.ZanzottoLogica per la Programmazione e la Dimostrazione Automatica University of Rome Tor Vergata Per leggere i singoli caratteri esistono i seguenti predicati: –get/1 -> get(-Char) –get/2 -> get(+Stream, -Char) –get0/1 -> get0(-Char) legge anche gli spazi –get0/2 -> get0(+Stream, -Char) Per scrivere –put/1 -> put(+Char) –put/2 -> put(+Stream, +Char) ATTENZIONE: tutte queste funzioni lavorano con il codice ASCII dei caratteri (0-127) Manipolare i singoli caratteri

© A.Turbati, F.M.ZanzottoLogica per la Programmazione e la Dimostrazione Automatica University of Rome Tor Vergata Per copiare interamente un file generico non si può usare la read, perché si aspetta dei termini con il punto finale La get0 invece non ha questa limitazione, lavora sui singoli caratteri Vedere nel file prolog-5.pl la regola cloneFile Esempio: copiare un file

© A.Turbati, F.M.ZanzottoLogica per la Programmazione e la Dimostrazione Automatica University of Rome Tor Vergata In certi casi è richiesto di trasformare una sequenza di caratteri in un atomo Il predicato name fa proprio questo: –name(?AtomOrInt, ?String) –String è la lista di caratteri (codici ASCII) che uniti insieme danno latomo AtomOrInt Es: –name(zx232, [122,120,50,51,50]). Costruire e scomporre gli atomi

© A.Turbati, F.M.ZanzottoLogica per la Programmazione e la Dimostrazione Automatica University of Rome Tor Vergata Usando la name è possibile creare dei nuovi atomi a partire da atomi già esistenti, scomponendoli nei caratteri ASCII corrispondenti e poi riunendoli newAtom(Atom1, Atom2, NewAtom):- name(Atom1, List1), name(Atom2, List2), append(List1, List2, NewList), name(NewAtom, NewList). Costruire e scomporre gli atomi

© A.Turbati, F.M.ZanzottoLogica per la Programmazione e la Dimostrazione Automatica University of Rome Tor Vergata Dividere le parole in una frase Prelevando da input, generare il predicato: /*getsentence( Wordlist)*/ vero se in input cè una sequenza di caratteri che termina col punto e questa sequenza è messa in una lista di parole.

© A.Turbati, F.M.ZanzottoLogica per la Programmazione e la Dimostrazione Automatica University of Rome Tor Vergata Dividere le parole in una frase getsentence( Wordlist) :- get0( Char), getrest( Char, Wordlist). getrest( 46, [] ) :- !. % End of sentence: 46 = ASCII for '.' getrest( 32, Wordlist) :- !, % 32 = ASCII for blank getsentence( Wordlist). % Skip the blank getrest( Letter, [Word | Wordlist] ) :- getletters( Letter, Letters, Nextchar), % Read letters of current word name( Word, Letters), getrest( Nextchar, Wordlist). getletters( 46, [], 46) :- !. % End of word: 46 = full stop getletters( 32, [], 32) :- !. % End of word: 32 = blank getletters( Let, [Let | Letters], Nextchar) :- get0( Char),getletters( Char, Letters, Nextchar).

© A.Turbati, F.M.ZanzottoLogica per la Programmazione e la Dimostrazione Automatica University of Rome Tor Vergata Scrivere una regola che, presa una lista i cui elementi sono a loro volta delle liste, stampi su ogni riga gli elementi delle liste interne. –?- stampaLista([[1,a], [2,b]]). –1 a –2 b Scrivere un programma che data una stringa in input (magari leggendola da un file) rimuova gli spazi multipli trasformandoli in spazi singoli. Farne due versioni: –Una sia con get che get0 –Una solo con get0 Esercizi

© A.Turbati, F.M.ZanzottoLogica per la Programmazione e la Dimostrazione Automatica University of Rome Tor Vergata Scrivere una regola che preso un nome al singolare lo converta nel suo plurale. Usare solo i nome che hanno un plurale regolare, come ad esempio: –rosa->rose –gatto -> gatti Esercizi