Anasayfa

C ve Sistem Programcıları Derneği

  • CSD Hakkında
    • Yönetim Kurulu
    • Referanslar
    • Üyelik
    • Adres
    • Kroki
    • İletişim
  • Kurslar
    • Kurs Başvurusu
    • Eğitmenler
  • Seminerler
    • Seminer İste
    • Seminer Ver
  • Kaynaklar
    • Yararlı Linkler
    • Kaynak Kod Arşivi
    • Makaleler
    • Çalışma Soruları
    • Yararlı Kitaplar
    • Dosya Arşivi
    • Döküman Arşivi
  • Duyurular
  • Haberler
  • İş İlanları
    • İş İlanı Gönder
  • SSS
  • Kurs Başvurusu

menü

  • CSD Hakkında
    • Yönetim Kurulu
    • Referanslar
    • Üyelik
    • Adres
    • Kroki
    • İletişim
  • Kurslar
    • Kurs Başvurusu
    • Eğitmenler
  • Seminerler
    • Seminer İste
    • Seminer Ver
  • Kaynaklar
    • Yararlı Linkler
    • Kaynak Kod Arşivi
    • Makaleler
    • Çalışma Soruları
    • Yararlı Kitaplar
    • Dosya Arşivi
    • Döküman Arşivi
  • Duyurular
  • Haberler
  • İş İlanları
    • İş İlanı Gönder
  • SSS
  • Kurs Başvurusu

e-posta ile bilgilendirme.

Derneğimizdeki etkinliklerden haberdar olun!

Haber mektubu üyeliğiniz

Kimler çevrimiçi

Şu an 0 kullanıcı ve 1 ziyaretçi çevrimiçi.
""
dreamhost
Anasayfa

İki Tarih Arasındaki Gün Farkını Bulan Program

26.03.2010 - 17:02 tarihinde nerg gönderdi

İki tarih arasındaki gün farkını bulmak için verilen bir tarihi, 01/01/1900 tarihinden itibaren geçen toplam gün sayısına çeviren bir yardımcı fonksiyon kullanılıyor.

Örnek ekran çıktısı: 

first date [day month year]: 20 12 2000
second date [day monty year]: 10 12 1973
total days between 20th Dec 2000 Wed and 10th Dec 1973 Mon: 9872

first date [day month year]: 01 01 1998
second date [day month year]: 01 12 1950
total days between 01st Jan 1998 Thu and 01st Dec 1950 Fri: 17198

Kaynak kod: 
#include <stdio.h>
#include <stdlib.h>
 
typedef enum {FALSE, TRUE} BOOL;
 
#define YEARBASE 1900
 
typedef struct DATE_{
   int day;
   int month;
   int year;
}DATE;
 
BOOL is_leap(int year);
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};
 
int main(void)
{
   int day, month, year;
   DATE d1, d2;
 
   for (;;) {
      printf("first date [day month year]: ");
      scanf("%d%d%d", &day, &month, &year);
      set_date(day, month, year, &d1);
      if (!is_valid(&d1))
         printf("invalid date!\n");
      else
         break;
   }
 
   for (;;) {
      printf("second date [day month year]: ");
      scanf("%d%d%d", &day, &month, &year);
      set_date(day, month, year, &d2);
      if (!is_valid(&d2))
         printf("invalid date!\n");
      else
         break;
   };
 
   printf("total days between ");
   print_date(&d1);
   printf(" and ");
   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)
{
   date->day = day;
   date->month = month;
   date->year = year;
   return date;
}
/*************************************************/
void print_date(const DATE *date)
{
   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)
{
   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)
{
   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;
}
  • Yazıcı uyumluYazıcı uyumlu
  • Arkadaşa gönderArkadaşa gönder
  • PDFPDF
Etiketler:
  • C

Adres: 2.Taşocağı Cd. Oğuz Sk. Barbaros Apt. No: 11/4 PK: 34387  Mecidiyeköy / İSTANBUL Tel: (212) 274 63 60  (212) 274 99 89  (212) 275 88 97  (212) 288 35 20 Fax: (212) 275 88 97 E-Posta: csystem@csystem.org

İçerik yayınları
Fervens Drupal theme by Leow Kah Thong. Designed by Design Disease and brought to you by Smashing Magazine.