Skocz do zawartości
  • 👋 Witaj na MPCForum!

    Przeglądasz forum jako gość, co oznacza, że wiele świetnych funkcji jest jeszcze przed Tobą! 😎

    • Pełny dostęp do działów i ukrytych treści
    • Możliwość pisania i odpowiadania w tematach
    • System prywatnych wiadomości
    • Zbieranie reputacji i rozwijanie swojego profilu
    • Członkostwo w jednej z największych społeczności graczy

    👉 Dołączenie zajmie Ci mniej niż minutę – a zyskasz znacznie więcej!

    Zarejestruj się teraz

[PYTANIE] Obliczacz wieku


Rekomendowane odpowiedzi

Opublikowano

Witam.

Napisałem program który ma za zadnie obliczyć kogoś wiek, dodam że są to moje początki z c++.

Niby wszystko jest ok, na moje oko, lecz nie chce on poprawnie działać. Myślę że to wina if'ów, (znaczy moja wina :D).

Poza tym chciał bym zapytać jak zrobić funkcje które ograniczały by wpisywanie większej ilości dni w miesiącach które maja dni 30 i w miesiacach które mają dni 31, co do lutego wiem, że może być ciężko. Wiem, że istnieje opcja by datę aktualna program pobierał z systemu, lecz jak na razie mój poziom mnie ogranicza.

 

http://wklej.to/DmUnx

Weteran
Opublikowano

Trochę nie rozumiem.

Jeżeli chodzi ci o to żeby po prostu program odróżniał miesiące z 31 dniami od tych z 30, to nie wystarczy coś takiego?

if(miesiac == 1 ||miesiac == 3 || miesiac == 5  || miesiac == 7 || miesiac == 8  || miesiac == 10 || miesiac == 12  && dzien > 31)
{
//Blad
}

if( miesiac == 4  || miesiac == 6 || miesiac == 9  || miesiac == 11  && dzien > 30)
{
//Blad
}

 

Oraz na luty:

if(miesiac == 2 && rok == przestepny && dzien > 29)
{
//Blad
}

if(miesiac == 2 && rok != przestepny && dzien > 28)
{
//Blad
}

jeśli chodzi o rok przestępny, to chyba będziesz musiał zrobić małą bazę danych czy coś o.O

Wiem tylko że rok przestępny jest podzielny przez 4, nie wiem jak to sprawdzić.

 

@Edit: okey, już wiem, trzeba do tego użyć mało sławnego operatora "%"który sprawdza resztę z dzielenia.

Opublikowano

Polecam pobrać dzisiejszy czas za pomocą

 

time

 

Następnie obliczyć różnicę za pomocą

 

difftime

 

Wcześniej konwertując user input do struktury

 

tm

 

I obliczając wartość time_t za pomocą

mktime

 

Natomiast przy wyświetlaniu możnaby skorzystać z

asctime lub ctime

 

Wszystkie funkcje tutaj:

http://www.cplusplus.com/reference/clibrary/ctime/

 

 

 

Jak widzisz, pobieranie aktualnej daty nie jest w żadnym wypadku trudne.

Ta sygnatura jest pusta.

Opublikowano

@XAULIN

Jeśli chodzi o tą strukturę if, która ma kilka warunków, to pierwszy raz coś takiego widzę.. ;) Co znaczą znaczniki:

"&&" i "||"

 

@4ggr35510n

 

Jednak trudne ale postaram sie o tym poczytać

;)

Opublikowano

Dzięki.

Ale jeśli deklaruje zmienna miesiąc dopiero po zmiennej dzień to nie mogę zrobić :

if(miesiac == 1 ||miesiac == 3 || miesiac == 5 || miesiac == 7 || miesiac == 8 || miesiac == 10 || miesiac == 12 && dzien > 31)

Opublikowano

więc najpierw sprawdzaj czy liczba jest większa od 31 lub mniejsza od 1 i wyrzucaj błąd (przy dniach)

najlepiej zrób tablice zawierającą ilość dni w danych miesiącu. Wtedy sprawdzaj po kolei czy liczba dni się zgadza (przy lutym zrób wyjątek, który sprawdzi czy rok nie jest przestępny. Oczywiście po uprzednim sprawdzeniu poprawności miesiąca.)

Opublikowano

tak tylko ify będą długie. z tablicami byłoby tylko krócej. ale kod by się minimalnie dłużej wykonywał i pamięci by tam pare bajtów więcej trzeba było programowi. Ale to byłyby szczegóły przy takim małym programie.

Opublikowano

Narazie muszę to zrobić na if;ach, Dziś już nie jestem w stanie myśleć, jutro będę się staral coś wymyślić. Nie wiem tylko dlaczego wgl mi nie oblicza nic teraz.. dodam, że nie zmieniałem.

Aaaa.. i jeszcze pytanie mozna tak:

if(zmienna = 2, 3, 4)

Opublikowano

Czyli:

if(zienna == 2 || zmienna == 3 || zmienna == 4)

??

@Edit

Działa :D Liczny ;) No to jutro mnie czekają ify co do tych dni i miesięcy oraz roku przestępnego ;)

 

@Edit2

Kierując się waszymi podpowiedziami zrobiłem coś takiego: http://wklej.to/amGF7

Z tego powodu, iż nie umiałem znaleźć w swojej głowie innego pomysłu zmieniłem miejscami prośbę o podawanie daty zaczynamy od roku po czym miesiąc i na koniec dzień, to wyjście mnie nie zadowala, ale nie wiem jak zrobić to dd.mm.rr.

Dodam, że nie wiem dlaczego ale przy miesiącach o ilości dni 30, program wywala błąd przy każdej ilości dni, a powinien przy ilości dni > 30.

Opublikowano

no to tak jak już pisałem. najpierw sprawdzaj czy dzien jest mniejsze od 32 i wieksze od 0

potem po wprowadzeniu miesiąca sprawdzaj czy miesiące są wprowadzone poprawnie i zgadzają się z ilością dni, które mogą w nich być

rok na końcu. Sprawdzaj czy jest przestępny i czy nie jest większy od aktualnej daty. Jeśli nie jest przestepny, miesiąc to luty a ilosc dni to 29 wtedy wyrzuca error

 

we wszystkich ifach dot. miesięcy spróbuj

to:

if(m == 4  || m == 6 || m == 9  || m == 11  && d > 30)

zamienić na coś takiego (dodać nawiasy)

if((m == 4  || m == 6 || m == 9  || m == 11) && d > 30)

Opublikowano

Dzięki wielkie za pomoc!:D Lubie to leci oczywiście ;)

Będę się starał udoskonalać programik, aby się jak najwięcej przy okazji nauczyć, jak będą problemy pewnie się zgłoszę ;)

Zarchiwizowany

Ten temat przebywa obecnie w archiwum. Dodawanie nowych odpowiedzi zostało zablokowane.

×
×
  • Dodaj nową pozycję...