martedì, gennaio 23, 2007

GoF design patterns

Chi non avesse mai studiato o letto il libro "Design Paterns" della GoF (Gang of Four).. ma anche chi lo conosce a memoria ed è uno "squilibrato patternizzatore" di tutto il codice che scrive.. eccovi un link ad un lavoro di descrizione per esempi dei pattern GoF.. comprensivo di tavola periodica dei design patterns :D

GoF Design Patterns

C++: i paradigmi Object Oriented e Generics Oriented accoppiati

Con il C++ si ha un esempio di linguaggio di programmazione multiparadigma in cui i vari paradigmi inclusi sono in grado di cooperare per generare nuove famiglie di design patterns. In particolare in C++ è possibile sfruttare in maneira furba l'esistenza di OO e dei generics (templates) per ottenere codice flessibile ed ottimizzato per le proprie esigenze.
Al link seguente troverete un pattern curioso.. che per questo ha preso il nome di Curiously Recurring Template Pattern (CRTP).
Un altra serie di pattern a paradigma misto.. li pubblicherò in questo blog a breve.. vi aspetto ;)

lunedì, gennaio 08, 2007

Flatlandia: quesito di dicembre 2006

Questo mese è stato proposto il seguente quesito:

Sono dati due segmenti b e c (b>c).

Disegnare con essi un trapezio rettangolo ABCD di basi AB=b, DC=c e di altezza AD=b+c.

1) Verificare, e poi dimostrare, che la circonferenza di diametro CB incontra il lato AD in due punti che chiameremo P e Q (AP

2) Determinare in funzione di b e c la lunghezza della corda PQ, le distanze di P e Q dai vertici A e D del trapezio e l’area del triangolo BPC.


Il problema sembra molto più complicato di quello che è: infatti se si disegna il trapezio rettangolo.. e se ne disegna un altro ruotato di 180 gradi facendo aderire il lato obliquo, si scopre che il trapezio è in realtà una porzione di un quadrato. Si scopre inoltre che il centro della circonferenza descritta per simmetria è il centro del quadrato. Chiamato X tale punto, essendo il segmento XC (raggio del cerchio) maggiore del semilato del quadrato di lunghezza (b+c)/2, ed essendo minore della semidiagonale di lunghezza sqrt(2)(b+c), devono per forza esserci punti della circonferenza esterni al quadrato e punti interni, ovvero devono esserci due intersezioni con ogni lato del quadrato. Si osservi che l'esistenza delle due intersezioni si può scoprire e dimostrare anche notando che sul lato superiore del quadrato esiste già l'intersezione C, sul lato inferiore esiste l'intersezione B e per simmetria ogni lato deve avere un'intersezione per ognuna delle distanze DB ed AC.


Una ulteriore nota è la seguente: per simmetria la lunghezza dal segmento CD è identica alla lunghezza del segmento DQ; inoltre, sempre per simmetria, si può considerare l'insieme di punti di intersezione della circonferenza con il quadrato come l'insieme dei punti del quadrato di distanza CD=c dai vertici.

Ovviamente il calolo della corda PQ è ora semplice da effettuare:
PQ = AD-AQ-DP = b+c-2c = b-c

Il triangolo BPC infine è rettangolo: infatti per la simmetria della scelta dei punti, BPC si può ottenere dividendo a metà, lungo una diagonale, il quadrato mostrato in figura.


Il lato PB è lungo l=sqrt(c^2+b^2), il triangolo ha quindi area (l^2)/2.

Mie foto pubbliche

Ecco che finalmente ho messo a disposizione alcune delle mie foto artistiche.. giuro che ne aggiungerò ancora una marea :D
http://picasaweb.google.com/ilgabbio