Discussione:
console per sapere quanti giorni sono passati dall'inizio dell'anno( lungo)
(troppo vecchio per rispondere)
skrich
2006-01-01 20:44:41 UTC
Permalink
devo realizzare un programma-console che, inserita una data in ingresso
dica quanti giorni sono passati dall'inizio dell'anno.
Riporto il codice per ulteriore chiarezza, ma quello che non mi piace del
programma è il ragionamento.
Premetto che posso usare if-else-cicli-al massimo switch,non array o
metodi più semplici purtroppo.
Allora, inserita una data composta da gg/mm/aaaa faccio il controllo degli
input,così se mi danno una data come mese febbraio e giorni 30 il
programma ripete la domanda,se il mese è un numero superiore al 12 ripete
la domanda. Il controllo degli input l'ho fatto con un do-while.
poi parte il programma.Prima di entrare nel ciclo, dal quale si esce
quando la variabile m (mese) raggiunge lo 0, sottraggo al mese di partenza
1,perchè non so da quanti giorni sia iniziato il mese.A fine programma
quindi sommo i giorni che mi da l'utente in ingresso al totale dei giorni
finali.
Dentro al ciclo metto le if,se il mese è 4-5-7-1 ecc. allora gtot (giorni
totali) sono uguali a gtot+31. Se il mese ha 30 giorni allora gtot=gtot+30
e così via.Il problema inizia con febbraio:faccio due tre if e scopro se
l'anno e bisestile, quando so se è bisestile a febbraio assegno 29g invece
che 28.
Alla fine si esce dal ciclo e si sommano i giorni messi in partenza
dall'utente alla varibile gtot.
Ma se l'utente mette in entrata il 29/2/2005 ad esempio, x il programma il
29/2 è una data possibile,infatti febbraio può avere 29 giorni.Solo che in
realtà il 2005 non ha avuto febbraio con 29 giorni!
ma il programma non se ne accorge perchè togliendo un mese prima di
entrare nel ciclo, calcola che gennaio (febbraio-1) ha 31 giorni,poi esce
dal ciclo e aggiunge a gtot che ora varrà 31 i giorni inseriti in input
dall'utente, cioè 29.Ma febbraio non ha 29 giorni nel 2005, quindi i
giorni passati dall'inizio dell'anno saranno 59 e non 60!
Mettere un if prima del ciclo per verificare se l'utente mette 29 giorni a
febbraio in un anno non bisestile farebbe diventare il programma troppo
lungo.Cosa mi consigliate?
Per chiarezza riporto il codice:
import javax.swing.*;
public class DataInizioAnno{
public static void main (String args[]){
int g,m,a,gmes,gtot=0;
do{
g=Integer.parseInt(JOptionPane.showInputDialog("inserisci il
giorno"));
}while (g>31||g<0);
do{
m=Integer.parseInt(JOptionPane.showInputDialog("inserisci il
mese"));
}while ( (m>12||m<0) || (m==2 & g>29) );
do{
a=Integer.parseInt(JOptionPane.showInputDialog("inserisci
l'anno"));
} while (a<0);
m=m-1;
while (m>0){
if (m==1 & g>29){
m=0;
}
else{
if (m==4||m==6||m==9||m==11) {
gmes=30;
gtot=gmes+gtot;
}//if
else{
if (m==1||m==3||m==5||m==7||m==8||m==10){
gmes=31;
gtot=gmes+gtot;
}
else{
if (a%100==0){
if(a%400==0){
if(m==2){
gmes=29;
gtot=gmes+gtot;
}
}
}
else{
if (a%4==0){
gmes=29;
gtot=gmes+gtot;
}
else{
gmes=28;
gtot=gmes+gtot;
}
}
}//else
}//else
m--;
}//else
}//while
gtot=gtot+g;
JOptionPane.showMessageDialog(null,"i giorni che sono passati
dall'inizio dell'anno sono "+gtot);
}
}

vi consiglio,se avete voglia di guardare il codice, di copiarlo e
incollarlo da qualche parte perchè è illeggibile così(almeno
l'indentazione l'ho fatta corretta)
--
questo articolo e` stato inviato via web dal servizio gratuito
http://www.newsland.it/news segnala gli abusi ad ***@newsland.it
napo
2006-01-01 21:12:46 UTC
Permalink
Oddio...
Ma perchè non inizi ad abituarti a progettare ad oggetti???

La tua applicazione ha come input una data, effettua un'elaborazione e poi
fornisce in output la risposta.
Tanto per cominciare potresti realizzare una classe che si occupa di gestire
l'input, facendo tutti i controlli del caso.
Poi realizzi la classe che effettua il conteggio dei giorni e restituisce il
valore.
Usando le classi Date e Calendar ce la fai.

Ciao
Marco
skrich
2006-01-01 21:23:40 UTC
Permalink
Post by napo
Oddio...
Ma perchè non inizi ad abituarti a progettare ad oggetti???
si,lo so che riportando il codice uno prende spavento,ma non è niente un
programma così,dobbiamo complicare sempre di più il codice java. Ma si, è
quello che dico anch'io, il java è un linguaggio ad oggetti ma sono
costretto a usarlo per fare if e cicli incasinati per niente
Post by napo
La tua applicazione ha come input una data, effettua un'elaborazione e poi
fornisce in output la risposta.
Tanto per cominciare potresti realizzare una classe che si occupa di gestire
l'input, facendo tutti i controlli del caso.
Poi realizzi la classe che effettua il conteggio dei giorni e restituisce il
valore.
Usando le classi Date e Calendar ce la fai.
eh,magari potessi, ma l'esercizio mi obbliga a fare tutto in un solo
programma,facendo una sola classe chiamata Data_Inizio o magari
qualcos'altro di simile.É proprio il caso di dirlo: w la programmazione ad
oggetti.Ma che colpa ne ho se la prof si ostina a farci ragionare su
questi contorti programmi invece di insegnarci che java è diverso, che è
un linguaggio orientato agli oggetti, che in esso vi sono miriadi di
classi, di metodi, che non è un linguaggio come gli altri,si basa su
oggetti...potrei continuare per secoli ma comunque il programma deve
andare con il metodo main,con una sola classe.
perchè complicare per niente?mah,i segreti dei proffe di informatica.....
--
questo articolo e` stato inviato via web dal servizio gratuito
http://www.newsland.it/news segnala gli abusi ad ***@newsland.it
napo
2006-01-01 21:34:35 UTC
Permalink
Post by skrich
si,lo so che riportando il codice uno prende spavento,ma non è niente un
programma così,dobbiamo complicare sempre di più il codice java. Ma si, è
quello che dico anch'io, il java è un linguaggio ad oggetti ma sono
costretto a usarlo per fare if e cicli incasinati per niente
Dovete complicare sempre di più?
Ma peggio di così cosa vuoi fare???
Post by skrich
perchè complicare per niente?mah,i segreti dei proffe di informatica.....
Ma frustare la prof?!... :-)

Ciao
Marco
skrich
2006-01-01 22:15:39 UTC
Permalink
Post by napo
Post by skrich
si,lo so che riportando il codice uno prende spavento,ma non è niente un
programma così,dobbiamo complicare sempre di più il codice java. Ma si, è
quello che dico anch'io, il java è un linguaggio ad oggetti ma sono
costretto a usarlo per fare if e cicli incasinati per niente
Dovete complicare sempre di più?
Ma peggio di così cosa vuoi fare???
non è colpa mia ma sono incazzato anch'io!
Post by napo
Post by skrich
perchè complicare per niente?mah,i segreti dei proffe di informatica.....
Ma frustare la prof?!... :-)
se intendi se frustiamo la proffe...no ma la voglia è tanta
tanta.....progetto omicidi....partecipi????????
Post by napo
Ciao
Marco
ciao!!!!ci vedremo al funerale della proffe....ah,noi sul forum non ci
siamo mai incontrati....cmq il codice l'ho rifatto appena adesso
ascoltanto si può dare di + e pupo.Nella speranza di finire presto le
canzoni ho elaborato un contorto ragionamento.Vuoi provare a compilarlo
senza cercare di capirci qualcosa???

import javax.swing.*;
public class DataInizioAnno{
public static void main (String args []){
int g,m,a,gtot=0,gmes,bis=0;
do{
g=Integer.parseInt(JOptionPane.showInputDialog("inserisci un
giorno"));
} while (g<0 || g>31);
do{
m=Integer.parseInt(JOptionPane.showInputDialog("inserisci un
mese"));
} while (m<0 || m>12);
do{
a=Integer.parseInt(JOptionPane.showInputDialog("inserisci un
anno"));
} while (m<0);

if (a%100==0){
if (a%400==0){
bis=1;
}
}
else{
if (a%4==0){
bis=1;
}
}
if ( (bis==0) && (m==2 & g>28) ){
JOptionPane.showMessageDialog(null,"febbraio non può avere più
di 28 giorni, perchè l'anno non è bisestile");
}
else{
m=m-1;
while (m>0){
if (m==4||m==6||m==9||m==11){
gmes=30;
gtot=gtot+gmes;
}
else{
if (m==1||m==3||m==5||m==7||m==8||m==10){
gmes=31;
gtot=gtot+gmes;
}
else{
if (m==2 & bis==0){
gmes=28;
gtot=gtot+gmes;
}
else{
gmes=29;
gtot=gtot+gmes;
}//else
}
}
m--;
}//while
gtot=gtot+g;
JOptionPane.showMessageDialog(null,"dall'inizio dell'anno sono
passati "+gtot+" giorni");
}//else
}//class
}//main
--
questo articolo e` stato inviato via web dal servizio gratuito
http://www.newsland.it/news segnala gli abusi ad ***@newsland.it
napo
2006-01-01 21:42:27 UTC
Permalink
Vabbè, visto che devi farti del male, diamo un occhio al problema.

Tanto per cominciare spiegami una cosa.
Se devi realizzare un'applicazione-console, perchè diavolo utilizzi un
InputDialog???
Se l'applicazione è a console, l'I/O deve essere a linea di comando.
Se mi dici che anche questo te l'ha detto la prof, allora va radiata
dall'albo degli insegnanti!!! :-)

Non potrai usare altre classi, ma almeno altri metodi sì!!
Inizia a reaizzare dei metodi che ti possano tornare utili.
Ad esempio:
- isLeap(int year), che ti dice se l'anno è bisestile
- getDaysInMonth(int month), che ti restituisce il numero di giorni
contenuti nel mese passato come argomento
- isValidDate(int day, int month, int year), che ti dice se la data è valida

In questo modo ti concentri sul codice di questi metodi e semplifichi
enormemente il flusso principale del programma.

Ciao
Marco
skrich
2006-01-01 22:22:01 UTC
Permalink
Post by napo
Vabbè, visto che devi farti del male, diamo un occhio al problema.
Tanto per cominciare spiegami una cosa.
Se devi realizzare un'applicazione-console, perchè diavolo utilizzi un
InputDialog???
Se l'applicazione è a console, l'I/O deve essere a linea di comando.
Se mi dici che anche questo te l'ha detto la prof, allora va radiata
dall'albo degli insegnanti!!! :-)
no la proffe stavolta nn c'entra. Come si chiamano allora?esercizietti
spacca cervello stupidi-insulsi-cretini-*dg*g*ds*g*sdg*** ì÷?
Post by napo
Non potrai usare altre classi, ma almeno altri metodi sì!!
assolutamente no!
Post by napo
Inizia a reaizzare dei metodi che ti possano tornare utili.
- isLeap(int year), che ti dice se l'anno è bisestile
- getDaysInMonth(int month), che ti restituisce il numero di giorni
contenuti nel mese passato come argomento
- isValidDate(int day, int month, int year), che ti dice se la data è valida
ma ti puoi figurare se quella brava personcina di proffe è così buona che
per rovinare meno il natale ci fa fare esercizi come dici tu...
Post by napo
In questo modo ti concentri sul codice di questi metodi e semplifichi
enormemente il flusso principale del programma.
già,ma cosa serve secondo la proffe semplificare in
informatica?complichiamo complichiamo,che tanto questa è l'idea
dell'informatica!ma si!evviva lo sputtanamento del linguaggio ad oggetti!!
ma che cazzo insegna java quella brava donna se in 5 mesi non sappiamo
minimamente cosa vuol dire oggetti-metodi-classi?qualcosina ho imparato di
java,tra il forum e letture di libri di spontanea volontà,ma più di
questo.....
Post by napo
Ciao
Marco
--
questo articolo e` stato inviato via web dal servizio gratuito
http://www.newsland.it/news segnala gli abusi ad ***@newsland.it
cicap
2006-01-01 22:06:34 UTC
Permalink
Post by skrich
Premetto che posso usare if-else-cicli-al massimo switch,non array o
metodi più semplici purtroppo.
Cicli si e array no eh?
Molto utili i cicli senza la possibilita' di utilizzare array o liste!

Cmq prova a modificare questo codice che mi sembra molto piu' chiaro del
tuo:

public static void main(String args[]) {
int month = 3;
int day = 22;
int year = 2005;

int sum = 0;
int temp = 2;
if(month > 1) {
switch(1) {
case 1: sum += 31;
if(month == temp++) break;
case 2: sum += (year % 4 == 0) && ((year % 100 != 0) || (year % 400 ==
0))? 29 : 28;
if(month == temp++) break;
case 3: sum += 31;
if(month == temp++) break;
case 4: sum += 30;
if(month == temp++) break;
case 5: sum += 31;
if(month == temp++) break;
}
// ......ecc fino a case 12
}
sum += day-1;
System.out.println(sum);
}
skrich
2006-01-01 22:49:27 UTC
Permalink
Post by cicap
Post by skrich
Premetto che posso usare if-else-cicli-al massimo switch,non array o
metodi più semplici purtroppo.
Cicli si e array no eh?
Molto utili i cicli senza la possibilita' di utilizzare array o liste!
o no?ringrazia pure la nostra proffe....
Post by cicap
Cmq prova a modificare questo codice che mi sembra molto piu' chiaro del
public static void main(String args[]) {
int month = 3;
int day = 22;
int year = 2005;
int sum = 0;
int temp = 2;
if(month > 1) {
switch(1) {
case 1: sum += 31;
if(month == temp++) break;
case 2: sum += (year % 4 == 0) && ((year % 100 != 0) || (year % 400 ==
0))? 29 : 28;
if(month == temp++) break;
case 3: sum += 31;
if(month == temp++) break;
case 4: sum += 30;
if(month == temp++) break;
case 5: sum += 31;
if(month == temp++) break;
}
// ......ecc fino a case 12
}
sum += day-1;
System.out.println(sum);
}
grazie!nella mia mente contorta ho elaborato un'altra soluzione....è molto
complicata da capire senza spiegazioni di chi l'ha fatta, e questo se non
sbaglio è assolutamente contro ai principi della programmazione, ma sai,
da oggi nei nuovi corsi ci insegnano così: programmi in java? tralascia
gli oggetti,le classi,i metodi, fai casino con 2 if e un ciclo, non far
capire il ragionamento agli altri,perdici una giornata su un cazzosissimo
problema che lo puoi fare in 3 secondi grazie alla semplicità di java,
spreca cicli macchina,appesandisci tutto il sistema....
ma vaffanc, passa la voglia di studiare informatica!
cmq grazie per il suggerimento
ciao
--
questo articolo e` stato inviato via web dal servizio gratuito
http://www.newsland.it/news segnala gli abusi ad ***@newsland.it
cicap
2006-01-02 00:23:26 UTC
Permalink
Post by skrich
grazie!nella mia mente contorta ho elaborato un'altra soluzione....è molto
complicata da capire senza spiegazioni di chi l'ha fatta, e questo se non
sbaglio è assolutamente contro ai principi della programmazione, ma sai,
da oggi nei nuovi corsi ci insegnano così: programmi in java? tralascia
gli oggetti,le classi,i metodi, fai casino con 2 if e un ciclo, non far
capire il ragionamento agli altri,perdici una giornata su un cazzosissimo
problema che lo puoi fare in 3 secondi grazie alla semplicità di java,
spreca cicli macchina,appesandisci tutto il sistema....
ma vaffanc, passa la voglia di studiare informatica!
cmq grazie per il suggerimento
ciao
Java puo' essere usato anche in maniera procedurale volendo. Basta fare
classi con metodi e campi statici.
Immagino che l'obiettivo del corso non sia insegnare il linguaggio Java ma i
fondamenti di programmazione quindi i costrutti di base, gli algoritmi ecc.
Non condivido il modo in cui si sta cercando di insegnarli, perche' vi sta
inculcando una cattiva programmazione.
Ma questo non per il fatto di vietare l'utilizzo di cio' che riguarda gli
oggetti in Java.
Potresti scrivere un bel codice pulito utilizzando array e funzioni, ma
vietare anche queste e' contro i principi della programmazione, e non vi
servira' a nulla imparare a fare switch come quello che ti ho mostrato io
per esempio.
skrich
2006-01-02 09:05:52 UTC
Permalink
e non vi
Post by cicap
servira' a nulla imparare a fare switch come quello che ti ho mostrato io
per esempio.
oltre a quello hanno un senso questi problemi??Vado a pensare ogni volta
alle soluzioni + lunghe e laboriose, e poi quando ho dei dubbi e posto un
messaggio tutti mi dicono:ma perchè non usi array?perchè non lo dividi in
classi?perchè non usi altre classi?
la risposta è unica x tutte le domande, ho trovato una soluzione per
risolvere una classe di problemi:proffe
--
questo articolo e` stato inviato via web dal servizio gratuito
http://www.newsland.it/news segnala gli abusi ad ***@newsland.it
uL
2006-01-02 14:27:01 UTC
Permalink
Post by skrich
oltre a quello hanno un senso questi problemi??Vado a pensare ogni volta
alle soluzioni + lunghe e laboriose,
Hanno molto senso: secondo te come si fa ad implementare le classi del jdk
(Calendar, per esempio)?

E' un piccolo problema ma didatticamente è più interessante che usare
delle classi già fatte. Inoltre ha due soluzioni tipiche, una con il
giuliano ed una senza (come l'hai impostata tu). Può essere usato come
esempio per capire l'incapsulamento

uL
--
questo articolo e` stato inviato via web dal servizio gratuito
http://www.newsland.it/news segnala gli abusi ad ***@newsland.it
cicap
2006-01-02 14:42:24 UTC
Permalink
Post by uL
Post by skrich
oltre a quello hanno un senso questi problemi??Vado a pensare ogni volta
alle soluzioni + lunghe e laboriose,
Hanno molto senso: secondo te come si fa ad implementare le classi del jdk
(Calendar, per esempio)?
E' un piccolo problema ma didatticamente è più interessante che usare
delle classi già fatte. Inoltre ha due soluzioni tipiche, una con il
giuliano ed una senza (come l'hai impostata tu). Può essere usato come
esempio per capire l'incapsulamento
Non credo che sia affatto interessante dover scrivere codice "espanso"
perche' la docente mi vieta l'utilizzo di strutture dati come ad esempio gli
array.
Inoltre non credo che usare algoritmi particolari sia quello che vuole il
docente...lei voleva solo farli impratichire con i costrutti di base del
linguaggio, ma a mio avviso nella maniera sbagliata.

uL
2006-01-02 11:01:36 UTC
Permalink
Post by skrich
devo realizzare un programma-console che, inserita una data in ingresso
dica quanti giorni sono passati dall'inizio dell'anno.
Riporto il codice per ulteriore chiarezza, ma quello che non mi piace del
programma è il ragionamento.
Premetto che posso usare if-else-cicli-al massimo switch,non array o
metodi più semplici purtroppo.
Basta calcolare il giorno giuliano, anzi una cosa molto più semplice visto
che devi solo calcolare i giorni passati dall'inizio dell'anno. Facendo
così basta fare una differenza per sapere i giorni passati.
Cerca i dettagli dell'algoritmo su internet, e magari semplificalo: sono
tutti banali calcoli matematici...

ciao

uL
--
questo articolo e` stato inviato via web dal servizio gratuito
http://www.newsland.it/news segnala gli abusi ad ***@newsland.it
Loading...