Libertà vo cercando, ch'è sì cara, come sa chi per lei vita rifiuta

Categoria: java

[RDF/OWL] semantic analysis with Jena

Hi, this is a little Eclipse project I did for a course on Semantic Web.

It works with Jena API and uses some dataset for querying through SPARQL. You’ll see how to deal with the various functionalities such as loading a RDF into a model, querying it through runtime code or the Fuseki interface, how to store the model through TDB and some OWL reasoning

Download :   

[java] la classe Pila

Un semplice esempio sulla gestione di un oggetto di tipo Pila

  • Con controllo d’errore :

[java] Client-Server multithread, lettura file XML

Qui oltre al codice troverete anche la documentazione (javadoc e pdf), è un’applicazione Java sia lato client che server con le seguenti caratteristiche:

Scopo:
Si vuole realizzare un applicazione che permetta ad un client di consultare un database presente
su un server, per poter effettuare alcune letture, che siano dell’intero file o il risultato di una
selezione al suo interno.
Lo scambio dei messaggi tra le due parti applicative deve avvenire attraverso una connessione
affidabile.
Caso in esame:
Si è preso come esempio uno studente che voglia consultare gli stage disponibili attualmente nel
mondo del lavoro, a cui deve essere data la possibilità di avere una visione globale e di poter
effettuare una selezione dei campi attraverso il numero dei posti disponibili, la durata dello stage
o il relativo salario offerto.

Il codice è stato aggiornato rispetto alla documentazione.
Ricordatevi di mettere il file xml nella stessa cartella degli eseguibili.

[update] UDP Echo Client-Server

Aggiornate le classi UDPEcho:

  • inserito il calcolo dei tempi di ricezione per i singoli pacchetti (RTT) e la media totale

[java] Client-Server Echo su UDP

1/04/2012 – Aggiornato

Classi Java che impostano una connessione UDP tra loro, il server rimane in attesa di connessione sulla porta che gli viene passata come parametro, così come il client invece si connette alla porta e all’indirizzo indicato nei parametri.

Il server restituisce al client lo stesso messaggio inviato, ma con una percentuale d’errore e un ritardo minimo modificabile.

Server
Client

[java] Primi passi con le Stringhe

Un semplice esercizio per iniziare a capire come si comporta il Java con le stringhe.

Consegna :

  1. Realizzate una classe java che vi permetta di implementare le seguenti operazioni:
  2. acquisizione di una stringa da tastiera e stampa della stringa
  3. verifica se una stringa contiene il dittongo “ae”;
  4. verifica del valore del primo carattere di una stringa inserita da tastiera; ed il quinto (se c’e’)
  5. produzione di un nuovo array di byte usando l’insieme di caratteri di default sulla piattaforma (getBytes());
  6. trovare la prima occorrenza in cui si trova un carattere in una stringa acquisita da tastiera e stamparla
  7. trovare la prima occorrenza in cui si trova una sottostringa in una stringa acquisita da tastiera e stamparla
  8. trovare la lunghezza di una stringa letta da tastiera
  9. realizzare una nuova stringa che sia la sottostringa della prima, partendo dal 5 carattere;
  10. realizzare una nuova stringa che sia la sottostringa della prima, partendo dal 5 carattere e terminando al carattere 8;
  11. realizzare una nuova stringa che porti in minuscolo TUTTI i caratteri della stringa di partenza letta da tastiera;
  12. realizzare una copia della stringa immessa da tastiera ma senza spazi iniziali e finali;
  13. realizzare una stringa che rappresenti il valore intero dell’intero letto da tastiera;
/home/alex/workspace/stringhe/src/Stringhe.java

import java.io.InputStreamReader;
import java.io.BufferedReader;
import java.io.IOException;

public class Stringhe {

    /**
     @author Alessandro Affinito
     */
    public static void main(String[] argsthrows IOException {
     
        InputStreamReader reader new InputStreamReader (System.in);
        BufferedReader in new BufferedReader (reader);
     
        // acquisizione di una stringa da tastiera e stampa
        String str new String();
        System.out.println(” Iserisci uno o piu’ caratteri: “);
        try{
            str in.readLine();
        }catch (IOException e){
            System.out.println(” Si è verificato un errore : “+e);
        }
        System.out.println(” Hai inserito : “+str );
     
        // 2. verifica se una stringa contiene il dittongo “ae”;
        String trovami=“ae”;
        System.out.println(“\n La stringa di prova contiene \”ae\”? “str.containstrovami ));
     
//      3. verifica del valore del primo carattere di una stringa inserita da tastiera; ed il quinto (se c’e’)
        System.out.println(“\n il primo carattere della stringa e’ : “str.charAt(0));
        if (str.length()>4)
            System.out.println(” ed il quinto e’ : “str.charAt(4));
        else
            System.out.println(” La stringa inserita ha meno di cinque caratteri.”);
     
//      4. produzione di un nuovo array di byte usando l’insieme di caratteri di default sulla piattaforma (getBytes());
        byte []vettoreBites str.getBytes();
     
//      5. trovare la prima occorrenza in cui si trova un carattere in una stringa acquisita da tastiera e stamparla
        System.out.println(” prima occorrenza della \’a\’: “str.indexOf(‘a’) );
     
//      6. trovare la prima occorrenza in cui si trova una sottostringa in una stringa acquisita da tastiera e stamparla
        String substring “asd”;
        System.out.println(” prima occorrenza della \'”+substring+“\’: “str.indexOf(substring) );
     
     
//      7. trovare la lunghezza di una stringa letta da tastiera
        System.out.println(” Dimensione della stringa inserita = “str.length() );
     
//      8. realizzare una nuova stringa che sia la sottostringa della prima, partendo dal 5 carattere;
        String substr1 str.substring(4);
     
//      9. realizzare una nuova stringa che sia la sottostringa della prima, partendo dal 5 carattere e terminando al carattere 8;
        String substr2 str.substring(47);
     
//      10.realizzare una nuova stringa che porti in minuscolo TUTTI i caratteri della stringa di partenza letta da tastiera;
        String strLow str.toLowerCase();
     
//      11.realizzare una copia della stringa immessa da tastiera ma senza spazi iniziali e finali;
        String cleaned str.trim();
     
//      12.realizzare una stringa che rappresenti il valore intero dell’intero letto da tastiera;
        System.out.println(“Inserisci un intero : “);
        String intValue in.readLine();
        intValue intValue.valueOfintValue );
        System.out.println(“\t Rappresentazione dell’intero come stringa : “+intValue );
     
        System.out.println();
    //endMain

}//endClass

Confronto tra algoritmi di ordinamento

26/04/10 Aggiunto Mergesort e altre modifiche. 

Sottofondo consigliato : Red Sector A – Rush

Un programmino in java che permette di confrontare le differenze d’efficienza (in tempo) tra i più noti algoritmi di ordinamento:

I commenti per la documentazione mandano in palla sia kwrite (da cui ho esportato il codice in formato html) sia source-highligth, vabeh ma mica posso pensare a tutto io! 😉

/*
* Ordinamento.java
*
* Copyright 2010 alessandro
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
* MA 02110-1301, USA.
*/
/**
* @author Alessandro
* @version 0.1
* @see tuxerrante.blogspot.com
*/

import java.util.Random;
import java.io.IOException;
import java.util.Arrays;
import java.io.InputStreamReader;
import java.io.BufferedReader;

public class Ordinamento {

final static int dim=1000000;

private static int[] disordina(int [] array){
Random generator = new Random();
for (int i=0; ilength; i++)
array[i]= generator.nextInt(dim);
return array;
}

public static void stampa(int[] array){
/* stampa */
for (int i=0; ilength; i++)
System.out.print(array[i]+" ");
}


public static void main (String args[]) {

int []array= new int [dim];
int scelta=100;
long start = 0, end=0;
BufferedReader in = new BufferedReader ( new InputStreamReader(System.in));

// randomizza array
array = disordina(array);

do {

System.out.println("\n\n");
// scegli algoritmo
System.out.println("\t ORDINAMENTO ARRAY \n Scegli l'algoritmo: \n");
System.out.println(" 0. rigenera array casuale");
System.out.println("\nO(n²)");
System.out.print(" 1. selectionSort \n");
System.out.print(" 2. insertionSort \n");
System.out.print(" 3. BubbleSort \n");
System.out.println("\nO(nlogn) ");
System.out.print(" 4. QuickSort \n");
System.out.print(" 41. QuickSort del JDK (Bentley-McIlroy)\n");
System.out.print(" 42. MergeSort \n");

System.out.println("\nΘ(logn) ");
System.out.println(" 5. HeapSort ");

System.out.println("\n 8. Stampa ");
System.out.println(" 9. Esci ");
System.out.print(" ==> ");

try {
scelta = Integer.parseInt(in.readLine());
}
catch ( IOException e) {
System.err.println(" ERRORE: : "+ e.getMessage());
}

switch (scelta){

case 0 :
array=disordina(array);
break;

case 1:
start = System.currentTimeMillis();
array = AlgOrdinamento.selectionSort(array);
end = System.currentTimeMillis();
break;

case 2:
start = System.currentTimeMillis();
array = AlgOrdinamento.insertionSort(array);
end = System.currentTimeMillis();
break;

case 3:
start = System.currentTimeMillis();
array = AlgOrdinamento.bubbleSort(array);
end = System.currentTimeMillis();
break;
case 4: // QUICKSORT
start = System.currentTimeMillis();
AlgOrdinamento.quickSort(array, 0, array.length-1 );
end = System.currentTimeMillis();
break;

case 41: // QUICKSORT AT&T jdk
start = System.currentTimeMillis();
Arrays.sort(array);
end = System.currentTimeMillis();
break;

case 42: // MERGESORT
start = System.currentTimeMillis();
AlgOrdinamento.mergesort(array,0,array.length-1);
end = System.currentTimeMillis();
break;

case 5: // HEAPSORT
start = System.currentTimeMillis();
AlgOrdinamento.heapSort(array, array.length);
end = System.currentTimeMillis();
break;

case 8:
stampa(array);
break;

case 9: System.exit(0);
default: System.out.println(" Inserisci un valore adeguato. "); break;
}

System.out.println("\n\n\t Tempo esecuzione : "+(end-start)+" ms");
} while( true);

} //--end main


}
// ___________________________________________________________________________________________

class AlgOrdinamento {

/**
* algoritmo SelectionSort(array a)
* for k=0 to n-2 do
* m = k+1
* for j=k+2 to n do
* if ( A[j][m] ) m=j;
* scambia A[m] con A[k]
*
* ordina in loco n elementi eseguendo al più O(n²) confronti
*/

public static int[] selectionSort(int[] a){
int k=0, m=0, j=0, temp;

for ( k=0; k< (a.length-2); k++){
m = k+1;
for (j=k+2; j j++)
if (a[j]< a[m]) m=j;
temp=a[m];
a[m]=a[k];
a[k]=temp;
}
return a;
}

/**
* algoritmo insertionSort( Array A)
* 1) individua la posizione j del più grande elemento minore di x, se esiste
* 2) altrimenti sarà posto a zero per indicare che x andrà posto all'inizio
* 3) j+1 è la posizione dove sarà inserito x
* ordina in loco n elementi eseguendo al più O(n²) confronti
*/
public static int[] insertionSort(int a[]){
int x, k, j, t;
for ( k=0; k k++){
x = a[k+1];
for ( j=k; j>=0; j--) // 1
if (a[j]<=x) break;
if (j)
for ( t=k; t>j+1; t--)
a[t+1]=a[t];
a[j+1]=x;
}

return a;
}

/**
* bubbleSort
* in ogni scansione vengono confrontate coppie di elementi adiacenti
* che vengono scambiate se non ordinate
* se durante una scansione non vengono effettuati scambi, l'alg termina.*
* F = O(n²)
*/
public static int[] bubbleSort(int[] a){
int i,j,temp;
boolean scambi;
for (i=1; ilength
-1; i++){
scambi=false;
for (j=1; jlength
-i+1; j++)
if( a[j-1] > a[j] ){
temp=a[j-1];
a[j-1]=a[j];
a[j]=temp;
scambi=true;
}
if (!scambi) break;
}
return a;
}


/** ___________ QUICKSORT
*
*/
public static void quickSort(int []a,int i,int f){
if (i>=f) return;
int m = partiziona(a,i,f);
quickSort(a,i,m-1); // possibile stackOverflow se già ordinato
quickSort(a,m+1,f);

}
private static int partiziona(int []a,int i,int f){
int x = a[i], inf=i, temp;

while (true){

while ( infwhile ( a[f]>x ) f--;
if ( inf temp=a[inf]; a[inf]=a[f]; a[f]=temp;
}
else break;
}
temp=a[i]; a[i]=a[f]; a[f]=temp; // posiziona pivot al centro
return f;
}

/**
* HEAPIFY
* @param h array da ordinare
* @param index indice di scansione
* @return array ordinato secondo la struttura albero binario
*/
private static void heapify( int[] h,int index, int heapSize){
int sin=2*index+1, des=2*index+2, max=0;

if ( sinh[index]) max=sin;
else max=index;

if ( desh[max]) max=des; // confronto il figlio destro con il padre
// nota che il padre potrebbe essere l'ex sin()

if (index!=max) {
swap(h,index,max);
heapify(h,max, heapSize);
}

}

static void heapSort(int A[], int n)
{
int i, HeapSize = n;

for (i= HeapSize/2; i >= 0; i--)
heapify(A,i,HeapSize);

for (i=n-1 ; i>=1; i--) {
swap( A, i, 0 );
HeapSize--;
heapify(A,0,HeapSize);
}
}

private static void swap (int []h, int x, int y){
int sw=h[x];
h[x]=h[y];
h[y]=sw;
}
/** HEAPSORT
* dato un array genera un albero fittizio nello stesso array (heap binario),
* dove il valore di un nodo è sempre maggiore di quello dei suoi figli.
*/
/* public static void heapSort(int[] a){
heapify(a,0); // crea l'heap dall'array su sé stesso
return;
} */

/**_________ MERGESORT
*
*/
public static void mergesort(int []A, int i, int f){
if (i>=f) return;
int m=(i+f)/2;
mergesort(A,i,m);
mergesort(A,m+1,f);
merge(A,i,m,f);
}

private static void merge(int []A, int i1, int f1, int f2){
int []X= new int[f2-i1+1];
int i=0, i2 = f1+1, left=i1;

while (i1<=f1 && i2<=f2){
if ( A[i1]<=A[i2]){
X[i]=A[i1];
i1++;
}
else {
X[i]=A[i2];
i2++;
}
i++;
}

//se i e' minore di center significa che alcuni elementi
//della prima meta' non sono stati inseriti nel vettore
// copia A[i1, f1] alla fine di X
for (; i1<=f1; i1++, i++)
X[ i ]= A[i1];
// copia A[i2, f2] alla fine di X
for (; i2<=f2; i++, i2++)
X[ i ]= A[i2];

for (int k=left; k<=f2; k++)
A[k]=X[k-left];
}

}

Altri confronti.

Animazioni interattive degli algoritmi.

Java: Calcolo del codice di Hamming

Codice di hamming

Il codice di Hamming è semplicemente un metodo di controllo sulla correttezza nella ricezione di una certa quantità di dati.
In particolare questo algoritmo si propone di inserire in determinate posizioni del dato (quelle corrispondenti alle potenze del due: es. 1=2^0, 2=2^1 ecc) un bit che non fa parte dell’informazione inviata, ma che è inserita dal calcolatore per “controllare” alcune cifre successive.
In particolare si occupa banalmente di indicarne la parità o meno.

non badate a commenti bizzarri o di debug 😉
Se notate errori gravi commentate pure.
Il codice non è robusto.



import java.util.*;
import java.lang.Math;


public class Hamming {
/*
* converto le cifre binarie della posizione in un array di char, poi sommo il bit per ogni posizione
* controllata
*/
public static void main (String []args){

Scanner in = new Scanner (System.in);
System.out.println ("\t Calcolo del codice di hamming \n");
System.out.print("Inserisci il numero di bit di controllo (>=3) : ");
int h = Integer.parseInt(in.nextLine().trim());
int length= (int)Math.pow(2, h) -1 ; // dimensione stringa finale num+controlli
System.out.println(" dimensione stringa finale= "+length);
int controllo[]=new int[h]; // array dei codici di controllo
System.out.print(" Posizione codici di controllo : ");
for (int i=0; i controllo[i]=(int) Math.pow(2,i); // posizione dei cod di controllo
System.out.print ( controllo[i]);
}
// ------- INSERIMENTO INFORMAZIONE
System.out.println ("\n con "+h+" caratteri di controllo puoi inserire un'informazione di "+(length-h)+" bit");
System.out.print(" Inserisci i bit: ");
String info= in.nextLine().trim();
// manca controllo inserimento corretto
char arrayInfo[]= info.toCharArray();
//char arrayInfo[]={'0','1','1','0'};

//System.out.println( "dimensione info "+arrayInfo.length);
/*for (int i=0; i
System.out.print( arrayInfo[i]);
*/

// --------- COSTRUZIONE STRINGA
int j=0, k=0;
char [] hamming= new char[length];

System.out.print( " Posizione bit di controllo (stringa invertita!) : ");
for (int i=0; i// se è la posizione di un codice di controllo inserici X
if ( (k//System.out.print(" posizione "+i+" - controllo["+k+"] = "+(controllo[k]-1+" "));
hamming[i]='X'; // ....hammingCode(i,hamming[])
k++;
}
else{
if (j//System.out.print(" Posizione "+i+" = "+arrayInfo[j]+" ");
hamming[i]= arrayInfo[j];
j++;
}
}
System.out.print (hamming[i]);
}

System.out.println();

// ------------- CALCOLO CODICI DI HAMMING
System.out.print ("\n Stringa finale : ");
for (int i=0; i// per ogni x invoca la funzione
if ( hamming[i]=='X' ) hamming[i]=Integer.toString(hammingCode(i,hamming)).charAt(0);
}
// ------------- STAMPA INVERSA STRINGA
for (int i=hamming.length-1; i>=0 ;i--)
System.out.print (hamming[i]);

}

static String toBinario(int num){
// fino a quoziente 0
//int cifre= (int) (Math.log(num+1) / Math.log(2));
String s="";
while ( num != 0 ){
s =num%2+s;
num = num/2;
}
return s; //.toCharArray();
}

static int hammingCode(int i, char[] c){
int cont=0;
//System.out.println(" indice passato = "+i);
if (i==0) {
for (i+=1; i//System.out.println(" c["+(i+1)+"]="+ c[i]+" i%2="+((i+1)%2));
// somma tutti i bit degli indici dispari
if (( (i+1)%2 ==1 ) && ( c[i]=='1' ))
cont++;
}
}
else { // i=1 -> 2^1 ==> controlla 6,7
for (int k=(i+1); kString binario= toBinario(k);
//System.out.println("binario("+k+") = "+toBinario(k)+"-log2("+(i+1)+")= "+(binario.charAt( binario.length() - (int)(Math.log(i+1)/Math.log(2)))));

if (( binario.charAt( binario.length() - (int)(Math.log(i+1)/Math.log(2)) ) == '1') && (c[k]=='1'))
cont++;
}
}
//System.out.println(" risultato hammingcode "+cont+"%2= "+(cont%2) );
return (cont%2);
}

}

Powered by WordPress & Theme by Anders Norén