program konsolowy do sprawdzenia ile miesiąc ma dni - nie działa prawidłowo

0

Witam w moim programie chciałbym, żeby poprawnie się wyświetlało ile dany miesiąc ma dni ale mam problem a mianowicie np przy roku przystępnym (2000 rok) w 2 miesiącu pojawia mi się, że ma dni 29. Jak mam to poprawić, żeby mi się wyświetlało, że w roku przystępnym w 2 miesiącu jest 28 dni? Już nie mam pomysłu na to i dlatego proszę o wsparcie.
Jest ktoś w stanie mi pomóc i uzupełnić kod o tą małą kwestię?
Z góry dziękuję
To mój kod:


double rokPrzystepny;
                int miesiac;
            Console.WriteLine("Podaj rok");
            rokPrzystepny = double.Parse(Console.ReadLine());
            if ((rokPrzystepny % 4 ==0) && (rokPrzystepny % 100 == 1) || (rokPrzystepny % 400 ==0)) 
                 Console.WriteLine("To rok przystepny");
            else Console.WriteLine("To rok nieprzystepny");

           Console.WriteLine("Podaj numer miesiąca");
           miesiac = int.Parse(Console.ReadLine());

           if ((miesiac == 1) || (miesiac == 3) || (miesiac == 5) || (miesiac == 7) ||
               (miesiac == 8) || (miesiac == 10) || (miesiac == 12)) Console.WriteLine("Podany miesiąc ma 31 dni");
           if ((miesiac == 4) || (miesiac == 6) || (miesiac == 9) || (miesiac == 11))
               Console.WriteLine("Podany miesiąc ma 30");
            Console.WriteLine("Podany miesiac ma 29dni");

           Console.ReadKey();
0

Pierwsza sprawa to to, ze rok przestepny jest co cztery lata, wiec wystarczy sprwadzic podzielnosc przez 4;)

Po drugie, jak masz te dwa ify, w zadnym z nich nie masz miesiaca o numerze 2, wiec taki miesiac nie zalapie sie na zadnego ifa, tylko po prostu wypiszesz dla niego "29dni". Pasowaloby w tym miejscu uzaleznic to od tego, czy rok przestepny, no nie?:)

I jeszcze taka mala dygresja, lepiej ten rok trzymac w zmiennej o nazwie po prostu "rok", o typie calkowitym (rok nie jest raczej zmiennoprzecinkowy), dodatkowo mozesz zadeklarowac zmienna rokPrzestepny jako bool i po wczytaniu od uzytkownika danych, przypisujesz do rokPrzestepny:

bool rokPrzestepny = rok % 4;
0

Sprawdzasz na początku czy rok jest przestępny, tak? To zapisz sobie wynik tego porównania do jakiegoś bool. Potem po obu ifach (30 i 31 dni) zrób ifa w którym uzależniasz czy 28 czy 29 od tego boola

0
FakeAccount napisał(a):

Pierwsza sprawa to to, ze rok przestepny jest co cztery lata, wiec wystarczy sprwadzic podzielnosc przez 4;)

Niestety tak nie jest sprawdź http://www.kalendarzswiat.pl/rok_przestepny/ rok 1800 dzieli się przez 4 a nie jest przystępny ;)

Po drugie, jak masz te dwa ify, w zadnym z nich nie masz miesiaca o numerze 2, wiec taki miesiac nie zalapie sie na zadnego ifa, tylko po prostu wypiszesz dla niego "29dni". Pasowaloby w tym miejscu uzaleznic to od tego, czy rok przestepny, no nie?:)

I jeszcze taka mala dygresja, lepiej ten rok trzymac w zmiennej o nazwie po prostu "rok", o typie calkowitym (rok nie jest raczej zmiennoprzecinkowy), dodatkowo mozesz zadeklarowac zmienna rokPrzestepny jako bool i po wczytaniu od uzytkownika danych, przypisujesz do rokPrzestepny:

bool rokPrzestepny = rok % 4;

Czyli ktoś wie jak mi pomóc? I dopisać ten kod gdzie będzie prawidłowo działało?
Chodzi mi uzupełnienie w moim obecnym kodzie z całkowitą znajomością kiedy rok jest przystępny
Konkretnie chce odpowiedzi:)

0
if ((rokPrzystepny % 4 ==0) && (rokPrzystepny % 100 == 1) || (rokPrzystepny % 400 ==0)) 

Według tego warunku 2004 nie jest przestępny.
Lepiej rok zapisuj na int, dzielisz później porównujesz do zera nie zdziwię się jeśli gdzieś z dzielenia dostaniesz 0.000000012

0
 if ((rokPrzystepny % 4 ==0) && (rokPrzystepny % 100 !=0) || (rokPrzystepny % 400 ==0)) 

Poprawione i na int też również.
Mógłbyś mi podać odpowiedź na moje pytanie ? ;)
Jest ktoś w stanie mi pomóc?
Czy jednak mam liczyć na siebie jak to w życiu zwykle jest.

1
 if ((miesiac == 4) || (miesiac == 6) || (miesiac == 9) || (miesiac == 11))
{
//30dni
}
else if(miesiac == 2)
{
  if(sprawdzasz czy rok jest przestępny)
   {//i wypisujesz co trzeba}

}
else 
{
//jeśli nie jest to miesiąc 2,4,6,9,11 to ma 31dni
}
0
dam1an napisał(a):

if ((miesiac == 4) || (miesiac == 6) || (miesiac == 9) || (miesiac == 11))
{
//30dni
}
else if(miesiac == 2)
{
if(sprawdzasz czy rok jest przestępny)
{//i wypisujesz co trzeba}

}

<quote="1083183">else { //jeśli nie jest to miesiąc 2,4,6,9,11 to ma 31dni } ``` //jeśli nie jest to miesiąc 2,4,6,9,11 to ma 31dni w 2 miesiącu nie będzie miał 31 dni. W przystępnym 29 a w nieprzystępnym 28
0

No ale o co Ci chodzi?

if ((miesiac == 4) || (miesiac == 6) || (miesiac == 9) || (miesiac == 11))
{
//30dni
}
else if(miesiac == 2)
{
  if(sprawdzasz czy rok jest przestępny)
   { 
      //29dni
   }
   else
    {
       //28dni
    }

}
else 
{
//31dni
}
0

poprawiony kod

 double rokPrzystepny;

                int miesiac;
            Console.WriteLine("Podaj rok");
            rokPrzystepny = double.Parse(Console.ReadLine());
            if ((rokPrzystepny % 4 ==0) && (rokPrzystepny % 100 !=0) || (rokPrzystepny % 400 ==0)) 
                 Console.WriteLine("To rok przystepny");
            else Console.WriteLine("To rok nieprzystepny");

           Console.WriteLine("Podaj numer miesiąca");
           miesiac = int.Parse(Console.ReadLine());

           if ((miesiac == 1) || (miesiac == 3) || (miesiac == 5) || (miesiac == 7) ||
               (miesiac == 8) || (miesiac == 10) || (miesiac == 12)) Console.WriteLine("Podany miesiąc ma 31 dni");
           if ((miesiac == 4) || (miesiac == 6) || (miesiac == 9) || (miesiac == 11))
               Console.WriteLine("Podany miesiąc ma 30");
           else if (miesiac == 2)
           {
               if ((rokPrzystepny % 4 == 0) && (rokPrzystepny % 100 != 0) || (rokPrzystepny % 400 == 0))

                   Console.WriteLine("Podany miesiac ma 29dni");
               else Console.WriteLine("Podany miesiąc ma 28dni");
           }

           Console.ReadKey();   

Chodziło mi o to, że w tym co napisałeś:

 else 
{
//jeśli nie jest to miesiąc 2,4,6,9,11 to ma 31dni
}

Źle podałeś 2 miesiąc, on nigdy nie ma 31 dni. Ma 28 lub 29dni.

Dziękuje za nakierowanie mnie na rozwiązanie :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0