.dsy:it.
Show 150 posts per page

.dsy:it. (http://www.dsy.it/forum/)
- Fondamenti di architettura e programmazione (http://www.dsy.it/forum/forumdisplay.php?forumid=234)
-- Compitino Laboratorio martedì 25 novembre[Capra] (http://www.dsy.it/forum/showthread.php?threadid=37030)


Posted by Andrewz on 25-11-2008 17:33:

Compitino Laboratorio martedì 25 novembre[Capra]

Vi descrivo le richieste dell'esercitazione di oggi.


1) Il contesto era una fantomatica Lotteria per cui i vincitori erano coloro i quali avevano la data di nascita uguale a una certa data estratta. La richiesta era:
Costruire nella classe Lotteria con:
-un metodo statico

public static Data estraiData();

che estragga una data a caso tra l'anno 1920 e il 2007 tenendo conto però del fatto che esistono gli anni bisestili (un anno è bisestile se è divisibile per 4), perciò non devono uscire date come 29 febbraio se l'anno non è bisestile o come 31 settembre ,31 novembre.
- un metodo main che estragga n date con n deciso dall'utente e le visualizzi.

2)Costruire una classe di libreria Appuntamento i cui oggetti sono appuntamenti caratterizzati da una Data, un Orario e una Stringa contenente una nota.

Il prof forniva una collezione di prototipi di metodi da sviluppare (i piu comuni come getData(),setOrario() etc...) inoltre chiedeva un metodo compareTo() e un metodo statico parse() che data una stringa costruisse un Appuntamento.

3)Costruire un'applicazione che calcoli la lunghezza media delle parole contenute in un file di testo

4)Costruire un metodo toString in una classe ArrayChar che dato un array di caratteri restituisca la stringa formata dall'accostamento di tutti i caratteri presenti nell'array.

(so che c'era l'altro thread aperto, così metto in rilievo il testo e se ne può parlare! come vi è andato? :) )


Posted by ViPah on 25-11-2008 18:04:

Era particolarmente ostico il parse, per il resto era fattibile...


Posted by Fedilla on 25-11-2008 18:19:

oh! grazie Andrewz di aver messo su cosa vi ha chiesto!
perchè almeno ho un'idea più concreta! :D

p.s. alors avete potuto consultare gli appunti?


Posted by Andrewz on 25-11-2008 18:20:

Era abbastanza difficile ma alla fine l'ho svolto tutto... Il mio consiglio a coloro che si devono esercitare per giovedì è: cercate di fare gli esercizi che non avete fatto in classe e guardare le soluzioni solo se proprio non riuscite a farli.

Dico ciò perchè non mi è sembrato che il prof fosse molto incline ad aiutarci nella stesura del codice...cioè se si avevano dubbi sulla comprensione del testo era prontissimo a spiegare meglio l'esercizio però non dava molti consigli su come completare il codice...
Perciò purtroppo dovete cercare di essere il più possibile autonomi nello svolgere gli esercizi perchè è difficile che il prof vi dia una grossa mano!


Posted by ViPah on 25-11-2008 18:43:

Esatto, piu che altro impratichirsi e imparare gli errori piu frequenti e sapere come risolverli....quante bestemmie per una cazzo di graffa dimenticata in 5 if uno dietro l'altro...


Posted by Emily89 on 25-11-2008 19:09:

Figo, questa sera stessa cercherò di farli grazie mille!


Posted by Emily89 on 25-11-2008 21:30:

Ragazzi ma io nel primo non so neanche da dove devo cominciare! La vedo dura giovedì :(


Posted by Giutu on 25-11-2008 22:01:

uhm...

public class Blablabla .... look:

__________________
Emily89: Hai la faccia da fiera del fumetto!
I miei pargoli: Farshee, Hirugashi, Noren


Posted by ViPah on 25-11-2008 22:20:

emily per aiutarti fallo prima su carta, cioè pensa al ragionamento che fai nella tua testa e scrivilo.


math.random() restituisce un numero tra 0 e 1. Quindi moltiplicalo per 2008 e ti uscira un numero tra 0 e 2007.

metti questo in un do while o un for e fallo uscire dal ciclo solo quando l'anno riportato sarà tra 1920 e 2007.

Parti da questo!


Posted by Emily89 on 25-11-2008 23:13:

Mi sono messa d'impegno e penso di essere vicina alla soluzione del primo, solo che non capisco come si possa usare il metodo isInAnnoBisestile() se la data è ancora da costruire... mha, mi sa che ho fatto un macello.. se fossi stata al turno di oggi mi sarei disperata, beati voi che dite che era fattibile..


Posted by ViPah on 26-11-2008 08:40:

Emily ma cazzo :D

if anno%4=0 && mese=2
//anno bisestile, quindi se il mese estratto è 2, febbraio avrà 29 giorni
giorno= math.random()*29 //o trenta, vedila come vuoi...


Posted by Emily89 on 26-11-2008 08:46:

Siii ci sono arrivata ieri notte a letto alla soluzione, mi succede sempre così XD Ma voi avete già avuto esperienza in programmazione? Perchè io nella mia vita passata zero... Provengo da un Liceo Sientifico!


Posted by ViPah on 26-11-2008 09:25:

qualcosina con visualbasic, quindi praticamente da zero, visto che è un linguaggio che non c'entra una beata minchia :D


Posted by Emily89 on 26-11-2008 09:56:

Bè, almeno sei già nelle mentalità giusta.. la mia testa invece, con tutte le materie letterarie che abbiamo fatto, è ancora tra le nuvole!!


Posted by lik2006 on 26-11-2008 10:45:

io mi trovo peggio in mate
cmq scusate se scrivo qui ma come funziona il test di inglese?
ho aperto un thread in "lingua inglese" e nex ha risposto..
http://www.ccdinf.unimi.it/it/avvisi/6113.html


Posted by magicorla on 26-11-2008 12:12:

Originally posted by ViPah
emily per aiutarti fallo prima su carta, cioè pensa al ragionamento che fai nella tua testa e scrivilo.


math.random() restituisce un numero tra 0 e 1. Quindi moltiplicalo per 2008 e ti uscira un numero tra 0 e 2007.

metti questo in un do while o un for e fallo uscire dal ciclo solo quando l'anno riportato sarà tra 1920 e 2007.

Parti da questo!


ancora meglio:

classe random, crei un oggetto
next.int(88) ti restituisce un numero fra 0 e 87, ci sommi 1920 e il gioco è fatto

o con math.random moltiplichi per 87 (mi sembra) e sommi ancora 1920


Posted by pirata1 on 26-11-2008 16:22:

Grazie mille, ho provato a farli... All'inizio bisogna pensarci un po, ma nn son difficilissimi.
Un consiglio per il primo es. della data da estrarre:
int x = (int)((Math.random()*(2008-1920))+1920);

In questo modo, prendo il range da 1920 a 2007.
Grazie per aver messo il testo della prova :D


Posted by ViPah on 26-11-2008 17:51:

personalmente, mi sembra molto piu intuitivo moltiplicarlo per 2008 e fare un while...


Posted by Andrewz on 26-11-2008 20:39:

..peccato che con il while come dici tu è possibile (una probabilità remota) che non estragga mai una data nel range richiesto...inoltre il computer fatica in modo notevolmente maggiore in quanto deve attuare un ciclo fino a che non esce una data compresa nell'intervallo dovuto, cosa facilmente aggirabile con la linea di codice suggerita dagli altri.

Mi accodo ai sostenitori del (int)(Math.random()*88)+1920; :)


Posted by pirata1 on 26-11-2008 21:06:

Originally posted by Andrewz
..peccato che con il while come dici tu è possibile (una probabilità remota) che non estragga mai una data nel range richiesto...inoltre il computer fatica in modo notevolmente maggiore in quanto deve attuare un ciclo fino a che non esce una data compresa nell'intervallo dovuto, cosa facilmente aggirabile con la linea di codice suggerita dagli altri.

Mi accodo ai sostenitori del (int)(Math.random()*88)+1920; :)

Hmm bo, nn ho ben capito :D
Pero vabbe mi sembrano simili, cmq lo provero :)


Posted by ViPah on 26-11-2008 21:28:

perchè secondo te il pc fa fatica a moltiplicare 2008 * 0<x<1? farà un milione di calcoli al secondo se ha un processore lento -.-''


Posted by Andrewz on 26-11-2008 21:53:

è diverso: se tu metti un ciclo while che ti calcola

int anno;
while (anno<1920){

anno=(Math.random()*2008);
}

il programma calcola n volte l'istruzione finchè non esce un numero compreso nell'intervallo che vuoi (in questo caso 1920-2007).Perciò il computer svolge l'istruzione n volte prima di trovare il numero che tu cerchi, contro la unica volta necessaria se si utilizza l'istruzione :
(Math.random()*88)+1920;.

Sono d'accordo che i computer di oggi sono molto veloci e di questo problema se ne possono fregare alla grande, però da un punto di vista di efficienza del codice è innegabile che eseguire una istruzione una volta è assolutamente più auspicabile che eseguirla almeno una volta.

Per concludere:le due soluzioni funzionano entrambe e a questi livelli di programmazione sono esattamente equivalenti, ma nel caso di un programma molto più complicato in cui il computer deve eseguire grandissime quantità di istruzioni non avrebbe tanto senso utilizzare la ripetizione di un gruppo di istruzioni per risolvere un problema per il quale ne occorrerebbe in realtà una sola !




Posted by ViPah on 27-11-2008 09:55:

Son d'accordo con te, ma il problema si sarebbe posto nel caso di calcoli abnormi, il primo milione di numeri primi o cose del genere...


Posted by Andrewz on 27-11-2008 10:01:

ok siamo d'accordo però siamo d'accordo anche che più un codice è efficiente maggiore è la sua qualità :)


Posted by magicorla on 27-11-2008 11:14:

Originally posted by ViPah
Son d'accordo con te, ma il problema si sarebbe posto nel caso di calcoli abnormi, il primo milione di numeri primi o cose del genere...


guarda, ci hanno fatto capire piu volte anche a lezione che la cosa da fare è trovare l'algoritmo piu efficente possibile... (esempio dell'algoritmo di euclide per l'MCD mi pare)..


il tuo metodo si può paragonare a fare pari e dispari con un dado a 20 facce aspettando che esca 1 per il dispari, e 2 per il pari..scartando gli altri risultati... non è meglio interpretare anche gli altri? (appunto pari e dispari) :-D

in linea strettamente teorica fra l'altro l'algoritmo col while potrebbe anche non avere soluzione, o averla dopo qualche minuto....è vero che è statisticamente impossibile, ma non è da escludere... piu che altro perchè per analogia rischi di portarti un errore simile in programmi piu avanzati dove questo problema può saltare fuori


ti faccio un esempio, metti di voler applicare questo programma "lotteria" ad un asilo, quindi con bambini nati fra il 2002 e il 2004.
per il tuo ciclo WHILE ci sono solamente 3 soluzioni su 2004 possibilità. Non mi intendo di statistica, però se dovessimo estrare 10 bambini si rischia nell'ordine delle 8mila operazioni..o sbaglio?


Posted by ViPah on 27-11-2008 11:23:

Non può avere soluzione è una cagata, è un ipotesi remotissima che non si verificherà quasi mai. Al test del programma, appena schiacciavo "invio" andava, anche con 100 date mi restituiva subito l'output. Sull'efficienza del programma ok, ma con un codice e un problema di questa entità, le due soluzioni sono equivalenti...Tantè che alla fine ho usato anche io la tecnica del 88 che rendeva il codice piu leggibile, visto che mi era rimasto un poco di tempo


Posted by Andrewz on 27-11-2008 11:28:

ahahah dai questa discussione sta durando da tanto e direi che va bene così, alla fine siamo un po tutti d'accordo vedo...

Piuttosto..chissà com'era il compitino di oggi!


Posted by ViPah on 27-11-2008 11:29:

hihihi, stasera sentiremo le bestemmie :D


Posted by magicorla on 27-11-2008 11:37:

Originally posted by ViPah
Non può avere soluzione è una cagata, è un ipotesi remotissima che non si verificherà quasi mai. Al test del programma, appena schiacciavo "invio" andava, anche con 100 date mi restituiva subito l'output. Sull'efficienza del programma ok, ma con un codice e un problema di questa entità, le due soluzioni sono equivalenti...Tantè che alla fine ho usato anche io la tecnica del 88 che rendeva il codice piu leggibile, visto che mi era rimasto un poco di tempo


ti ho scritto anche io che è STASTICAMENTE impossibile...non c'è bisogno di scrivere che è una cagata...dato che era un esempio tecnico

comunque so anche io che il tuo metodo è efficente, ma si sta ragionando su un fatto di "logica" e penso che piu avanti ci servirà molto rendersi conto al volo che fra i 2 la cosa migliore da fare sia estrarre un numero con l'88... perchè magari il tuo metodo oltre che essere efficente è piu leggibile per noi novizi (se lo leggo lo capisco al volo, mentre l'altro ci metterei un po di piu),però logicamente non è la cosa migliore da fare...

comunque dato che siamo tutti daccordo penso che possiamo anche finirla qui,senza stare a discutere troppo su una cosa che abbiamo capito entrambi! :-D


Posted by lik2006 on 27-11-2008 16:19:

qualcuno sa qualcosa del test di inglese?

http://www.ccdinf.unimi.it/it/avvisi/6113.html


Posted by Giutu on 28-11-2008 06:59:

si sa che ci si iscrive e non c'è il corso prima

__________________
Emily89: Hai la faccia da fiera del fumetto!
I miei pargoli: Farshee, Hirugashi, Noren


Posted by lik2006 on 28-11-2008 10:26:

ma nn si sa su cos'è?


Posted by ViPah on 15-12-2008 18:02:

stasera quel gran figo di capra mette fuori i voti! (cosi ha detto...)


All times are GMT. The time now is 23:31.
Show all 33 posts from this thread on one page

Powered by: vBulletin Version 2.3.1
Copyright © Jelsoft Enterprises Limited 2000 - 2002.