mercoledì 2 dicembre 2009

lunedì 30 novembre 2009

giovedì 19 novembre 2009

Elenco delle tesine degli studenti della VAL, per la progettazione di un database

Gruppi 5ale

Ceccarini & Cavallierini Gare Automoblistiche

Lugani, Anselmi & Bazzucchi Gestione Palestra

Palazzetti & Popescu Gestione Piscina

Biscarini & Gastaldi Band Musicali

Montagnoli & Velatta Banca del Tempo

Marinaci & Caldari Strumenti musicali

Baldassarri & Favilli Gestione riparazione e vendita computer

Biancalana & Dottorini Gestione Museo

Pampanelli & Di Bari Gestione Autosaloni

Huashuaio & Lo Prieno Gestione Motoclub

Perrotta & Papi Gestione noleggio auto&moto


Gruppo Progetto
Ceccarini & Cavallierini Gare Automoblistiche
Lugani, Anselmi & Bazzucchi Gestione Palestra
Palazzetti & Popescu Gestione Piscina
Biscarini & Gastaldi Band Musicali
Montagnoli & Velatta Banca del Tempo
Marinaci & Caldari Strumenti musicali
Baldassarri & Favilli Gestione riparazione computer
Biancalana & Dottorini Gestione Museo
Pampanelli & Di Bari Gestione Autosaloni
Huashuaio & Lo Prieno Gestione Motoclub
Perrotta & Papi Gestione noleggio auto&moto

Esempio di progettazione di un database delle partite di calcio

martedì 13 ottobre 2009

giovedì 1 ottobre 2009

Uso della funzione rand() nel linguaggio C

#include stdio..h /* rimettere le parentesi angolari */
#include stdlib.h /* rimettere le parentesi angolari */
int seed; /*SCEGLI un numero intero per inizializzare il generatore di numeri random.
Il medesimo valore di seed produrrà sempre la medesima sequenza di numeri casuali.
Per ottenere una diversa sequenza scegli un valore di feed diverso.*/

double r; /* numero random nel range [0,1) */

long int M; /* user supplied upper boundary */

double x; /* numero random nel range[0,M) */
int y; /* numero intero random nel range [0,M) */
int z; /* numero intero random nel range [1,M+1) */

main(){
seed=10000;
srand(seed); /*inizializza il generatore di numeri random*/
M=100; /* numero random massimo */
int i;
/* generiamo e stampiamo una sequenza di 20 numeri random decimali e interi da 0 a 1; da 0 a 99, da 0 a 100 */
for (i=0;i<20; i++){
r=((double)rand()/((double)(RAND_MAX)+(double)(1)));
x=(r*M);
y=(int) x;
z=y+1;
printf("random number %3d %5f %5f %5d %5d\n",i,r,x,y,z);
}
}

giovedì 24 settembre 2009

Uso della funzione rand() nel linguaggio C

#include

main ()
{
int segreto, ipotesi;

/* initialize random seed: */
srand ( time(NULL) );

/* genera il numero segreto: */
segreto= rand() % 10 + 1;

do {
printf ("indovina un numero (1 to 10): ");
scanf ("%d",&ipotesi);
if (segreto else if (segreto>ipotesi) puts ("Il numero segreto è più grande");
} while (segreto!=ipotesi);

puts ("congratulazioni!");

}

domenica 7 giugno 2009

domenica 31 maggio 2009

Come costruire un sito web dinamico con un layout a due colonne

Osservazioni sul sito Motoclub

a) Va bene. La questione della prenotazione dell'evento si chiarisce appena facciamo la bozza 
della view con la quale permettiamo all'utente registrato di fare la prenotazione. Come è fatta 
questa pagina ? La cosa più semplice è di avere (dopo che l'utente ha fatto il suo login ) una 
pagina con l'elenco degli eventi non scaduti tra i quali può selezionare quelli nei quali è 
interessato. Naturalmente a monte di tutto questo deve esserci l'inserimento da parte 
dell'amministratore di sistema dei nuovi eventi. Ti consiglio di fare (prima di iniziare la 
codifica) come ha fatto Sfurio, ossia il layout di tutte le pagine ed in particolare di 
comprendere e di esplicitare tutte le opzioni di menù. Fate uno sforzo di visualizzare una bozza 
delle pagine del sito.

b) . Mi sembra importante chiarire fin dall'inizio che ci sono due categorie di visitatori del 
sito motoclub. la categoria di coloro che semplicemente per curiosità navigano nelle sue pagine e 
di quelli invece appassionati, iscritti che possono anche prenotarsi per degli eventi. E' così ?
E' importante pubblicare una pagina semplice descrittiva e testuale con una macroanalisi degli 
obiettivi del sito.

Osservazioni sul sito Musica Strumenti

a) Le pagine che hai pubblicato sono solo una parte di tutte quelle che sono necessarie. Ti faccio un esempio: ricerca musica. L'utente seleziona un genere musicale, poi preme un bottone (da inserire nella pagina) di convalida della scelta e gli deve comparire una pagina non disegnata ancora. Ossia una pagina con una lista di canzoni o album musicali con il prezzo. A questo punto, occorre che il cliente abbia perlomeno la stampa della ricerca effettuata. Potremmo anche permettere una prenotazione di questi album. In questo ultimo caso occorre creare una tabella delle prenotazioni. La stessa cosa vale per la ricerca degli strumenti.

b) Sulla barra di navigazione. Vedo che dopo che hai fatto una scelta scompare dalla barra il comando di quella particolare scelta. Come idea non è sbagliata, ma ci complica la programmazione. Mi sembra più opportuno fare al seguente modo: fare la barra di navigazione completa di tutti i menù. Il menù scelto lo facciamo di un altro colore. Poi occorre un menù per l'amministratore di sistema, per l'inserimento e l'aggiornamento di tutti i dati, della classifica, degli strumenti, degli album. Questo menù deve essere visibile come "amminsitrazione" e naturalmente protetto da password (non è un problema) Intanto inserisci anche questo menù.

c) Terzo commento. La pagina di layout va bene. Nella parte superiore (header) hai la barra di navigazione, puoi mettere anche un logo di e un'immagine di sfondo.
Il corpo (la parte centrale) è fatta di due parti float left e float right. Nella parte floattante sinistra abbiamo sempre la classifica delle canzoni (una view dinamica ) facile a realizzarsi come view partial. E' semplicemente una lista della tabella classifica. La parte destra invece è una parte che include una view sempre diversa a seconda del menù scelto. 
Non hai un footer. Puoi progettare, anzi devi prevedere una parte di pagina al piede, nella quale inserire qualche dato come copyright, nome degli amministratori di sistema etc...etc..

Osservazioni sulla realizzazione del sito di Salvatore

a)  Osservazione (non rilevante ai fini dell'implementazione del progetto ) - Nello schema concettuale occorre indicare le chiavi primarie sottolineate (anche se Rails le chiama tutte id). Quindi mettiamoci un attributo id sottolineato per ogni entità. - Non occorre indicare le chiavi straniere. Le chiavi straniere sono prodotte come sostitutivo al disegno. Conviene fare anche quello che abbiamo chiamato la mappatura (il mapping) ossia l'elenco delle tabelle (con i nomi maiuscoli ) e tra parentesi tonde l'elenco di tutti i campi. In questo schema logico (elenco) è necessario indicare le chiavi straniere, perchè in questo schema non abbiamo più un disegno nel quale graficamente indicare con delle linee i collegamenti tra le tabelle !.

b)  arricchisci il tuo sito anche con qualche pagina statica e con delle pagine per visualizzare i progetti e la loro gestione in modo esteticamente gradevole e funzionale.

c)  Consiglio di scegliere un nome per il sito. Un nome che sia significativo.   Un sito pubblico è a disposizione non solo dei tecnici, ma di tutti i naviganti di Internet. Pertanto bisogna pensare anche a cosa possa servire per il pubblico. Oppure è un sito Intranet: ci sono lavoratori del progetto sparsi per il mondo e con questo sito possono collaborare insieme pur da distanze remote. Inoltre i responsabili e i dirigenti possono monitorare la situazione a distanza. 

martedì 5 maggio 2009

Procedura per realizzare un sito web dinamico

1) stabilire quali sono i dati del sito web

2) fare lo schema concettuale del database

3) progettare il layout delle pagine (bozza del sito)
il logo del sito
la barra di navigazione
i nuovi menu' di navigazione alla luce della gestione dei dati

4) disegnare le pagine web del sito
in particolare decidere quali sono le pagine statiche e
quali sono quelle dinamiche

5) cominciare a scrivere il programma

6) implementare il tutto con rails

Lezione programmazione cellulari

lunedì 27 aprile 2009

Le relazioni tra i modelli in rails

Musica Midi, note musicali

import javax.sound.midi.*;
public class Musica3 {
    int[][] note={{67,2},{64,1},{65,1},{67,2},{64,1},{60,1},{62,1},{60,1},{62,1},{64,1},{60,3}};
    public static void main(String[] args){
        Musica3 mini=new Musica3();
       
        mini.play( );
    }
    public void play( ){
        try{
            Sequencer player=MidiSystem.getSequencer();
            player.open();
            player.setTempoInBPM(20);
           
            Sequence seq=new Sequence(Sequence.PPQ,4);
            Track track=seq.createTrack();
            for (int i=0; i<note.length; i++){
                track.add(makeEvent(144,1,note[i][0],100,i));
                track.add(makeEvent(128,1,note[i][0],100,i+note[i][1]));
                System.out.println(note[i][1]);
            }
           
            player.setSequence(seq);
            player.start();
           
            System.out.println(note[4][0]);
            System.out.println(note[4][1]);
        }
        catch (Exception ex) { ex.printStackTrace();}
    }
    public static MidiEvent makeEvent(int comd, int chan, int nota, int inizio, int fine){
        MidiEvent event=null;
        try {
            ShortMessage a=new ShortMessage();
            a.setMessage(comd,chan,nota,inizio);
            event=new MidiEvent(a,fine);
            }
            catch (Exception e) {e.printStackTrace();}
        return event;
    }
}

Musica Midi

import javax.sound.midi.*;
public class Musica2 {
    public static void main(String[] args){
        Musica2 mini=new Musica2();
       
        mini.play( );
        System.out.println("sono dopo mini");
       
       
    }
    public void play( ){
        try{
            Sequencer player=MidiSystem.getSequencer();
            player.open();
            player.setTempoInBPM(90);
            System.out.println("sono qui");
            Sequence seq=new Sequence(Sequence.PPQ,4);
            Track track=seq.createTrack();
            MidiEvent event=null;
           
            ShortMessage a=new ShortMessage();
            a.setMessage(144,1,60,100);
            MidiEvent noteOn1=new MidiEvent(a,1);
            track.add(noteOn1);
            ShortMessage b=new ShortMessage();
            b.setMessage(128,1,60,100);
            MidiEvent noteOff1=new MidiEvent(b,1);
            track.add(noteOff1);
           
            ShortMessage c=new ShortMessage();
            c.setMessage(144,1,61,100);
            MidiEvent noteOn2=new MidiEvent(c,2);
            track.add(noteOn2);
            ShortMessage d=new ShortMessage();
            d.setMessage(128,1,61,100);
            MidiEvent noteOff2=new MidiEvent(d,2 );
            track.add(noteOff2);
           
            ShortMessage e=new ShortMessage();
            e.setMessage(144,1,62,100);
            MidiEvent noteOn3=new MidiEvent(e,3);
            track.add(noteOn3);
            ShortMessage f=new ShortMessage();
            f.setMessage(128,1,62,100);
            MidiEvent noteOff3=new MidiEvent(f,3 );
            track.add(noteOff3);
           
            ShortMessage g=new ShortMessage();
            g.setMessage(144,1,63,100);
            MidiEvent noteOn4=new MidiEvent(g,4);
            track.add(noteOn4);
            ShortMessage h=new ShortMessage();
            h.setMessage(128,1,63,100);
            MidiEvent noteOff4=new MidiEvent(h,4 );
            track.add(noteOff4);
           
            ShortMessage i=new ShortMessage();
            i.setMessage(144,1,64,100);
            MidiEvent noteOn5=new MidiEvent(i,5);
            track.add(noteOn5);
            ShortMessage l=new ShortMessage();
            l.setMessage(128,1,64,100);
            MidiEvent noteOff5=new MidiEvent(l,6 );
            track.add(noteOff5);
           
            ShortMessage m=new ShortMessage();
            m.setMessage(144,1,63,100);
            MidiEvent noteOn6=new MidiEvent(m,7);
            track.add(noteOn6);
            ShortMessage n=new ShortMessage();
            n.setMessage(128,1,63,100);
            MidiEvent noteOff6=new MidiEvent(n,7 );
            track.add(noteOff6);
           
            ShortMessage o=new ShortMessage();
            o.setMessage(144,1,62,100);
            MidiEvent noteOn7=new MidiEvent(o,8);
            track.add(noteOn7);
            ShortMessage p=new ShortMessage();
            p.setMessage(128,1,62,100);
            MidiEvent noteOff7=new MidiEvent(p,8 );
            track.add(noteOff7);
           
            ShortMessage q=new ShortMessage();
            q.setMessage(144,1,61,100);
            MidiEvent noteOn8=new MidiEvent(q,9);
            track.add(noteOn8);
            ShortMessage r=new ShortMessage();
            r.setMessage(128,1,61,100);
            MidiEvent noteOff8=new MidiEvent(r,9 );
            track.add(noteOff8);
           
            ShortMessage s=new ShortMessage();
            s.setMessage(144,1,62,100);
            MidiEvent noteOn9=new MidiEvent(s,10);
            track.add(noteOn9);
            ShortMessage t=new ShortMessage();
            t.setMessage(128,1,62,100);
            MidiEvent noteOff10=new MidiEvent(t,10 );
            track.add(noteOff10);
           
            ShortMessage u=new ShortMessage();
            u.setMessage(144,1,63,100);
            MidiEvent noteOn11=new MidiEvent(u,11);
            track.add(noteOn11);
            ShortMessage v=new ShortMessage();
            v.setMessage(128,1,63,100);
            MidiEvent noteOff12=new MidiEvent(v,11 );
            track.add(noteOff12);
           
            ShortMessage z=new ShortMessage();
            u.setMessage(144,1,64,100);
            MidiEvent noteOn13=new MidiEvent(z,12);
            track.add(noteOn13);
            ShortMessage z1=new ShortMessage();
            z1.setMessage(128,1,64,100);
            MidiEvent noteOff13=new MidiEvent(z1,12 );
            track.add(noteOff13);
           
            ShortMessage z2=new ShortMessage();
            z2.setMessage(144,1,62,100);
            MidiEvent noteOn14=new MidiEvent(z2,13);
            track.add(noteOn14);
            ShortMessage z3=new ShortMessage();
            z3.setMessage(128,1,62,100);
            MidiEvent noteOff14=new MidiEvent(z3,16 );
            track.add(noteOff14);
           
            player.setSequence(seq);
            player.start();
            System.out.println("sono dopo start");
        }
        catch (Exception ex) { ex.printStackTrace();}
    }
}

venerdì 23 gennaio 2009

Ho trovato l'errore dell'esercizio fatto in classe: retta parallela ad una data passante per il punto cliccato

public void tracciaParallela(){


double m=((double)y2-(double)y1)/((double)x2-(double)x1);

yy1=(int) (m*( xx1- cPoint.x)+ cPoint.y);

yy2=(int) (m*( xx2- cPoint.x)+ cPoint.y);

}
Questa è la soluzione corretta. In cosa differisce da quanto scritto in classe ? Addirittura c'erano due errori ! 1)il coefficiente angolare m veniva uguale a zero! Perchè ? m=(y2-y1)/(x2-x1), essendo le variabili tutte definite di tipo intero, il rapporto tra due grandezze intere viene arrotondato a numero intero e siccome il risultato è un numero decimale inferiore a zero, lo approssima a zero! Questo prima problema si risolve facendo il casting di y1,y2,x1,x2 con (double). Ma non finisce qui. C'è un secondo errore. 2) nel calcolo di yy1 e yy2 l'istruzione scritta in classe era
yy1= (int) m*(xx1-cPoint.x)+cPoint.y;
Il casting (int) agisce solo sul primo fattore m*(xx1-cPoint.c), che diabolicamente è ancora m! per cui me lo azzera nuovamente. Pertanto la soluzione sta nel racchiudere tutta l'espressione al secondo membro tra le parentesi tonde. E ora funziona.

mercoledì 21 gennaio 2009

Esercizi per la classe IVAL liceo tecnico

1) Scrivere un programma java che disegna nel pannello della finestra un segmento di retta passante tra due punti dati. Poi quando cliccate il mouse su di un punto del pannello dovete disegnare la retta passante per quel punto e parallela alla retta data.
2) Scrivere un programma java che disegna nel pannello della finestra un segmento di retta passante tra due punti dati. Poi quando cliccate il mouse su di un punto del pannello dovete disegnare la retta passante per quel punto e perpendicolare alla retta data.

martedì 20 gennaio 2009

martedì 13 gennaio 2009

domenica 11 gennaio 2009