![]() |
|
|||||||
| Kayıt ol | Albümler | Bloglar | Yardım | Takvim | Gruplar | Etiketler | Arama | Bugünki Mesajlar | Bütün Forumları okunmuş kabul et |
|
|
![]() |
|
|
Konu Araçları | Stil |
|
|
#1 (permalink) | ||
|
Banlandı
![]() ![]() Üyelik tarihi: Kas 2007
Nerden: napıcan ziyaretemi geLcen!!
Mesajlar: 0
Konular: 2724
Üye No: 11416
Ruh halim:
Rep Gücü : 0
Rep Puanı : 0
Rep Seviyesi :
![]() |
İ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.
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 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;
}
|
||
|
|
|
![]() |
| Bu konunun kısa yolunu aşağıdaki sitelere ekleyebilirsiniz! |
| Konu Araçları | |
| Stil | |
|
|
Benzer Konular
|
||||
| Konu | Konuyu Başlatan | Forum | Cevaplar | son Mesaj |
| süper kasmayan virüsleri bulan ve silen antivirüs | empty34 | Programlar | 14 | 28-10-2008 22:03 |
| OPK HACKİ BULAN VARMI VARSA LİNKİ KOYABİLİRMİ | kamil50 | WarRock Hack | 0 | 22-06-2008 23:45 |
| Dinar Hack Bulan Varmı | NeverMore | WarRock | 3 | 09-06-2008 00:50 |
| Program Ekle/Kaldır da silinmeyen program isimleri nasıl silinir? | *MeLeK* | Bilgisayar | 1 | 14-02-2008 17:31 |
| Ad Ve Soyad İle Msn Adresİ Bulan Program !!!! | wanted | Msn, Icq, Yahoo Messenger | 4 | 07-03-2007 17:01 |