Sprawdzenie czy ktoś jest pełnoletni

Sprawdzenie czy ktoś jest pełnoletni
C1
  • Rejestracja:ponad 4 lata
  • Ostatnio:ponad 4 lata
  • Postów:1
0

Witam
Potrzebuje pomocy z programem w Dev c++
Muszę stworzyć program, który zapyta użytkownika o bieżący rok,miesiąc i dzień miesiąca oraz o datę urodzenia, a w odpowiedzi zwróci informację, czy użytkownik jest pełnoletni.Jeśli nie jest, program poda, za ile miesięcy osiągnie on pełnoletność.

Na razie mam takie coś i nie wiem jak zrobić, żeby program obliczył ile miesięcy zostało do pełnoletności

Kopiuj
#include <iostream>
using namespace std;

int main()
{
    int dzien, miesiac, rok, wynik;
    int b_dzien, b_miesiac, b_rok;

    
    cout<<"Podaj biezaca date"<<endl;
    cout<<"Dzien: ";
    cin>>b_dzien;
    cout<<"Miesiac: ";
    cin>>b_miesiac;
    cout<<"Rok: ";
    cin>>b_rok;
    cout<<"Podaj date urodzin "<<endl;
    cout<<"Dzien: ";
    cin>>dzien;
    cout<<"Miesiac: ";
    cin>>miesiac;
    cout<<"Rok: ";
    cin>>rok;
        if (rok <=2002) cout << "jestes pelnoletni" << endl;
        else cout << "jestes niepelnoletni" << endl;
        if (rok >2002) cout << "bedziesz pelnoletni za " ;
        cout << " ";
        

        
system ("pause");
return 0;
}
edytowany 1x, ostatnio: Riddle
AK
  • Rejestracja:ponad 6 lat
  • Ostatnio:około 22 godziny
  • Postów:3561
0

PO PIERWSZE to w ogóle nie korzystasz z daty "dzisiaj". Więc po co wprowadziłeś?


Bo C to najlepszy język, każdy uczeń ci to powie
PA
  • Rejestracja:około 18 lat
  • Ostatnio:ponad rok
  • Postów:73
0

Pomyśl o użyciu unix timestamp(https://pl.wikipedia.org/wiki/Czas_uniksowy), czyli ilosc sekund jaka uplynela od poczatku 1970 roku. Wartosc ta jest podawana w sekundach, wiec nie bedziesz sie musial bawic w kombinacje z dniami, miesiacami, czy latami, tylko wykonasz zwykle operacje dodawania i odejmowania i otrzymana liczbe zamienisz na format jaki Ci pasuje.

Dawno nie bawilem sie C++, ale pewnie sa juz jakies biblioteki ,ktore potrafia konwertowac unix timestamp na dowolny format czasu.

edytowany 1x, ostatnio: Paweleczek
AK
Łatwo znaleźć różnice (i nie tylko w latach przestępnych) między urzędowym obliczeniem pełnoletności a Epoch
IN
Jak nie robisz tego za pieniądze to olej lata przestępne, szkoda czasu, czekają tablice, funkcje, wskaźniki, dynamiczna alokacja pamięci, struktury, klasy a Ty chcesz liczyć jakieś bzdety. Przy tym co wymieniłem dopiero zaczyna się fajna zabawa.
_13th_Dragon
  • Rejestracja:ponad 19 lat
  • Ostatnio:2 miesiące
1

Wykonuję programy na zamówienie, pisać na Priv.
Asm/C/C++/Pascal/Delphi/Java/C#/PHP/JS oraz inne języki.
IN
  • Rejestracja:ponad 2 lata
  • Ostatnio:około 2 lata
  • Postów:60
0

Dziel problem na logiczne fragmenty i sprawdzaj ich działanie. Najpierw napisz kod który wyliczy różnicę w dniach. Potem w miesiącach. Potem latach (to chyba najprostsze). Potem to połącz.

_13th_Dragon
Troll nekrofil? :D
Piter LOL
  • Rejestracja:ponad 2 lata
  • Ostatnio:ponad rok
  • Postów:1
0
czesiu17191 napisał(a):

Witam
Potrzebuje pomocy z programem w Dev c++
Muszę stworzyć program, który zapyta użytkownika o bieżący rok,miesiąc i dzień miesiąca oraz o datę urodzenia, a w odpowiedzi zwróci informację, czy użytkownik jest pełnoletni.Jeśli nie jest, program poda, za ile miesięcy osiągnie on pełnoletność.

Na razie mam takie coś i nie wiem jak zrobić, żeby program obliczył ile miesięcy zostało do pełnoletności

Kopiuj
#include <iostream>
using namespace std;

int main()
{
    int dzien, miesiac, rok, wynik;
    int b_dzien, b_miesiac, b_rok;

    
    cout<<"Podaj biezaca date"<<endl;
    cout<<"Dzien: ";
    cin>>b_dzien;
    cout<<"Miesiac: ";
    cin>>b_miesiac;
    cout<<"Rok: ";
    cin>>b_rok;
    cout<<"Podaj date urodzin "<<endl;
    cout<<"Dzien: ";
    cin>>dzien;
    cout<<"Miesiac: ";
    cin>>miesiac;
    cout<<"Rok: ";
    cin>>rok;
        if (rok <=2002) cout << "jestes pelnoletni" << endl;
        else cout << "jestes niepelnoletni" << endl;
        if (rok >2002) cout << "bedziesz pelnoletni za " ;
        cout << " ";
        

        
system ("pause");
return 0;
}

cześć chyba zrobiłem to poprawnie jak jeszcze potrzebujesz to masz

Kopiuj
#include <iostream>
using namespace std;
int dzienUrodzenia, miesiacUrodzenia, rokUrodzenia, dzienObecny, miesiacObecny, rokObecny, roznica;
int main()
{
    cout<<"Witaj w programie ktory pobiera date urodzenia oraz date terazniejsza i sprawdza czy osoba jest pelnoletnia"<<endl;
    cout<<"Podaj dzien, miesiac i rok urodzenia dowolnej osoby: "<<endl;
    cin>>dzienUrodzenia;
    if(dzienUrodzenia>31||dzienUrodzenia<1)
    {
        cout<<"Wprowadzony dzien urodzenia jest nieprawidlowy"<<endl; 
        return 0;
    }
    cin>>miesiacUrodzenia;
    if(miesiacUrodzenia>12||miesiacUrodzenia<1)
    {
        cout<<"Wprowadzony miesiac urodzenia jest nieprawidlowy"<<endl; 
        return 0;
    }
    cin>>rokUrodzenia;
    cout<<"Podaj aktualny dzien, miesiac i rok: "<<endl;
    cin>>dzienObecny;
    if(dzienObecny>31||dzienObecny<1)
    {
        cout<<"Wprowadzony obecny dzien jest nieprawidlowy"<<endl; 
        return 0;
    }
    cin>>miesiacObecny;
    if(miesiacObecny>12||miesiacObecny<1)
    {
        cout<<"Wprowadzony obecny miesiac jest nieprawidlowy"<<endl; 
        return 0;
    }
    cin>>rokObecny;
    cout<<endl;
    roznica=rokObecny-rokUrodzenia;
    if(roznica>18)
    {
        cout<<"Osoba jest pelnoletnia"<<endl;
    }
    if(roznica==18)
    {
        if(miesiacUrodzenia<miesiacObecny)
        {
            cout<<"Osoba jest pelnoletnia"<<endl;
        }
        if(miesiacUrodzenia>miesiacObecny)
        {
            cout<<"Osoba jest niepelnoletnia"<<endl;
        }
        if(miesiacUrodzenia==miesiacObecny)
        {
            if(dzienUrodzenia<dzienObecny)
            {
                cout<<"Osoba jest pelnoletnia"<<endl;
            }
            if(dzienUrodzenia>dzienObecny)
            {
                cout<<"Osoba jest niepelnoletnia"<<endl;
            }
            if(dzienUrodzenia==dzienObecny)
            {
                cout<<"Osoba jest pelnoletnia"<<endl;
            }
        }
    }
    return 0;
}
edytowany 1x, ostatnio: Riddle
GO
Znowu nekrofilia uprawiana na forum...
AK
Ale z jaką dumą ogłosił swoje rozwiązanie ...
Eldorad O.
Matko jedyna, wincej ifów
gk1982
  • Rejestracja:ponad 13 lat
  • Ostatnio:6 dni
  • Lokalizacja:Łódź
  • Postów:541
0

Pogadałem z chatem GPT:

Kopiuj
#include <iostream>
#include <ctime>
#include <limits>

// Function to calculate age based on birth year, month, and day
int calculateAge(int birthYear, int birthMonth, int birthDay) {
    // Get the current date
    std::time_t t = std::time(nullptr);
    std::tm* now = std::localtime(&t);
    int currentYear = now->tm_year + 1900;
    int currentMonth = now->tm_mon + 1; // Month is 0-based, so add 1
    int currentDay = now->tm_mday;

    // Calculate the age
    int age = currentYear - birthYear;

    // Check birth month and day
    if (currentMonth < birthMonth || (currentMonth == birthMonth && currentDay < birthDay)) {
        age--;
    }

    return age;
}

// Function to check if a year is a leap year
bool isLeapYear(int year) {
    return (year % 4 == 0 && year % 100 != 0) || (year % 400 == 0);
}

// Function to validate the day for a given month and year
bool isValidDay(int day, int month, int year) {
    if (day < 1 || day > 31) {
        return false; // Day is out of valid range
    }

    if (month == 4 || month == 6 || month == 9 || month == 11) {
        return day <= 30; // April, June, September, November have 30 days
    } else if (month == 2) {
        return (isLeapYear(year) && day <= 29) || (!isLeapYear(year) && day <= 28); // February
    } else {
        return true; // All other months have 31 days
    }
}

int main() {
    int birthYear, birthMonth, birthDay;

    // Input validation for birth year
    do {
        std::cout << "Enter your birth year: ";
        if (!(std::cin >> birthYear)) {
            std::cin.clear();
            std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
            std::cout << "Invalid input. Please enter a valid year." << std::endl;
        }
    } while (birthYear <= 0);

    // Input validation for birth month
    do {
        std::cout << "Enter your birth month (1-12): ";
        if (!(std::cin >> birthMonth) || birthMonth < 1 || birthMonth > 12) {
            std::cin.clear();
            std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
            std::cout << "Invalid input. Please enter a valid month (1-12)." << std::endl;
        }
    } while (birthMonth < 1 || birthMonth > 12);

    // Input validation for birth day
    do {
        std::cout << "Enter your birth day: ";
        if (!(std::cin >> birthDay) || !isValidDay(birthDay, birthMonth, birthYear)) {
            std::cin.clear();
            std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
            std::cout << "Invalid input. Please enter a valid day." << std::endl;
        }
    } while (!isValidDay(birthDay, birthMonth, birthYear));

    // Calculate the age using the function
    int age = calculateAge(birthYear, birthMonth, birthDay);

    // Check if the person has reached the age of majority
    int ageOfMajority = 18;

    if (age >= ageOfMajority) {
        std::cout << "You have reached the age of majority." << std::endl;
    } else {
        int monthsLeft = (ageOfMajority - age) * 12;
        std::cout << "You have not reached the age of majority yet." << std::endl;
        std::cout << "You have " << monthsLeft << " months left to reach the age of majority." << std::endl;
    }

    return 0;
}

Don't give up learning JavaScript!
It is enjoyable to make things visible which are invisible.
Każdy programista przybywający z innego miasta jest fachowcem.
Anyone who stops learning is old, whether at twenty or eighty.
Anyone who keeps learning stays young.
The greatest thing in life is to keep your mind young.
AK
  • Rejestracja:ponad 6 lat
  • Ostatnio:około 22 godziny
  • Postów:3561
6

Prawna pełnoletniość jest na zasadzie daty dziennej, i nie ma potrzeby wikłać sie w lata przestępne, nawet dla urodzonych 29 lutego


Bo C to najlepszy język, każdy uczeń ci to powie
gk1982
tak tylko tu jest walidacja przy wprowadzeniu danych zeby ktos 31 lutego nie wpisał
MarekR22
Moderator C/C++
  • Rejestracja:około 17 lat
  • Ostatnio:minuta
1

https://godbolt.org/z/q89KWdx4v

Kopiuj
#include <chrono>
#include <ctime>
#include <iostream>

int main()
{
    using clock = std::chrono::system_clock;
    std::tm birthDate {};
    while (std::cin >> std::get_time(&birthDate, "%Y-%m-%d")) {
        auto adultDate = birthDate;
        adultDate.tm_year += 18;
        auto adultTime = clock::from_time_t(std::mktime(&adultDate));
        auto now = clock::now();
        if (adultTime > now) {
            auto roundDiff = ceil<std::chrono::days>(adultTime - now);
            std::cout << "You are to young by: " << roundDiff << '\n';
        } else {
            std::cout << "You are old enogh\n";
        }
    }

    return 0;
}

Jeśli chcesz pomocy, NIE pisz na priva, ale zadaj dobre pytanie na forum.
YA
  • Rejestracja:prawie 10 lat
  • Ostatnio:około 15 godzin
  • Postów:2367
1

U mnie ChatGPT wypluł coś takiego (nie próbowałem kompilować i generować testów, ale jako punkt wyjścia nie wygląda źle).

Kopiuj
#include <iostream>
#include <chrono>
#include <variant>
#include <ctime>
#include <cassert>

enum class AgeGroup { ADULT, ADOLESCENT };
enum class InvalidDate { INVALID_BIRTH_DATE, INVALID_CURRENT_REFERENCE_DATE };

using BirthDate = const std::tm&;
using CurrentDate = const std::tm&;
using AgeGroupOrError = std::variant<AgeGroup, InvalidDate>;

const double hoursInDay = 24.0;
const double daysInYear = 365.25;  // Average considering leap years

std::tm createDate(int year, int month, int day) {
    std::tm date = {0};
    date.tm_year = year - 1900; // Year since 1900
    date.tm_mon = month - 1;    // Month [0-11]
    date.tm_mday = day;         // Day [1-31]
    return date;
}

bool isValidDate(const std::tm& date) {
    std::tm temp_date = date;
    return std::mktime(&temp_date) != -1 &&
           temp_date.tm_year == date.tm_year &&
           temp_date.tm_mon == date.tm_mon &&
           temp_date.tm_mday == date.tm_mday;
}

AgeGroupOrError isAdult(BirthDate birthDate, CurrentDate currentDate, int adultAge = 18) {
    if (!isValidDate(birthDate)) {
        return InvalidDate::INVALID_BIRTH_DATE;
    }
    if (!isValidDate(currentDate)) {
        return InvalidDate::INVALID_CURRENT_REFERENCE_DATE;
    }

    auto birth_time = std::mktime(const_cast<std::tm*>(&birthDate));
    auto current_time = std::mktime(const_cast<std::tm*>(&currentDate));
    auto duration = std::chrono::system_clock::from_time_t(current_time) - std::chrono::system_clock::from_time_t(birth_time);
    auto years = std::chrono::duration_cast<std::chrono::hours>(duration).count() / (daysInYear * hoursInDay);

    return years >= adultAge ? AgeGroup::ADULT : AgeGroup::ADOLESCENT;
}

Kliknij, aby dodać treść...

Pomoc 1.18.8

Typografia

Edytor obsługuje składnie Markdown, w której pojedynczy akcent *kursywa* oraz _kursywa_ to pochylenie. Z kolei podwójny akcent **pogrubienie** oraz __pogrubienie__ to pogrubienie. Dodanie znaczników ~~strike~~ to przekreślenie.

Możesz dodać formatowanie komendami , , oraz .

Ponieważ dekoracja podkreślenia jest przeznaczona na linki, markdown nie zawiera specjalnej składni dla podkreślenia. Dlatego by dodać podkreślenie, użyj <u>underline</u>.

Komendy formatujące reagują na skróty klawiszowe: Ctrl+B, Ctrl+I, Ctrl+U oraz Ctrl+S.

Linki

By dodać link w edytorze użyj komendy lub użyj składni [title](link). URL umieszczony w linku lub nawet URL umieszczony bezpośrednio w tekście będzie aktywny i klikalny.

Jeżeli chcesz, możesz samodzielnie dodać link: <a href="link">title</a>.

Wewnętrzne odnośniki

Możesz umieścić odnośnik do wewnętrznej podstrony, używając następującej składni: [[Delphi/Kompendium]] lub [[Delphi/Kompendium|kliknij, aby przejść do kompendium]]. Odnośniki mogą prowadzić do Forum 4programmers.net lub np. do Kompendium.

Wspomnienia użytkowników

By wspomnieć użytkownika forum, wpisz w formularzu znak @. Zobaczysz okienko samouzupełniające nazwy użytkowników. Samouzupełnienie dobierze odpowiedni format wspomnienia, zależnie od tego czy w nazwie użytkownika znajduje się spacja.

Znaczniki HTML

Dozwolone jest używanie niektórych znaczników HTML: <a>, <b>, <i>, <kbd>, <del>, <strong>, <dfn>, <pre>, <blockquote>, <hr/>, <sub>, <sup> oraz <img/>.

Skróty klawiszowe

Dodaj kombinację klawiszy komendą notacji klawiszy lub skrótem klawiszowym Alt+K.

Reprezentuj kombinacje klawiszowe używając taga <kbd>. Oddziel od siebie klawisze znakiem plus, np <kbd>Alt+Tab</kbd>.

Indeks górny oraz dolny

Przykład: wpisując H<sub>2</sub>O i m<sup>2</sup> otrzymasz: H2O i m2.

Składnia Tex

By precyzyjnie wyrazić działanie matematyczne, użyj składni Tex.

<tex>arcctg(x) = argtan(\frac{1}{x}) = arcsin(\frac{1}{\sqrt{1+x^2}})</tex>

Kod źródłowy

Krótkie fragmenty kodu

Wszelkie jednolinijkowe instrukcje języka programowania powinny być zawarte pomiędzy obróconymi apostrofami: `kod instrukcji` lub ``console.log(`string`);``.

Kod wielolinijkowy

Dodaj fragment kodu komendą . Fragmenty kodu zajmujące całą lub więcej linijek powinny być umieszczone w wielolinijkowym fragmencie kodu. Znaczniki ``` lub ~~~ umożliwiają kolorowanie różnych języków programowania. Możemy nadać nazwę języka programowania używając auto-uzupełnienia, kod został pokolorowany używając konkretnych ustawień kolorowania składni:

```javascript
document.write('Hello World');
```

Możesz zaznaczyć również już wklejony kod w edytorze, i użyć komendy  by zamienić go w kod. Użyj kombinacji Ctrl+`, by dodać fragment kodu bez oznaczników języka.

Tabelki

Dodaj przykładową tabelkę używając komendy . Przykładowa tabelka składa się z dwóch kolumn, nagłówka i jednego wiersza.

Wygeneruj tabelkę na podstawie szablonu. Oddziel komórki separatorem ; lub |, a następnie zaznacz szablonu.

nazwisko;dziedzina;odkrycie
Pitagoras;mathematics;Pythagorean Theorem
Albert Einstein;physics;General Relativity
Marie Curie, Pierre Curie;chemistry;Radium, Polonium

Użyj komendy by zamienić zaznaczony szablon na tabelkę Markdown.

Lista uporządkowana i nieuporządkowana

Możliwe jest tworzenie listy numerowanych oraz wypunktowanych. Wystarczy, że pierwszym znakiem linii będzie * lub - dla listy nieuporządkowanej oraz 1. dla listy uporządkowanej.

Użyj komendy by dodać listę uporządkowaną.

1. Lista numerowana
2. Lista numerowana

Użyj komendy by dodać listę nieuporządkowaną.

* Lista wypunktowana
* Lista wypunktowana
** Lista wypunktowana (drugi poziom)

Składnia Markdown

Edytor obsługuje składnię Markdown, która składa się ze znaków specjalnych. Dostępne komendy, jak formatowanie , dodanie tabelki lub fragmentu kodu są w pewnym sensie świadome otaczającej jej składni, i postarają się unikać uszkodzenia jej.

Dla przykładu, używając tylko dostępnych komend, nie możemy dodać formatowania pogrubienia do kodu wielolinijkowego, albo dodać listy do tabelki - mogłoby to doprowadzić do uszkodzenia składni.

W pewnych odosobnionych przypadkach brak nowej linii przed elementami markdown również mógłby uszkodzić składnie, dlatego edytor dodaje brakujące nowe linie. Dla przykładu, dodanie formatowania pochylenia zaraz po tabelce, mogłoby zostać błędne zinterpretowane, więc edytor doda oddzielającą nową linię pomiędzy tabelką, a pochyleniem.

Skróty klawiszowe

Skróty formatujące, kiedy w edytorze znajduje się pojedynczy kursor, wstawiają sformatowany tekst przykładowy. Jeśli w edytorze znajduje się zaznaczenie (słowo, linijka, paragraf), wtedy zaznaczenie zostaje sformatowane.

  • Ctrl+B - dodaj pogrubienie lub pogrub zaznaczenie
  • Ctrl+I - dodaj pochylenie lub pochyl zaznaczenie
  • Ctrl+U - dodaj podkreślenie lub podkreśl zaznaczenie
  • Ctrl+S - dodaj przekreślenie lub przekreśl zaznaczenie

Notacja Klawiszy

  • Alt+K - dodaj notację klawiszy

Fragment kodu bez oznacznika

  • Alt+C - dodaj pusty fragment kodu

Skróty operujące na kodzie i linijkach:

  • Alt+L - zaznaczenie całej linii
  • Alt+, Alt+ - przeniesienie linijki w której znajduje się kursor w górę/dół.
  • Tab/⌘+] - dodaj wcięcie (wcięcie w prawo)
  • Shit+Tab/⌘+[ - usunięcie wcięcia (wycięcie w lewo)

Dodawanie postów:

  • Ctrl+Enter - dodaj post
  • ⌘+Enter - dodaj post (MacOS)