Anasayfa c++/c gün farkini Iki tarih arasindaki gün farkini bulmak

Sunday 05th of September 2010

 
Iki tarih arasindaki gün farkini bulmak PDF Yazdır e-Posta
Kullanıcı Değerlendirmesi: / 0
ZayıfEn iyi 
ilyas tarafından yazıldı   
Pazartesi, 09 Mart 2009 20:47

Klavyeden gireceginiz iki tarih arasindaki günleri hesaplamak...

 

  • #include <stdio.h>
    #include <stdlib.h>
  • typedef enum {FALSE, TRUE} BOOL;
  • #define YEARBASE 1900
  • typedef struct DATE_{//structure tanimi.Bu bizim sanki bi sinifimiz varmis gibi düsünün ve içindeki elemanlari kolayca tanir
    int day;
    int month;
    int year;
    }DATE;
  • BOOL is_leap(int year);//return 0 veya 1 dir
    DATE *set_date(int day, int month, int year, DATE *date);
    void print_date(const DATE *date);
    long date_to_number(const DATE *date);
    int day_of_year(const DATE *date);
    long date_dif(const DATE *date1, const DATE *date2);
    BOOL is_valid(const DATE *date);
  • char *days[] = {"Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"};
    char *months[] = {"Jan", "Feb", "Mar", "Apr", "May", "Jun",
    "Jul","Aug", "Sep", "Oct", "Nov", "Dec"};
  • int daytab[] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};//aylarin içindeki günlerin sayisi
  • int main(void)
    {
    int day, month, year;
    DATE d1, d2;//DATE structure da tanimlanmisti d1 ilk girdigimiz tarihi tutuyor ,d2 ikinci girdigimiz tarihi tutuyor
  • for (;;) {
    printf("first date [day()gün ,month(ay) ,year(yil)]: ");
    scanf("%d%d%d", &day, &month, &year);
    set_date(day, month, year, &d1);//
    if (!is_valid(&d1))//tarih kaliba uygunmu kontroluü
    printf("invalid date!\n");
    else
    break;
    }
  • for (;;) {
    printf("second date [day()gün ,month(ay) ,year(yil)]: ");
    scanf("%d%d%d", &day, &month, &year);
    set_date(day, month, year, &d2);
    if (!is_valid(&d2))
    printf("invalid date!\n");
    else
    break;
    };
  • printf("toplam gün sayisi ");
    print_date(&d1);//
    printf(" ve");
    print_date(&d2);
    printf(": %d\n", date_dif(&d1, &d2));
    return 0;
    }
    /*************************************************/
    BOOL is_leap(int year)
    {
    return (year % 4 == 0 && year % 100 != 0 || year % 400 == 0);
    }
    /*************************************************/
    DATE *set_date(int day, int month, int year, DATE *date)//structure da gün ay ce yilin yerlerini belirliyoruz
    {
    date->day = day;//-> yerine nokta da kullanabliriz.örnek date.day=day;
    date->month = month;
    date->year = year;
    return date;
    }
  • /*************************************************/
    void print_date(const DATE *date)//ana fonksiyonda gönderdigimiz print date fonksiyonu
    {
    printf("%02d", date->day);
  • switch (date->day) {
    case 1: case 21: case 31:
    printf("st "); break;
    case 2: case 22:
    printf("nd "); break;
    case 3: case 23:
    printf("rd "); break;
    default :
    printf("th ");
    }
    printf("%s ", months[date->month - 1]);
    printf("%d ", date->year);
    printf("%s", days[(int)(date_to_number(date) % 7)]);
    }
    /*************************************************/
    long date_to_number(const DATE *date)
    {
    long result = 0;
    int year;
  • for (year = YEARBASE; year < date->year; year++)
    result += 365 + is_leap(year);
    result += day_of_year(date);
    return result;
    }
    /*************************************************/
    int day_of_year(const DATE *date)//ayin güne dönüsümünü yaptigi fonksiyon
    {
    int k;
    int result = date->day;
  • daytab[1] = 28 + is_leap(date->year);
  • for (k = 0; k < date->month - 1; ++k)
    result += daytab[k];
    return result;
    }
    /*************************************************/
    long date_dif(const DATE *date1, const DATE *date2)
    {
    return date_to_number(date1) - date_to_number(date2);
    }
    /*************************************************/
    BOOL is_valid(const DATE *date)//girdigimiz tarih kaliba uygunmu kontrol yeri
    {
    daytab[1] = 28 + is_leap(date->year);
  • if (date->year < YEARBASE)
    return FALSE;
    if (date->day > daytab[date->month - 1] || date->day <= 0)
    return FALSE;
    if (date->month < 1 || date->month > 12)
    return FALSE;
  • return TRUE;
    }
Son Güncelleme ( Pazartesi, 09 Mart 2009 20:52 )
 

HOŞGELDINIZ

Ne kadar küçük şeyler için ağlardık,
Bir tutam saç, bir oyuncak araba, bir bebek.
Şimdi büyüdük,
Çok büyük olaylar bile aglatamıyor bizleri
ölümler, iflaslar, sawaşlar..
Şimdi dahami qüçlüyüz
yoksa dahami alışkın.
Hayatı öğrenmek
alışmakmı acaba.

PC BAKIM

Istatistikler

Üyeler : 35
İçerik : 46
Web Bağlantıları : 6
İçerik Tıklama Görünümü : 24602

Anketler

Site Yorumu
 

Google Reklamları


Destekleyen Joomla!. Designed by: Joomla Template, WebSiteSource. Valid XHTML and CSS.