Regole e Gruppi
Gli elaborati possono essere svolti singolarmente o in gruppi di 2
persone. In via eccezionale, potranno essere concordati con il
docente anche eventuali gruppi di 3 persone (sarà richiesta
un'integrazione rispetto a quanto specificato in questa pagina).
Si consiglia di lavorare in gruppi di due persone.
E' previsto che lo stesso gruppo lavori sia sul progetto in
C che su quello in PHP.
L'esame si svolgerà in ogni caso singolarmente.
La creazione di un gruppo (anche composto da una persona)
va comunicata a sassi@dti.unimi.it
(SOLO una mail per gruppo).
Si prega di includere nella mail:
Nome, Cognome e Matricola di ciascuno
dei partecipanti. Inoltre indicare quale elaborato, sia C che PHP,
intendete svolgere.
Comunicazioni riguardanti le consegne e l'esame avverranno anche
mediante posta elettronica e pubblicazione di avvisi sulla pagina
comunicazioni.html.
Tracce elaborati C
CONSIDERAZIONI GENERALI
- Indentate il codice! Sarà molto più semplice trovare eventuali errori
- Programmate in modo strutturato usando il numero appropriato di funzioni.
- Date nomi sensati alle variabili.
Commentare bene il codice. Soprattutto nel caso di
funzioni e procedure, indicare sempre nei commenti cosa significano i parametri passati in
ingresso e cosa viene restituito in uscita.
- Quando vi trovate di fronte ad un problema,
partite sempre dalla situazione più semplice e, una volta funzionante, complicate
man mano il programma.
- Verificare attentamente che il programma faccia quello che vi aspettate!
Programma Gestione Volontari
Sviluppare per una associazione di volontariato un programma che
permetta di gestire l'archivio dei volontari. L'associazione si
occupa di presidiare quotidianamente una piccola riserva naturale.
I volontari ricevono i visitatori e li accompagnano nella vista
dell'erbario; i turni giornalieri sono due,
mattina e pomeriggio.
Per ogni volontario l'associazione vuole avere a disposizione:
- nome, cognome, data di nascita e codice fiscale (per stipulare la
polizza assicurativa);
- numero di telefono;
- scadenza della polizza assicurativa;
- turni (massimo due settimanali) per cui il volontario si rende
disponibile (esempio VeMat per venerdi mattina o MePom per mercoledi
pomeriggio);
- il codice identificativo del volontario
(non deve essere generato dal programma ma inserito).
Il programma deve permettere:
- l'inserimento di un nuovo volontario (i volontari non vengono
mai cancellati; se non prestano più servizio hanno semplicemente
i campi disponibilità vuoti);
- la ricerca della scheda di un volontario per Nome o per
Cognome (il programma deve visualizzare Nome, Cognome e codice
di ogni volontario che corrisponde alla ricerca);
- la modifica dei dati di un volontario esistente (identificato
per codice identificativo)
- salvataggio dell'archivio dei volontari in un file su disco
(all'avvio il programma carica automaticamente l'archivio in
memoria);
- Creare un file HTML con una tabelle contenente l'elenco
dei volontari la cui polizza assicurativa è in scadenza nel
mese corrente (Nome, Cognome, data di nascita, CF e data di scadenza
della polizza);
- Creare un file HTML con l'elenco dei volontari disponibili
per ogni turno settimanale (Lunedi Mattina: ... Lunedi Pomeriggio: ...)
- Creare un file HTML con una tabella contenente l'intero
elenco dei volontari.
Prevedere un numero massimo di volontari (NMAXVOL) configurabile tramite
una direttiva #define. L'associazione suppone che 100 sia un numero
ragionevole per il momento.
Forza 4
Forza 4 è un gioco in cui due giocatori infilano a turno pedine colorate in
una scacchiera verticale di 7 colonne per 6 righe:
/---------------------------\
6| | | | | | | |
|---|---|---|---|---|---|---|
5| | | | | | | |
|---|---|---|---|---|---|---|
4| | | | | # | | |
|---|---|---|---|---|---|---|
3| | | | # | o | | |
|---|---|---|---|---|---|---|
2| | | # | # | o | | |
|---|---|---|---|---|---|---|
1| | # | o | # | o | o | |
\---------------------------/
A B C D E F G
Ciascun giocatore ha a disposizione 21 pedine e vince il giocatore che per
primo ne riesce ad allineare 4 (in orizzontale, verticale o nella direzione diagonale).
Le pedine vengono infilate dall'alto e cadono nella prima posizione libera.
L'elaborato consiste nel preparare un programma in C
che permetta di giocare a forza 4 contro il computer (sembra difficile ma non lo è).
Il programma deve iniziare chiedendo all'utente se vuole iniziare per primo.
L'utente specifica la mossa indicando la colonna in cui vuole lasciare
cadere la pedina (il programma calcolerà la riga opportuna).
Dopo ogni mossa dell'utente il programma stampa la scacchiera,
quindi decide la mossa del computer e ristampa la saccchiera con
aggiunta la nuova pedina. La mossa del
computer (la colonna) viene indicata sotto la scacchiera.
La logica secondo la quale il computer sceglie la mossa è la parte
centrale del programma. Per quanto riguarda l'elaborato
le regole da implementare sono:
- quando il computer apre la partita, sceglie la colonna centrale (d)
con probabilità 0.5;
- il programma deve evitare, per quanto possibile, che l'avversario allinei
4 pedine (strategia di difesa);
- preferisce le colonne centrali a quelle laterali (strategia posizionale)
- prima di fare una mossa, prende in considerazione
tutte le possibili mosse dell'avversario e decide di conseguenza (strategia d'attacco
a 2 livelli).
Una schermata tipo deve essere simile a:
Pedine nella scacchiera: 5
'o'=umano; '#'=computer
/---------------------------\
6| | | | | | | |
|---|---|---|---|---|---|---|
5| | | | | | | |
|---|---|---|---|---|---|---|
4| | | | | | | |
|---|---|---|---|---|---|---|
3| | | | | | | |
|---|---|---|---|---|---|---|
2| | | | o | | | |
|---|---|---|---|---|---|---|
1| | # | # | # | o | | |
\---------------------------/
A B C D E F G
Ho messo la mia pedina nella colonna B
Umano, in quale colonna muovi? _
Dopo ogni mossa il programma deve verificare se uno dei due contendenti ha vinto
(ci sono nella scacchiera 4 pedine allineate),
nel qual caso lo indica sotto la scacchiera. Può accadere che i due contendenti
arrivino ad una patta (la scacchiera è piena e nessuno ha vinto); anche questa
eventualità va evidenziata sotto la scacchiera.
Oltre alle regole indicate potete implemetare quelle che
ritenete opportune (contribuirà solo per il 30 e Lode).
NOTA IMPORTANTE (aggiunta il 4 Giugno 2004)
La regola numero
4 implica che il programma verifichi ogni possibile mossa umana a fronte
di una qualsiasi mossa del camputer. Cioè esplori tutte le combinazioni
(che sono al più 49) "mossa computer" + "mossa umano".
Al termine di ogni coppia di mosse il computer avrà allineato num'#' pedine,
mentre l'umano num'o'.
Per il computer, una possibile strategia
è quella di scegliere la mossa che, rispettando le altre
regole, massimizzi la differenza num'#'-num'o'.
Tracce elaborati PHP
ATTENZIONE: ai fini della valutazione
verranno considerate la semplicità e la chiarezza del codice
sviluppato per risolvere il problema.
Parzioni di codice che implementino inutili complicazioni tolgono
punti. Al contrario, eventuali integrazioni
a quanto richiesto, quando concordate con il docente saranno
valutate positivamente.
Vendita di quadri online
Un giovane pittore, stanco della poca attenzione delle gallerie d'arte,
decide di provare a raggiungere i potenziali clienti attraverso
un sito internet.
Sviluppare in PHP il sito del pittore:
- creare un database che contenga i quadri del pittore; ogni record
deve contenere:
- codice del quadro;
- titolo del quadro;
- nome del file con l'immagine;
- soggetto (natura morta, futurista, paesaggio, ...);
- dimensioni;
- prezzo;
- anno di creazione;
- tipo di quadro (olio sul pannello, tela, acquerello, ...);
- ...
- la parte di consultazione è costituita da 3 file. I file
benvenuti.php e mostraquadro.php impostano un
cookie con il valore "ultimoquadrovisto"
contenente il codice dell'ultimo quadro visualizzato dall'utente
(durata del cookie un mese). In particolare:
- benvenuti.php: pagina di apertura con i dati personali
del pittore (inventateli pure o scegliete qualche pittore contemporaneo
o meno che vi piace).
Se è presente il cookie "ultimoquadrovisto",
l'immagine di apertura corrisponde all'ultimo quadro visto dall'utente
nella visita precedente; altrimenti
l'immagine in apertura viene scelta a caso tra i quadri presenti nel
database (nel database è memorizzato il nome del file che deve essere
presente in una sottocartella chiamata "foto_quadri"). In questo caso,
viene settato ex novo il cookie.
La pagina contiene un form in cui l'utente può inserire il codice
di un quadro da visualizzare (viene passato allo script mostraquadro.php)
e un link alla pagina di ricerca avanzata
cercaquadro.php.
-
mostraquadro.php: dato il codice di un quadro, ne preleva i dati
dal database e lo visualizza. Prevede un link alla pagina iniziale
benvenuti.php. Inoltre prevede un breve testo che permetta di contattare
il pittore (del tipo "per l'acquisto è possibile contattare direttamente il pittore
a questo indirizzo email ..."). Imposta il cookie in modo corrispondente.
-
cercaquadro.php: se non riceve in ingresso alcun valore
propone un form in cui l'utente può cercare un quadro per fascia
di prezzo o per soggetto (default per soggetto). Dati i valori della
richiesta, interroga il database e visualizza i risultati in una tabella
dove il codice di ciascun quadro è un link a mostraquadro.php
che permette di visualizzare il quadro corrispondente.
- la parte di inserimento è costituita dal file
inserisciquadro.php accessibile solo in modalità https
dove il giovane pittore può inserire nel database le informazioni
riguardanti i nuovi quadri. Permette l'upload del file immagine
del quadro che viene salvato nella cartella "foto_quadri".
Per accedere al form il pittore deve inserire username e password.
Sito del gruppo "Unione Escorsionistica Locale"
L'Unione Escorsionistica Locale (UEL) è costituita da un gruppo
di appassionati di montagna che ama passare i finesettimana in
escursioni poco impegnative sulle prealpi e sull'appennino emiliano.
Quest'anno, il gruppo ha fatto la scelta di controllare lo stato dei sentieri
e della segnaletica di una particolare zona montana. Avendo poco
tempo per incontrarsi hanno deciso di comunicare i progressi fatti
e coordinare le uscite attraverso un sito internet.
Scopo dell'elaborato è quello di sviluppare il sito dell'UEL. Il sito
deve essere accessibile a chiunque ma l'inserimento deve avvenire
solo su socket criptato e a seguito di identificazione dell'utente.
- Creare il database delle password contenente per ogni socio
- nomecognome: nome e cognome
- codicesocio: codice del socio
- username
- password: codice md5 della password
- Creare il database delle uscite contenente:
- codice dell'uscita
- Data
- Località
- elencopartecipanti: Elenco dei Partecipanti
- Descrizione
- codicesocio: codice del socio che ha inserito i dati
- file uel.php: pagina principale, accessibile a tutti.
Visualizza tutte
le uscite effettuate nel mese precedente e quelle
che si effettueranno
nel mese successivo a partire da momento della consultazione.
La data di ciascuna uscita è un link alla pagina modificauscita.php
che permette di modificare i dati delle uscite (sia passate, per completarne
i campi, che future).
La pagina contiene un link alla pagina di ricerca cercauscite.php e
un secondo link alla pagina inserisciuscita.php
- file inserisciuscita.php: accessibile solo su socket criptato
dopo identificazione del socio. Permette di inserire i dati di
una nuova uscita. Memorizza nel campo codicesocio il codice del
socio che per primo ha inserito l'uscita (non ulteriori modifiche).
- file modificauscita.php: accessibile solo su socket criptato
dopo identificazione del socio. Permette di modificare i dati
relativi ad una uscita. L'uscita da modifica è identificata dal codice
dell'uscita.
- file cercauscite.php: pagina di ricerca.
Permette a chiunque di cercare le
uscite per intervallo di data (effettuate da DATA1 a DATA2) o per località.
Permette inoltre la ricerca di una o più parole nel campo descrizione.
Il risultato della ricerca è mostrato in forma simile a quanto appare nella
pagina principale e, anche in questo caso, la data
di ciascuna uscita è un link alla pagina modificauscita.php.
- fle inseriscisocio.php: permette all'amministratore del gruppo
di inserire i dati relativi a nuovi soci nel database dei soci.
Informazioni sul sito