İçeriğe geç
ShiftDelete.Net
Haber ara/ SDN'ye SorGiriş
Haber Akışı SDNTV İnceleme Forum Yapay Zeka Akıllı Telefon Elektrikli Otomobil Oyun ShiftDelete.Net Global Teknoloji Haberleri Mobil Otomobil Donanım Savunma Bilim Sosyal Medya İnternet Giyilebilir Teknoloji Rehber Ürünler Son dakika Yazarlar
  1. Ana sayfa
  2. Topluluk
  3. Programlama
  4. Programlama Dilleri
Programlama Dilleri

tarih proğramdaki mantık

esma65026626.03.20174 cevap1.021 görüntüleme
2017'den beri2 mesaj
#1
C proğramlamda tarihi kullanıcıdan alan ve günü gösteren proğramın kodu aşagıdaki gibidir. Kırmızı renkle gösterilen kısımların mantığını açıklar mısınız?:-)

#include<stdio.h>
#include<conio.h>
#include<math.h>

int fm(int date, int month, int year) {
int fmonth, leap;

//leap function 1 for leap & 0 for non-leap
if ((year % 100 == 0) && (year % 400 != 0))
leap = 0;
else if (year % 4 == 0)
leap = 1;
else
leap = 0;

fmonth = 3 + (2 - leap) * ((month + 2) / (2 * month))
+ (5 * month + month / 9) / 2;

//bring it in range of 0 to 6
fmonth = fmonth % 7;

return fmonth;
}

//----------------------------------------------
int day_of_week(int date, int month, int year) {

int dayOfWeek;
int YY = year % 100;
int century = year / 100;

printf("\nDate: %d/%d/%d \n", date, month, year);

dayOfWeek = 1.25 * YY + fm(date, month, year) + date - 2 * (century % 4);

//remainder on division by 7
dayOfWeek = dayOfWeek % 7;


switch (dayOfWeek) {
case 0:
printf("weekday = Saturday");
break;
case 1:
printf("weekday = Sunday");
break;
case 2:
printf("weekday = Monday");
break;
case 3:
printf("weekday = Tuesday");
break;
case 4:
printf("weekday = Wednesday");
break;
case 5:
printf("weekday = Thursday");
break;
case 6:
printf("weekday = Friday");
break;
default:
printf("Incorrect data");
}
return 0;
}
//------------------------------------------
int main() {
int date, month, year;

printf("\nEnter the year ");
scanf("%d", &year);

printf("\nEnter the month ");
scanf("%d", &month);

printf("\nEnter the date ");
scanf("%d", &date);

day_of_week(date, month, year);

return 0;
}
Cevaplar
2015'den beri2.755 mesaj
#2
Altli ustlu bir tarih niye bu kadar zor:(
2009'den beri11 bin mesaj
#3
Leap artık yıl kavramı için kullanılmış. 2000 - 2004 -2008 - 2012 - 2016... 29 şubat barındırdığı için artık yıl olarak geçer.

Ama 1900 ve 1800 yıllarında 2000 yılındaki gibi artık yıl yoktur. Yani 1900, 1800, 1700'de artık yıl yoktur.

1600 yılında 29 şubat tarihi vardır yani artık yıldır ve 400'e bölümünden kalan 0 olduğu için leap değişkeni 1 olur ve yıl artık yıl kabul edilir.

Detay: Artık yıl - Vikipedi

1. 100'ün katı olan yıllardan sadece 400'e kalansız olarak bölünebilenler artık yıldır:
esma650266 Konuyu açan
2017'den beri2 mesaj
#4
arsenik dedi: ↑
Leap artık yıl kavramı için kullanılmış. 2000 - 2004 -2008 - 2012 - 2016... 29 şubat barındırdığı için artık yıl olarak geçer.

Ama 1900 ve 1800 yıllarında 2000 yılındaki gibi artık yıl yoktur. Yani 1900, 1800, 1700'de artık yıl yoktur.

1600 yılında 29 şubat tarihi vardır yani artık yıldır ve 400'e bölümünden kalan 0 olduğu için leap değişkeni 1 olur ve yıl artık yıl kabul edilir.

Detay: Artık yıl - Vikipedi

1. 100'ün katı olan yıllardan sadece 400'e kalansız olarak bölünebilenler artık yıldır:
2004 - 2008 gibi sayılar - 100 ün katı değil ve 400 e kalansız olarak bölünmediği için- 2000 sayısı 100'ün katı ve 400'e kalansız olarak bölündüğü için sonraki 4 yıl giderek mi artık yıl oluyor?
2009'den beri11 bin mesaj
#5
2004 - 2008 gibi sayılar - 100 ün katı değil ve 400 e kalansız olarak bölünmediği için- 2000 sayısı 100'ün katı ve 400'e kalansız olarak bölündüğü için sonraki 4 yıl giderek mi artık yıl oluyor?
Hayır.

4 yılda 1 artık gün olur bu günler 2004 - 2008 diye 2016 ya kadar geliyor. Ama 100 e bölünebilen yıllarda durum farklı. 2000 400'e tam bölünebildiği için artık yıl ama 1900 1800 öyle değil. 1600 de 400'e tam bölündüğü için artık yıl.

Cevabını yaz

Cevap yazmak için giriş yap ya da üye ol. Eski forum kullanıcı adın ve parolanla girebilirsin.