Archivio del marzo 2010

Programmazione multithread in C nei sistemi Unix

Lo standard POSIX ha introdotto, nel 1995, delle API per la manipolazione dei thread nei sistemi UNIX.

L’header da includere per utilizzare i thread POSIX è pthread.h e la libreria da linkare è pthread.

Continua >

L’algoritmo di ricerca binaria

La ricerca binaria, o dicotomica, è una particolare ricerca, effettuabile su insiemi ordinati, particolarmente efficiente.
Il suo costo computazionale è $latex O(1) $ nel caso ottimo, $latex O(log n) $ nel caso pessimo.

Continua >

Le stringhe in Java

In Java le stringhe sono oggetti e come tali possono essere istanziati.
La classe String possiede diversi costruttori. Le modalità più comuni per istanziare e inizializzare una stringa sono:

String a = new String("ciao");
// oppure
String a = "ciao";

in questo modo viene creato un oggetto stringa e viene assegnato ad un variabile reference, chiamata a.

Continua >

Selection Sort

L’algoritmo Selection Sort è un algoritmo di ordinamento in loco (cioè non necessita di una struttura dati addizionale ausiliaria).
Il suo funzionamento si basa su un ciclo esterno con un indice i che va da 0 a n-2 (dove n-2 è il penultimo elemento).
Si cerca poi l’elemento più piccolo, mediante un ciclo interno, della fetta di array che parte da i+1 e termina in n-1 (l’ultimo elemento).
Al termine del ciclo interno, si scambia l’elemento minimo trovato con quello in posizione i.

Continua >

Generatore di Fibonacci in Python

Il seguente algoritmo utilizza l’istruzione yield per creare un generatore di numeri di Fibonacci:

def fibonacci(n):
    current = 0
    next = 1

    for i in range(n):
        yield current
        current, next = next, next + current

n = 13
for i in fibonacci(n):
    print(i)

Output:

0
1
1
2
3
5
8
13
21
34
55
89
144

Abilitare l’esecuzione di script CGI con Apache

Lo standard CGI è utilizzato dai web server per interfacciarsi con le applicazioni esterne mediante un’interfaccia comune.
Quando viene richiesto al web server uno script CGI, questo lo esegue e restituisce al client il risultato dell’esecuzione.

Continua >

C++ e SQLite: primo esempio

Il seguente esempio mostra, molto velocemente, come utilizzare le principali funzioni delle API di SQLite in C/C++:

#include <iostream>
#include <string>
#include <sqlite3.h>

using namespace std;

void fill(string queries[5])
{
	queries[0] = "DROP TABLE IF EXISTS persone";
	queries[1] = "CREATE TABLE persone (id int, nome text)";
	queries[2] = "INSERT INTO persone (id, nome) values (1, 'antonio')";
	queries[3] = "INSERT INTO persone (id, nome) values (2, 'marco')";
	queries[4] = "SELECT id, nome FROM persone";
}

int main()
{
	sqlite3* conn;
	sqlite3_stmt* result;
	string queries[5];
	fill(queries);

	sqlite3_open("C:/db.sqlite", &conn);

	for(int i = 0; i < 4; i++)
	{
		char* errMsg = new char[1024];
		int retv;
		cout << queries[i] << endl;
		if( (retv = sqlite3_exec(conn, queries[i].c_str(), 0, 0, &errMsg)) !=
			SQLITE_OK)
		{
			cout << errMsg << " - ErrCode: " << retv << endl;
			delete errMsg;
			return -1;
		}

		delete [] errMsg;
	}

	sqlite3_prepare_v2(conn, queries[4].c_str(), queries[4].size(), &result, NULL);

	while(sqlite3_step(result) == SQLITE_ROW)
	{
		cout << sqlite3_column_int(result, 0) << "\t"
			<< sqlite3_column_text(result, 1) << endl;
	}

	sqlite3_finalize(result);
	sqlite3_close(conn);
}

C++: L’operatore typeid e la classe type_info

L’operatore typeid consente di determinare il tipo dell’oggetto a run time (RunTime Type Information).

In generale, un’espressione typeid si presenta nella forma:

typeid(obj)

Il risultato dell’operatore è un riferimento ad un oggetto type_info, presente nell’header typeinfo.

Continua >

C++: le union

Una union è un tipo speciale di classe contenente più membri.
Considerato però un generico istante, solo uno dei membri può avere un valore. Infatti l’assegnamento di un valore ad un membro di un union ha l’effetto di rendere non definiti gli altri membri.

Continua >

Fibonacci iterativo in Java

Implementazione iterativa dell’algoritmo di Fibonacci in Java.
Vengono stampati i primi n numeri, con n passato da console o generato casualmente, della successione:

import java.util.Random;

public class fibo
{
	public static void main(String[] args)
	{
		int n;
		try {
			n = Integer.parseInt(args[0]);
		}
		catch(ArrayIndexOutOfBoundsException e)
		{
			Random generator = new Random();
			n = generator.nextInt(20) + 1;
		}

		int current = 0;
		int next = 1;

		for(int i = 0; i < n; i++)
		{
			System.out.println(current);
			int temp = current;
			current = next;
			next += temp;
		}
	}
}