program z liczeniem dni od urodzin

0

Napisz program obliczający liczbę dni, które upłynęły od daty Twojego urodzenia do dzisiaj.
Program powinien korzystać z funkcji obliczających liczbę dni w roku i liczbę dni w miesiącu

Napisałem już funkcje obliczajace ile dni ma miesiać uwzgledniaj rok przestepny.
Zastosowałem już petle do pierwszego roku, i każdy następny miesiąc zostaje przypisany do tablicy.
Pomożecie dalej, mam znowu zrobić pętle te pozostałych pełnych lat a później dodać ostatni niepełny rok i pąłączyć te tablice?

Mój kod:

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int liczeniemiesiecy(int miesiac, int rok)
{
    if ((miesiac == 1) || (miesiac == 3) || (miesiac == 5) || (miesiac == 7) || (miesiac == 8)
        || (miesiac == 10) || (miesiac == 12))
    {
        return 31;
    }
    else
    {
        if ((miesiac == 4) || (miesiac == 6) || (miesiac == 9) || (miesiac == 11))
        {

            return 30;
        }
        else
        {
            if ((miesiac == 1) || (miesiac == 3) || (miesiac == 5) || (miesiac == 7)
                || (miesiac == 8) || (miesiac == 10) || (miesiac == 12))
            {
                return 31;
            }
            else
            {
                if ((rok % 400 == 0) || (rok % 4 == 0) && (rok != 100))
                {
                    return 29;
                }
                else
                {
                    return 28;
                }
            }
        }
    }
}
int przestepny(int rok)
{
    if ((rok % 100 != 0) && (rok % 4 == 0) || (rok % 400 == 0))
    {
        return 366;
    }
    else
    {

        return 365;
    }
}

int main()
{
    int urrok, urmiesiac, urdzien;

    int zliczanie[900]; // tablica zliczanie dni w miesiacach

    time_t czas = time(NULL);
    struct tm czas_lokalny = *localtime(&czas);

    printf("teraz: %d-%d-%d %d:%d:%d\n", czas_lokalny.tm_year + 1900, czas_lokalny.tm_mon + 1,
        czas_lokalny.tm_mday, czas_lokalny.tm_hour, czas_lokalny.tm_min, czas_lokalny.tm_sec);

    printf("podaje rok urodzenie\n");
    scanf("%d", &urrok);
    printf("podaj miesiac\n");
    scanf("%d", &urmiesiac);
    printf("podaj dzien\n");
    scanf("%d", &urdzien);


    int i;
    for (i = urmiesiac; i <= 12; i++)
    {

        zliczanie[-1 + i] = liczeniemiesiecy(i, urrok); // przypisanie dni z miesiecy do tablicy
        zliczanie[0] = liczeniemiesiecy(i, urrok)
            - urdzien; // przy pierwszym miesiacu data to np 22 to odemuje date ktora wczytalismy
        int a;
    }


    return 0;
}
3

Powiedz mi po co Ci tu jakakolwiek pętla? jakie tablice?
Zamknij komputer, weź kartkę papieru i zrób z tego zwykły matematyczny wzór.

0

ktoś podpowie

2

Tak, to jest podpowiedź: twoje obliczanie dni od urodzin nie powinno angażować ani jednej pętli.

0

Trzeba rozpatrzyć ile jest możliwości.

Mamy dwie daty: datę A (urodzenia) i datę B (dzisiaj). Są takie przypadki:

  1. daty są w tym samym roku (jest tylko jeden rok):
    1.1 daty są w tym samym miesiącu
    1.2. daty są w kolejnych miesiącach
    1.3. daty nie są w kolejnych miesiącach.

  2. daty są w kolejnych latach (jest rok początkowy i rok końcowy)

  3. daty nie są w kolejnych latach (jest rok początkowy, jeden lub więcej lat pośrednich i rok końcowy)

@1.1: prosta różnica dni.
@1.2: dni pozostałe do końca miesiąca A + dzień B.
@1.3: jak 1.2 + suma dni w m-chach pośrednich.
@2: dni do końca m-ca A + suma pełnych m-cy do końca roku A + suma pełnych m-cy od początku roku B + dzień B.
@3: jak 2 + suma dni w latach pośrednich.

0

(właśnie ten sposób obrałem na początku)

0

zrobiłem 3 pętle:
1 zlicza dni w pierwszym niepełnym roku
2 zlicza dni w pozostałych pełnych latach
3 zlicza dni w ostatnim niepełnym roku

I każdą zapisuje wyniki do innej tablicy.
Teraz bym musiał dodać tablice ale chyba lepiej będzie jak dodam żeby dni były dodawane do 3 zmiennych i później je dodam?
Znacie sposób na dodanie sumy trzech tablic?

2

Tak, nazywa się on dodawanie.

0

zliczał

teraz bład w programie(zmieniałem 2 pętle)

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int liczeniemiesiecy(int miesiac, int rok)
{
    if ((miesiac == 1) || (miesiac == 3) || (miesiac == 5) || (miesiac == 7) || (miesiac == 8)
        || (miesiac == 10) || (miesiac == 12))
    {
        return 31;
    }
    else
    {
        if ((miesiac == 4) || (miesiac == 6) || (miesiac == 9) || (miesiac == 11))
        {

            return 30;
        }
        else
        {
            if ((miesiac == 1) || (miesiac == 3) || (miesiac == 5) || (miesiac == 7)
                || (miesiac == 8) || (miesiac == 10) || (miesiac == 12))
            {
                return 31;
            }
            else
            {
                if ((rok % 400 == 0) || (rok % 4 == 0) && (rok != 100))
                {
                    return 29;
                }
                else
                {
                    return 28;
                }
            }
        }
    }
}
int przestepny(int rok)
{
    if ((rok % 100 != 0) && (rok % 4 == 0) || (rok % 400 == 0))
    {
        return 366;
    }
    else
    {

        return 365;
    }
}

int main()
{
    int urrok, urmiesiac, urdzien;

    time_t czas = time(NULL);
    struct tm czas_lokalny = *localtime(&czas);

    printf("teraz: %d-%d-%d %d:%d:%d\n", czas_lokalny.tm_year + 1900, czas_lokalny.tm_mon + 1,
        czas_lokalny.tm_mday, czas_lokalny.tm_hour, czas_lokalny.tm_min, czas_lokalny.tm_sec);


    printf("podaje rok urodzenie\n");
    scanf("%d", &urrok);
    printf("podaj miesiac\n");
    scanf("%d", &urmiesiac);
    printf("podaj dzien\n");
    scanf("%d", &urdzien);


    int suma = 0;
    int i, i1, i2, i3;

    for (i = urmiesiac; i <= 12; i++)
    {

        i1 = liczeniemiesiecy(i, urrok);
        suma = suma + i1;
    }
    int b;
    int suma1 = 0;

    for (b = (urrok); b <= (czas_lokalny.tm_year + 1900); urrok++)
    {

        i2 = przestepny(urrok + 1);
        suma1 = suma1 + i2;
    }
    int suma2 = 0;
    int a;
    for (a = czas_lokalny.tm_mon + 1; a > 0; a--)
    {
        i3 = liczeniemiesiecy(czas_lokalny.tm_mon + 1, czas_lokalny.tm_year + 1900);
        suma2 = suma2 + i3;
    }


    int suma3 = (suma + suma1 + suma2) - urdzien
        - (liczeniemiesiecy(czas_lokalny.tm_mon + 1, czas_lokalny.tm_year + 1900)
                    - czas_lokalny.tm_mday); // 7163

    printf("zyjesz : %d dni\n", suma3);

    return 0;
}
0

ktoś pomoże

1

Po co się męczysz? Skorzystaj ze standardowej biblioteki C.
http://www.cplusplus.com/reference/ctime/tm/
http://www.cplusplus.com/reference/ctime/mktime/
http://www.cplusplus.com/reference/ctime/localtime/
http://www.cplusplus.com/reference/ctime/difftime/

To załatwi kwestie specyficzne dla kalendarza, zostanie tylko przeliczanie sekund na liczbę dni.

0

ktoś wie jak to zrobić ???
za pomocą petli???

0

Najwłaściwszym zastosowaniem pętli tutaj byłoby narzucenie jej sobie na szyję…

Ale jak już naprawdę musisz, bo stoi nad Tobą prowadzący z przeładowanym pistoletem — zacznij dodawać dni do daty urodzenia tak długo, aż nie zrówna się ona z dzisiejszą datą, po czym zwróć liczbę takich operacji.

0

chociaż próbuje coś robić niepotrzebne jest to 1 zdanie
spróbuje zrobić tak

0

Możesz spróbować tak.

int urodzenieRok = 2001; int urMiesiac = 1; int urDzien =20;
int dzisiajRok =2016l int dMiesiac =12; inr dDzien=16;
int dni =0;
if(urodzenieRok !=dzisiajRok)
{
  dni += liczbaDniWRoku(urodzenieRok) - dzienWRoku(urodzenieRok ,urMiesiac ,urDzien );
  int rok = urodzenieRok+1;
  while(rok<dzisiajRok )
       {dni += liczbaDniWRoku();rok++};
 dni += dzienWRoku(dzisiajRok ,dMiesiac ,dDzien);
}
else 
{  dni =  dzienWRoku(dzisiajRok ,dMiesiac ,dDzien)-dzienWRoku(urodzenieRok ,urMiesiac ,urDzien );}
0

nie mam zadeklarowanej tej funkcji z 3 zmiennymi
dzienWRoku(dzisiajRok ,dMiesiac ,dDzien)

0
#include <stdio.h>
#include <conio.h>
void main()
{
 clrscr();
 int d1,m1,y1,d2,m2,y2,i,temp,sum=0,month[]={31,28,31,30,31,30,31,31,30,31,30,31};

  printf("Enter Date 1 : (DD-MM-YYYY) :");
 scanf("%d %d %d",&d1,&m1,&y1);

  printf("Enter Date 2 : (DD-MM-YYYY) :");
 scanf("%d %d %d",&d2,&m2,&y2);

  temp=d1;

  for(i=m1;i<m2+(y2-y1)*12;i++)
 {
  if(i>12)
  {
   i=1;
   y1++;
  }

   if(i==2)
  {
   if(y1%4==0 && (y1%100!=0 || y1%400==0))
    month[i-1]=29;
   else
    month[i-1]=28;
  }

   sum=sum+(month[i-1]-temp);
  temp=0;

   printf("Month = %d\t Days = %d\t Sum = %d\n",i,month[i-1],sum);

   if(i%12==0)
   getch();

  }

  sum=sum+d2-temp;

  printf("\n Total Number of Days are : %5d",sum);
 getch();
}
0

też nie działa już nie wiem