Matematické Fórum

Nevíte-li si rady s jakýmkoliv matematickým problémem, toto místo je pro vás jako dělané.

Nástěnka
22. 8. 2021 (L) Přecházíme zpět na doménu forum.matweb.cz!
04.11.2016 (Jel.) Čtete, prosím, před vložení dotazu, děkuji!
23.10.2013 (Jel.) Zkuste před zadáním dotazu použít některý z online-nástrojů, konzultovat použití můžete v sekci CAS.

Nejste přihlášen(a). Přihlásit

#1 11. 11. 2009 21:43

Kelyk
Příspěvky: 29
Reputace:   
 

Výpočet data java

Pěkně zdravím všechny přítomné a prosím o pomoc.
Mám sestavit program, který načte datum ve formátu ddmmrr a vypočítá, kolik dnů uplynulo od začátku roku. K součtu dnů všech měsíců použít příkaz for, pro zjištění přesného počtu dnů každého měsíce switch. Dále sestavit metodu, která zjistí, zda je rok přestupný či nikoliv.
Ale vůbec nevím jak na to.
Moc prosím o nějaký nástin řešení.
Díky.

Offline

 

#2 11. 11. 2009 22:50

plisna
Místo: Brno
Příspěvky: 1503
Reputace:   
 

Re: Výpočet data java

↑ Kelyk: napr pro datum 12072009: chceme vedet pocet dni uplynulych od 01012009, takze v cyklu pro i = 1 do 6 projdeme vsechny mesice a secteme pocty dni. k tomuto souctu pote pricteme pocet dni v sedmem mesici, tedy 12. tot vse. podle me by nemel byt problem.

Offline

 

#3 11. 11. 2009 22:52

plisna
Místo: Brno
Příspěvky: 1503
Reputace:   
 

Re: Výpočet data java

↑ Kelyk: prestupny rok je takovy, který je dělitelný čtyřmi s výjimkou celých století, která nejsou dělitelná 400.

Offline

 

#4 11. 11. 2009 22:59

Kelyk
Příspěvky: 29
Reputace:   
 

Re: Výpočet data java

↑ plisna:
Rozumím tomu tedy dobře, že do příkazu switch si do jednotlivých case 1-12 zadám počet dní v jednotlivých měsících?, která potom dosazuji do for?

Offline

 

#5 11. 11. 2009 23:24

plisna
Místo: Brno
Příspěvky: 1503
Reputace:   
 

Re: Výpočet data java

↑ Kelyk: ano, tak je to receno v zadani ulohy

Offline

 

#6 15. 11. 2009 18:45

Kelyk
Příspěvky: 29
Reputace:   
 

Re: Výpočet data java

Zdravím všechny přítomné,
můžu ještě poprosit o radu k tomuto zadání? Mořím se s tím už pár dní a nejsem nějak schopna to dokončit, navíc to musím dnes odevzdat.
Mrkněte prosím na ten můj kód, budu vděčná za každou radu. Děkuji.

public class datum1 {
    public static void main(String []args){
        int den = VstupDat.ctiInt();
        int mesic = VstupDat.ctiInt();
        int rok = VstupDat.ctiInt();
        System.out.println ("zadej den ve formatu dd");
        System.out.println ("zadej mesic ve formátu mm");
        System.out.println("zadej rok ve formatu rrrr");
        System.out.println("zadane datum je" + den+mesic+rok);
       
        for (mesic=1;mesic<=12;mesic++);
       
   
   
        int pocetDnu;
        switch (mesic){
        case 1:
        case 3:
        case 5:
        case 7:
        case 8:
        case 10:
        case 12:
            pocetDnu=31;
        break;
        case 4:
        case 6:
        case 9:
        case 11:
            pocetDnu=30;
        case 2:
        if ( ((rok % 4 == 0) && !(rok % 100 == 0))|| (rok % 400 == 0) )   
                    pocetDnu = 29;   
                else 
                    pocetDnu = 28;   
                break;   
            default:   
                }
            }
        }

Offline

 

#7 15. 11. 2009 18:51 — Editoval plisna (15. 11. 2009 18:51)

plisna
Místo: Brno
Příspěvky: 1503
Reputace:   
 

Re: Výpočet data java

↑ Kelyk: vypada to, ze dnesni pulnoc je deadline pro odevzdavani projektu :) a co tvuj kod konkretne dela nebo naopak nedela? respektive - v cem je problem?

Offline

 

#8 15. 11. 2009 18:55

Kelyk
Příspěvky: 29
Reputace:   
 

Re: Výpočet data java

↑ plisna:
Chyba je asi celkově v poskládání, protože to nedělá nic... Sice mi překladač nenašel žádnou chybu, ale prostě to nefunguje. Má představa napřed se zeptá na zadání a potom počítá, ale on zřejmě napřed něco počítá a potom se zeptá na zadání (nejsem si jista, jestli jsem to formulovala srozumitelně :-)

Offline

 

#9 15. 11. 2009 18:58

plisna
Místo: Brno
Příspěvky: 1503
Reputace:   
 

Re: Výpočet data java

↑ Kelyk: uz se na to koukam. tvuj kod je ponekud zmateny, tipuji te na zacatecnika :) brali jste funkce? muzu ji v tvem kodu pouzit? zprehledni se to a zjednodusi.

Offline

 

#10 15. 11. 2009 19:01

Kelyk
Příspěvky: 29
Reputace:   
 

Re: Výpočet data java

↑ plisna:
jj, začátečník jak vyšitý. Funkce? Nejsem si jista, myslíš tím výrazy? Zabrzdili jsem se někde u datového pole....
Ale pokud to pochopím, tak není problém to použít.

Offline

 

#11 15. 11. 2009 19:18

plisna
Místo: Brno
Příspěvky: 1503
Reputace:   
 

Re: Výpočet data java

Code:

public class Main {
    public static void main(String[] args) {
        
        Scanner s = new Scanner(System.in);

        System.out.println("Zadej den ve formátu dd: ");
        int den = s.nextInt();
        System.out.println("Zadej mesíc ve formátu mm: ");
        int mesic = s.nextInt();
        System.out.println("Zadej rok ve formátu rrrr: ");
        int rok = s.nextInt();

        int pocetDniOdZacatkuRoku = den;

        for (int i = 1; i < mesic; i++) {
            pocetDniOdZacatkuRoku += pocetDniVMesici(i, rok);
        }

        System.out.print("Pocet dni od zacatku roku k zadanemu datu je ");
        System.out.println(pocetDniOdZacatkuRoku);

     
   }

   static int pocetDniVMesici(int mesic, int rok) {
       switch (mesic) {
           case 1:
           case 3:
           case 5:
           case 7:
           case 8:
           case 10:
           case 12:
               return 31;
           case 4:
           case 6:
           case 9:
           case 11:
               return 30;
           case 2:

               if ((rok % 4 == 0) || (rok % 4 != 0 && rok % 100 == 0 && rok % 400 != 0))
                   return 29;
               else
                   return 28;
           default:
               return 0;

       }
   }

    

}

Offline

 

#12 15. 11. 2009 19:23

plisna
Místo: Brno
Příspěvky: 1503
Reputace:   
 

Re: Výpočet data java

↑ Kelyk: a jeste komentar: ve tride Main jsou dve "funkce": main() a pocetDniVMesici(mesic, rok). teto funkci se predaji dva parametry, a sice mesic a rok a funkce vraci pocet dni v danem mesici a roce. pak uz tedy staci ve funkci main() funkci pocetDniVMesici vhodne volat - a to nekolikrat v zavislosti na poctu zadanych mesicu. myslim si, ze je zrejme, jak to funguje - pokud ne, tak se ptej.

Offline

 

#13 15. 11. 2009 19:29

plisna
Místo: Brno
Příspěvky: 1503
Reputace:   
 

Re: Výpočet data java

↑ Kelyk: a jeste si nezapomen vymenit nacitani: misto meho s.NextInt() dej VstupDat.ctiInt()

Offline

 

#14 15. 11. 2009 19:56

Kelyk
Příspěvky: 29
Reputace:   
 

Re: Výpočet data java

↑ plisna:
Díky, díky, díky prostuduju to a kdyžtak se ještě optám...
Vlastně teď mě ještě napadá a kam mám umístit možnost opakování výpočtu?

Offline

 

#15 15. 11. 2009 19:59

plisna
Místo: Brno
Příspěvky: 1503
Reputace:   
 

Re: Výpočet data java

↑ Kelyk: k opakovani vypoctu by bylo treba umistit obsah metody main() umistit do nejake smycky - cyklu

Offline

 

#16 15. 11. 2009 20:03

Kelyk
Příspěvky: 29
Reputace:   
 

Re: Výpočet data java

↑ plisna:
cyklus mám zpracovaný takto:
do{
    System.out.print("Chces opakovat vypocet? 1=ano ostatni=ne");
    odpoved=VstupDat.ctiInt();
    }while(odpoved==1);

ale vždycky mi to funguje právě pro všechny čísla jen ne pro tu 1, proto si myslím, že ho vždycky blbě umístím...

Offline

 

#17 15. 11. 2009 20:07

plisna
Místo: Brno
Příspěvky: 1503
Reputace:   
 

Re: Výpočet data java

↑ Kelyk: a jak jsi ten cyklus zakomponovala do sveho kodu?

Offline

 

#18 15. 11. 2009 20:14

Kelyk
Příspěvky: 29
Reputace:   
 

Re: Výpočet data java

↑ plisna:
pod for

Offline

 

#19 15. 11. 2009 20:21

plisna
Místo: Brno
Příspěvky: 1503
Reputace:   
 

Re: Výpočet data java

↑ Kelyk: dej sem cely svuj kod.

Offline

 

#20 15. 11. 2009 20:23

Kelyk
Příspěvky: 29
Reputace:   
 

Re: Výpočet data java

↑ plisna:

public class datumForum {
    public static void main(String[] args) {
       
     

        System.out.println("Zadej den ve formatu dd: ");
        int den = VstupDat.ctiInt();
        System.out.println("Zadej mesic ve formatu mm: ");
        int mesic = VstupDat.ctiInt();
        System.out.println("Zadej rok ve formatu rrrr: ");
        int rok = VstupDat.ctiInt();

        int pocetDniOdZacatkuRoku = den;

        for (int i = 1; i < mesic; i++) {
            pocetDniOdZacatkuRoku += pocetDniVMesici(i, rok);
        }
        do{
    System.out.print("Chces opakovat vypocet? 1=ano ostatni=ne");
    odpoved=VstupDat.ctiInt();
    }while(odpoved==1);

        System.out.print("Pocet dni od zacatku roku k zadanemu datu je ");
        System.out.println(pocetDniOdZacatkuRoku);

     
   }

   static int pocetDniVMesici(int mesic, int rok) {
       switch (mesic) {
           case 1:
           case 3:
           case 5:
           case 7:
           case 8:
           case 10:
           case 12:
               return 31;
           case 4:
           case 6:
           case 9:
           case 11:
               return 30;
           case 2:

               if ((rok % 4 == 0) || (rok % 4 != 0 && rok % 100 == 0 && rok % 400 != 0))
                   return 29;
               else
                   return 28;
           default:
               return 0;

       }
   }

   

}

Offline

 

#21 15. 11. 2009 20:42

plisna
Místo: Brno
Příspěvky: 1503
Reputace:   
 

Re: Výpočet data java

↑ Kelyk: to je ale prece jasne, ze to takto nemuze fungovat. musis schovat kod, ktery se stara o nacteni hodnot, vypocet a nasledne vypsani do toho cyklu do-while. tak, jak to mas napsane, tak cyklus jen prepisuje hodnotu promenne 'odpoved' tak dlouho, dokud uzivatel nezada cislo ruzne od jednicky.

Offline

 

#22 15. 11. 2009 20:55

Kelyk
Příspěvky: 29
Reputace:   
 

Re: Výpočet data java

↑ plisna:
Teď tomu nerozumím.... Myslela jsem, že načtení hodnoty zajistí VstupDat a pokud se zadá 1, tak to prostě přeskočí na začátek cyklu... ale je mi jasné, že to nepřeskočí sama, ale co mi tam tedy chybí?

Offline

 

#23 15. 11. 2009 21:02

plisna
Místo: Brno
Příspěvky: 1503
Reputace:   
 

Re: Výpočet data java

System.out.print("Chces opakovat vypocet? 1=ano ostatni=ne");
    odpoved=VstupDat.ctiInt();
    }while(odpoved==1);

        System.out.print("Pocet dni od zacatku roku k zadanemu datu je ");
        System.out.println(pocetDniOdZacatkuRoku);

     
   }

jak myslis, ze tvuj program pochopi, ze se ma znovu zeptat na zadani a zopakovat vypocet? tak, jak to mas napsane, se program zepta, jestli chce uzivatel zopakovat vypocet a pak jen vypise reseni k puvodnimu zadani. musis do toho cyklu strcit i ten samotny vypocet.

Offline

 

#24 15. 11. 2009 21:19

Kondr
Veterán
Místo: Linz, Österreich
Příspěvky: 4246
Škola: FI MU 2013
Pozice: Vývojář, JKU
Reputace:   38 
 

Re: Výpočet data java

↑ Kelyk:Výraz  if ((rok % 4 == 0) || (rok % 4 != 0 && rok % 100 == 0 && rok % 400 != 0)) je chybný.  Toto je pravda právě když je rok dělitelný 4. Správných řešení je spousta, tak zkus vybrat nějaké, které ti připadá logické.


BRKOS - matematický korespondenční seminář pro střední školy

Offline

 

#25 15. 11. 2009 21:29

Kelyk
Příspěvky: 29
Reputace:   
 

Re: Výpočet data java

↑ Kondr:

aha... ale moje původní podmínka if ( ((rok % 4 == 0) && !(rok % 100 == 0))|| (rok % 400 == 0) ) myslím vyhovuje všem možnostem

Offline

 

Zápatí

Powered by PunBB
© Copyright 2002–2005 Rickard Andersson