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
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
↑ 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
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
↑ 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
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
↑ 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
↑ 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
↑ 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
↑ 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
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
↑ 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é.
Offline