Benvenuto a Computer Science & Co

di Daniele Santamaria

venerdì 27 novembre 2009

Elementi di Programmazione Dinamica

Elementi di Programmazione dinamica

Download Parte Prima

sabato 14 novembre 2009

Tabelle Hash

introduzione all'hashing

Download

Correzione pag.7 il 16/11/2009 ore 12.51

Correzione pag.2 il 27/11/2009 ore 17.48

B-Tree

introduzione ai b-alberi

Download

domenica 1 novembre 2009

TCL\OTCL (Tool Command Language\Object TCL)

1.0 Fondamenti

Tcl/Otcl è un linguaggio di scripting position-based, solitamente usato su sistemi embedded costituito da una sequenza di comandi separati dal carattere “newline” o ; . Ogni comando è composto da una o più parole che rappresentano la direttiva e i parametri presi in input. Ogni comando genera un suo output costituito da una stringa stampata a video. A differenza di molti linguaggi di scripting il Parser non assegna significati agli argomenti. Ad esempio il comando

% set y 4

Assegna alla variabile y il valore 4

% set x y+5

Assegna alla variabile x il valore stringa “y+5”

%set w $y+10

Assegna alla variabile w il valore stringa “4+10”. Il simbolo $ permette di accedere alla variabile memorizzata con il nome indicato subito dopo il carattere stesso.
Per effettuare le operazioni aritmetiche si ricorre al comando

%expr espressione

Dove espressione rappresenta l’espressione aritmetica che vogliamo calcolare. Il nome di una variabile può contenere lettere , numeri e underscore. Non è necessario definire variabili prima del loro uso. Con la sintassi [ comando ] è possibile inserire comandi come parametri di altri comandi. Ad esempio

%set x [ set y 10]

Assegnerà ad x ed a y il valore 10. In alternativa si può usare “ ”.

%set b 5
%set x “ b-5 vale [ expr $b-5] ”

Ora x varrà “b-5 vale 0”.
I caratteri speciali come $ possono essere ignorati se preceduti dal caratter \ . Ad esempio

%set x \$

Assegnerà ad x il valore stringa $ . Può anche permettere di scrivere un comando su più linee ignorando il carattere “invio”.
Il comando puts permette la scrittura su un determinato device. Per stampare su schermo scriviamo

%puts “ Esempio di stampa su schermo”

I commenti vanno preceduti dal carattere #
Adesso lavoriamo con le stringhe. Possiamo utilizzare i tradizionali caratteri speciali

* zero o più caratteri
? un singolo carattere
[ x-y] un carattere del set compreso dalle lettere qui indicate come x e y
[ ] un set tra i caratteri presenti all’interno delle parentesi.

Le stringhe possono essere manipolate mediante il comando

%String option ?args? ?args?

Vediamo alcune opzioni.


%string first pattern stringa2 ?start_index?

Cerca pattern in stringa2 a partire da start_index se specificato. Ritorna la posizione della prima occorrenza trovata, altrimenti ritorna -1. Possiamo usare l’opzione last al posto di first per avviare la ricerca a partire dall’ultimo carattere.

%string length stringa

ritorna il numero di caratteri presenti in stringa.

%stringa match ?-nocase? pattern stringa

verifica se pattern corrisponde a stringa, altrimenti ritorna -1. Con –nocase è possibile il match è case-unsensitive.

%string range stringa inizio fine

ritorna il range di caratteri trovati in stringa a partire dal pattern inizio e a finire con il pattern fine.

%string tolower stringa ?first? ?last?

ritorna la conversione in minuscolo di stringa a partire da first e a finire con last se questi sono specificati. Al posto di tolower si può specificare toupper per convertire in maiuscolo.

%scan string_format var_name ?var_name2?....

Effettua il parsing dei parametri indicati come var_name secondo la convenzione specificata da string_format. Ad esempio si può usare

%d per intero decimale
%o per intero ottale
%x per intero esadecimale
%b per intero binario
%c per singolo carattere

%format format_string ?arg1? ?arg2?...

Formatta arg1,arg2…. Second la convenzione specificata da format_string
Per ulteriori comandi potete consultare il manuale.

2.0 Liste e Array

Adesso vediamo come usare le liste. In tcl gli elementi di una lista vanno racchiusi tra {}. È possibile annidare più liste per creare matrici. Per creare una lista useremo il comando
%set nome_lista { elemento1 elemento2 ….}

mentre con il comando

%list nome_lista { elemento1 elemento2 ….}

si ottiene la stampa a video della lista ma non viene memorizzata.
Il primo elemento di una lista viene indicato con l’indice 0 mentre l’ultimo con l’indice end. Il comando

%lindex nome_lista ?indice?

restituisce l’elemento di indice ‘indice’ se specificato, altrimenti restituisce tutta la lista. Possiamo ordinare alfabeticamente una lista con il comando

%lsort nome_lista

Il comando supporta diverse opzioni.
Il comando

%lappend nome_lista elemento

inserisce ‘elemento’ alla fine della lista. In questo comando non va specificato il simbolo $ quando ci si riferisce ad una lista memorizzata . Ad esempio se creiamo la lista chiamata elenco e vogliamo inserire l’elemento ‘ultimo’ useremo

%lappend elenco ultimo

E non %lappend $elenco ultimo

Possiamo inserire un elemento nella posizione desiderata con il comando
%linsert nome_lista posizione elemento
Per sapere quanti elementi contiene una lista impartiamo

%llength nome_lista

Passiamo ora agli array. In tcl gli array sono associativi. Ciò vuol dire che l’indice è una stringa che possiamo scegliere a nostro piacere. Per creare una lista o per inserire un elemento usiamo il comando

%set array nome_array(indice) valore

Possiamo creare un array a partire da una lista con il comando

%set array nome_array [ list indice1 elemento1 indice2 elemento2 …]

Possiamo ottenere l’insieme delle coppie indice-valore con il comando

%array get nome_array

Qui non bisogna specificare $.Non otteniamo gli indici ordinati alfabeticamente ne secondo l’ordine di inserimento, ma secondo uno schema utilizzato da tcl per memorizzare la struttura dati. Per ottenere una lista di indici a partire da un pattern specifico usiamo

%array names nome_array ?pattern?

Se pattern non è specificato ritorna tutti i valori. Anche qui non va utilizzato il $.

3.0 Strutture di Controllo

Le strutture di controllo non differiscono molto dagli altri linguaggi. Qui però è importante rispettare la spaziatura tra un carattere e l’altro. Per maggiore chiarezza guardare gli esempi allegati.
Per la selezione:

if {espressione} {
body
} elseif {condizione} {
body
} else {
body
}

Per switch:

Switch ?option? string {
pattern1 body1
…..
}

Per while:

while {espressione} {
body
}

Per for:
for {variabile} {condizione} {cond_progr} {
body
}
Per foreach

foreach variabile { elem1 elem2 … } {
body
}


4.0 I/O su file

Adesso occupiamoci di I/O su file. I file possono essere acceduti mediante una variabile.
Per aprire un file impartiamo

%open nome_var [ open "nome_file" "mod"]

dove mod indica la modalità di accesso e può essere:
w+ per lettura e scrittura, crea il file se non esiste
r+ per lettura e scrittura, il file deve esistere
r per lettura
w per scrittura
..

Per scrivere un file usiamo il comando puts con parametro la nostra variabile.

%puts nome_var stringa

Chiudiamo il file con il comando

%close nome_var

Per leggere una riga usiamo il comando gets:

%gets nome_var

Per leggere byte usiamo il comando read

%read nome_var n

Dove n è il numero di byte che vogliamo leggere. La scrittura e la lettura verrà effettuata nella posizione in cui si trova il puntatore al file. Per muovere il puntatore nella posizione 'n' usiamo il comando:

%seek nome_var n

Per conoscere l'attuale posizione del puntatore invece diamo:

%tell nome_var

5.0 Procedure

In tcl le procedure possono essere definite per accettare un numero predefinito di elementi oppure un numero variabile. Inoltre possono essere richiamate ricorsivamente, possono ritornare valori o essere "void". Si definisce una procedura mediante la sintassi

proc nome_procedura args1... {

body

}

Se si decide di accettare un numero variabile di parametri, quando la procedura sarà invoca bisognerà racchiudere tutti i parametri tra " " oppure passarli come lista altrimenti l'interprete non sarà in grado di riconoscerli. Una procedura può anche accedere a variabile globali ma queste vanno prima definite prima della procedura, e poi bisognerà indicare all'interprete di cercare quella variabile fuori dalla procedura definita mediante il comando "%global var_name". Se ad esempio vogliamo usare la variabile globale "ciao" nella procedura "saluti" dobbiamo scrivere:

%set ciao ciao

%proc saluti tuo_nome {

global ciao

puts "$ciao $tuo_nome"

}


6.0 OTCL


Otcl è l’estensione ad oggetti di TCL. Anche se si parla di programmazione ad oggetti, OTCL non va pensato come un normale linguaggio Object Oriented come java o C++. In OTCL le classi possono essere definite in maniera incrementale, ovvero i metodi possono essere aggiunti in runtime. Ogni oggetto è un comando, ogni sottocomando è un argomento dell’oggetto. Possiamo definire una classe con il comando

%Class Nome_classe

e un oggetto con il comando

%Nome_classe nome_oggetto


Tutti le variabili e i metodo sono pubblici e tutte le classi ereditano dalla superclasse Object. Questa superclasse fornisce alcuni metodo per reperire informazioni sulle classi o sugli oggetti. Un oggetto può essere distrutto con il comando

%nome_oggetto destroy


Una variabile di un oggetto può essere instanziata con il comando


%nome_oggetto set nome_variabile valore

Se non specifichiamo il valore il comando fornità come risultato il valore attuale della variabile.
Una variabile di classe può essere instanziata con il comando

%nome_classe set nome_variabile valore

e può essere richiamata all'interno delle procedure mediante il comando

%class instvar nome_variabile

Da questo momento in poi, all'interno della procedura, la variabile di classe sarà disponibile.
Possiamo aggiungere un metodo ad una classe con il comando

%nome_classe instproc nome_metodo args1…. {
body
}

I metodi possono essere richiamati con il comando:

%nome_oggetto nome_metodo ?args?

La parola chiave $self può essere utilizzata per riferirsi all’interno di un metodo all’attuale oggetto instanziato . Il comando

%$self instvar nome_variabile

Permette di accedere alla variabile definita da qualche parte all’interno della classe grazie al comando 'instavar'. Un metodo particolare è il costruttore. Serve all’interprete per poter richiamare il costruttore di Object. Se non viene definito dal programmatore verrà implementato dall’interprete. Un metodo costruttore ha la forma:

%nome_classe instproc init {args} {
……body….
eval $self next $args
}

L’ultimo rigo di comando permette all’interprete di richiamare il costruttore della superclasse.
Otcl ammette l'ereditarietà multipla. Per per ereditare da una serie di classi usiamo:

%Class nome_classe -superclass {nome_superclasse1 nome_superclasse2....}

Nel caso in cui le superclassi implementassero metodi con stess prototipo e firma, uno soltanto dei metodi verrà ereditato. Sarà l'ordine con cui sono indicate le superclassi a stabilire quale sarà il metodo ereditato. Le classe indicata per prima avrà priorità maggiore rispetto alle successive. E' possibile scrivere classi in file script diversi. Basta scrivere il codice su file, ad esempio, un file per ogni classe, scrivere il "main" su di un file aggiungendo come primissime istruzioni i comandi

%source nome_script

uno per ogni file che abbiamo scritto. Il "main" sarà l'unico file che dovremmo eseguire direttamente.

Download1

Download2

Archivio Download1 aggiornato il 07/11/2009 alle 14.15

Archivio Download2 inserito il 10/11/2009 alle 19.55

Correzione post il 12/11/2009 alle 12.26

lunedì 24 agosto 2009

K

Known Iusses: insieme di problemi noti agli sviluppatori, posti all'attenzione degli utenti. Tali problemi possono rappresentare bugs non ancora risolti oppure emergono in corrispondenza di cattivi utilizzi da parte degli utenti o in presenza di software con problemi di compatibilità.

G

Good Practise: Insieme di buone norme da tenere in considerazione quando si programma in un determinato linguaggio o quando si utilizza un determinato software.

Grid Computing: infrastruttura informatica costituita da numerosi calcolatori distribuiti, distanti geograficamente, basata sulla condivisione organizzata delle risorse hardware, al fine di risolvere un problema comune all'intera struttura.

lunedì 10 agosto 2009

Fondamenti di HTML parte terza

Terza e ultima parte di fondamenti di html.

Download

martedì 4 agosto 2009

Fondamenti di HTML parte seconda

Seconda parte di fondamenti del linguaggio HTML (4.0)

Download

domenica 2 agosto 2009

Fondamenti di HTML parte prima

Prima parte di fondamenti del linguaggio html ( v4.0).

Download