Liczenie dni od daty urodzin.

0

Cześć. Dostaliśmy program który ma liczyć te zależności. Coś próbowałem zrobić ,ale nie ma do tego pewności.
Napisz program który obliczy te zależności.
ile przeżyłeś dni
-ile przeżyłeś godzin

  • ile przeżyłeś sekund
  • ile zostało Ci godzin do pełnoletności
    Tutaj umieszczę źródło co udało mi się zrobić.
#include <cstdlib>
#include <iostream>

using namespace std;

int main(int argc, char *argv[])
{
    string imie;
string nazwisko;
int data;
int miesiac,miesiac2;
int rok,rok2;
int dzien,dzien2;

cout<<"Podaj swoje imie\n";
cin>>imie;
cout <<"Podaj swoje nazwisko\n";
cin >>nazwisko;
cout <<"Podaj dzien urodzin\n";
cin >>dzien;
cout<<"Podaj miesiac urodzin\n";
cin>>miesiac;
cout<<"Podaj rok urodzin\n";
cin>>rok;
cout<<"Podaj dzisiejszy dzien\n";
cin>>dzien2;
cout<<"Podaj dzisiejszy miesiac\n";
cin>>miesiac2;
cout<<"Podaj dzisiejszy rok\n";
cin>>rok2;
cout<<"\nIlosc przezytych dni dzien=" <<()+(2012-rok)*365  ;
cout<<"\nIlosc przezytych godzin=\n" <<(2012-rok)*365*24 ;
cout<<"\nIlosc przezytych sekund=\n" <<(2012-rok)*365*24*3600 ;
cout<<"\nIlosc godzin do pelnoletnosci=" <<157680 - 365*24 ;
    system("PAUSE");
    return EXIT_SUCCESS;
}
1

Radzilbym zapoznać się z biblioteką ctime http://www.cplusplus.com/reference/ctime/
Nie uwzgledniasz roku przestępnego. Dlatego liczba godzin, dni, sekund nie bedzie się zgadzać.

0

1.Brak pytania.
2.To się nawet nie kompiluje :P

0

nie podałeś jaki masz z tym problem konkretnie.

0

Nie musimy uwzględniać roku przestępnego. Tak nam dopowiedział i zapomniałem tego dopisać.

A problem mam taki,że kod źródłowy jest zły. Może dokładniej źle są chyba obliczenia liczące przeżyte dni,godziny,sekundy i te do pełnoletności.

0
Patryk27 napisał(a):

1.Brak pytania.
2.To się nawet nie kompiluje :P

U mnie się kompiluje.

dev c++ 4.9.9.2

0

Bo uzywasz Dev-CPP, brakuje Ci biblioteki string, zeby to działało:

..
cin >>imie;
..
cin >>nazwisko;

Po co Ci tutaj ten pierwszy nawias?

cout<<"\nIlosc przezytych dni dzien=" <<()+(2012-rok)*365  ;

powinno byc bez niego:

cout<<"\nIlosc przezytych dni dzien=" <<(2012-rok)*365  ;

---EDIT---
Te obliczenia co do dni, godzin sekund sa bezsesnu, powinienes robic coś w tym stylu:

cout <<"\nIlosc przezytych dni dzien="  (rok2-rok)*365 - (365-(dzien2*miesiac2)) ;

Moim zdaniem dokladniej i lepiej by było jakbyś użył biblioteki ctime.

To proponuje Ci zrobić tak:

  1. Wprowadzic nową zmienną np.
 unsigned int ilosc_dni;
  1. Przypisac jej ilosc dni:
ilosc_dni = (2012-rok)*365 - (365-(dzien2*miesiac2)) 

i pozniej:(zmieniejszysz troche ilość obliczeń przez co bedzie ten program działał troche szybciej)

 
cout<<"\nIlosc przezytych godzin=\n" <<ilosc_dni*24 ;
cout<<"\nIlosc przezytych sekund=\n" <<ilosc_dni*24*3600;
cout<<"\nIlosc godzin do pelnoletnosci=" <<157680 - (ilosc_dni*24); // Zakladam ze dobrze obliczyles ilosc godzin do pelnoletnosci

---EDIT2---
Popraw tamto Co Ci podalem na to:(wkradl mi sie blad:D)

<code class="cpp">cout <<"\nIlosc przezytych dni dzien="  (rok2-rok)*365 - (365-(dzien2+miesiac2*30)) ;

Mogłbyś dać jeszcze takie cos przy liczeniu ilosci godzin do pelnoletnosci:
```cpp
if((157680 - (ilosc_dni*24) <= 0) 
 cout << "Jestes pelnoletni" << endl;
else 
cout<<"\nIlosc godzin do pelnoletnosci=" <<157680 - (ilosc_dni*24); 

No i oczywiscie mógłbyś zastosować to co podał @_13th_Dragon :)

2

Przyda ci się taka tabliczka: int DlugoscMiesiaca[]={31,28,31,30,31,30,31,31,30,31,30,31};
przy odejmowaniu dat:
Suma=0;
Jeżeli R2>R1 to: Suma += 365*max(0,R2-R1-1)+SumaDlugoscMiesiaca(M2+1,12)+SumaDlugoscMiesiaca(1,M1)+DlugoscMiesiaca[M2-1]+D1-D2
Jeżeli R2=R1 oraz M2>M1 to: Suma += SumaDlugoscMiesiaca(M2+1,M1)+DlugoscMiesiaca[M2-1]+D1-D2
Jeżeli R2=R1 oraz M2=M1 oraz D2>=D1 to: Suma += D1-D2

2

No to dla kompletnych nieuków i leniów:

int R2,M2,D2;
cout<<"Podaj datę urodzin DD MM RRRR: ";
cin>>D2>>M2>>R2;
int R1,M1,D1;
cout<<"Podaj aktualna datę DD MM RRRR: ";
cin>>D1>>M1>>R1;
int MS[]={0,0,31,59,90,120,151,181,212,243,273,304,334,365},dni=D1+MS[M1]+365*R1-D2-MS[M2]-365*R2;
cout<<"dni zycia: "<<dni<<endl;
cout<<"godziny do 18-ki: "<<(24*(6570-dni))<<endl;
2
#include <string>
#include <iostream>

using namespace std;

unsigned int policz_dni(unsigned int ilosc_miesiecy){
	unsigned int tab[] = {31,28,31,30,31,30,31,31,30,31,30,31};
	unsigned int ilosc_dni_w_miesiacu = 0;

	for(int i = 0; i < ilosc_miesiecy; i++)
		ilosc_dni_w_miesiacu += tab[i];

	return ilosc_dni_w_miesiacu;
}
 
int main(int argc, char *argv[])
{
    string imie, nazwisko;
	unsigned int dzien, miesiac, rok, dzien2, miesiac2, rok2;
	unsigned int ilosc_przezytych_dni;

	cout << "Podaj swoje imie: ";
	cin >> imie;
	cout << "Podaj swoje nazwisko: ";
	cin >> nazwisko;

	cout << "Podaj date urodzin DD MM RRRR: ";
	cin >> dzien >> miesiac >> rok;

	cout << "Podaj aktualna datę DD MM RRRR: ";
	cin >> dzien2 >> miesiac2 >> rok2;
 
	ilosc_przezytych_dni = ((rok2 - rok) * 365) + policz_dni(miesiac2 - 1) - policz_dni(miesiac - 1) + dzien2 - dzien;

	cout << "Ilosc przezytych dni dzien: " << ilosc_przezytych_dni << endl;
	cout << "Ilosc przezytych godzin: " << ilosc_przezytych_dni * 24 << endl;
	cout << "Ilosc przezytych sekund: " << ilosc_przezytych_dni * 24 * 3600 << endl;
	
	unsigned int liczba_godzin_do_pelnoletnosci = 18 * 365 * 24;

	if(ilosc_przezytych_dni * 24 >= liczba_godzin_do_pelnoletnosci) 
		cout << "Jestes pelnoletni" << endl;
	else
		cout << "Ilosc godzin do pelnoletnosci: " << liczba_godzin_do_pelnoletnosci - (ilosc_przezytych_dni * 24) << endl;
	

    cin.ignore();
	cin.get();

    return 0;
}
0

Problem rozwiązany. Temu zadaniu pomógł mi V3r.

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