iki tarih arasındaki zaman farkını saniye cinsinden yazan program(Standart C)

Başlatan gozdecenar, 19 Temmuz 2013, 20:16:54

gozdecenar

YTU kimya da okuyorum ve temel bilgisayar bilimleri dersi müfredatımız aslında matlab ancak matlab ı ilk alışımda kaldım. diger sene ders programı uymadığı için fizik bölümünden içeriği C programlama olan temel bilgisayar bilimleri dersini aldım ve gene kaldım.Malesefki bilgisayara hiç yeteneğim yok.Şu an yaz okulunda alıyorum bu dersi ve gene C programlama.Bu üçüncü alışım ve hala yapamıyorum :(ikinci vize yerine geçcek olan ,konuda yazan bu proje odevinde bana yardımcı olursanız çok sevinirim lütfen yardımlarınızı bekliyorum..

fatih6761

Hocam girdi-çıktıların nasıl olacağını da yazsayınız yardımcı olabilirdik...

teknikelektronikci

keske programin bir kisimini siz yazsaydinizda biz hatali ve eksik kisimlarini tamamlasaydik, öteki türlü size faydadan cok zararimiz olacak !
Ey Türk istikbalinin evlâdı! İşte, bu ahval ve şerâit içinde dahi, vazifen; Türk İstiklâl ve Cumhuriyetini kurtarmaktır! Muhtaç olduğun kudret, damarlarındaki asil kanda mevcuttur!


RaMu

Bu yazımı C öğrenemiyorum-anlamıyorum-yapamıyorum diyenlere atfediyorum.

2007 yılında bende C dersi aldım, ve bütünlemeye kaldım,
o zamanlarda mümkün değil ben bu işi yapamam diyordum,
elimi attığım hemen hemen herşeyi öğrenirdim,
ve son gece çalışıp ders geçen bir öğrenci tipiydim,
bütünlemede 12 ders verdiğimde oluyordu (yarısı 6 aydır yüzüne bakmadığım ilk dönemin dersleri)
ama ne hikmetse bu C de hiçbirşey yapamıyordum,
ve hayatım boyunca yapamayacağım-öğrenemeyeceğim yegane şey olduğuna karar vermiştim,
bütünleme için çıkmış soruları sayfalarca ezberledim, ne amelelik,
ve geçtim, hemde C hakkında hiçbirşey bilmediğim halde,
2009 da mikrodenetleyicilerle tanıştım,
asm ile pic programlamayı öğrendim,
dedim benim programlama dilim asm imiş,
bende programcı olabilirmişim,
ama halen C ile program yazabileceğime inanmıyordum,
yıl oldu 2012 asm ile kasıntı işler yapar oldum,
baktımki çoluk çocuk C ile 3 günde dağları deliyor,
acaba dedim, yoksa bende C öğrenevilir miyim?
birkaç ayda böyle geçti olurdu olmazdı derken,
C ile ilgili üniversite ders notları ve çeşitli kitapları derledim,
birazda yazılmış örnek,
sonra çok enteresan birşey oldu,
daha 2 gün geçmeden C ile program yazmaya başladım,
evet C biliyorum demek için 40 fırın ekmek yemek az gelir,
ama ünide ders olarak gösterilen ve sınavda sorulan konular için yeterli derecede C öğrenmek
sadece 1 hafta alır,
benim için öyle oldu,
ki ben bu işi başarabilecek son kişi olduğumu düşünüyordum.

Boşuna yapamam demeyin,
herhangibir dili konuşmayı-kullanmayı öğrenebilen birinin C dilinide öğrenmesi mümkünkür.
Hele bu kişi sayısal bir bölüm okuyorsa, öğrenememesi bence sadece psikolojik bir takıntıdan ibarettir. 
Sorularınıza hızlı cevap alın: http://www.picproje.org/index.php/topic,57135.0.html

speak48

hikayende anlatılıyor ama ben bi listeleyeyim
bir insanın neden c öğrenemediğini.
-bilgisayarın nasıl çalıştığını bilmiyordur.
-c yi bilen tarafından anlatılmamıştır kendisine "bi asistan birşeyler anlatıp geçmiştir"
-programlamaya ve bilgisayara gerekli önlemi verip yeterince çalışmamıştır.
bunların tersi nasıl öğrenilceğini anlatır.
ama bu insanlar yazılımcı olmayacağı için kimya vb diğer bilimler için önce matlab öğretilmelidir.
arif uğurlunun güzel bir kitabı vardır ilk ben onla öğrenmiştim.

gozdecenar

ya hocanın gosterdiği iki tane basit örnek ben bunu nasıl programlym bilemedim temel olarak tek bildiğim hep bunu yazarak işe başladığımz:/

#include<stdio.h>
int main (){
...

ayrıca fonksiyonları da bizim yazmamızı istiyor.en azından ne yapmam gerektiği konusunda yardımcı olablrsenz sevnrm

ahmets

Tarih deyince gün/ay/yıl olmalı. Önce iki tarih için bunları tek tek okutur birer değişkene atarsınız.
Bir günde 24 saat var gibi bu değişkenlerin saniye karşılıklarını bulup farkını alır ve sonuç olarak yazdırırsınız.
Tarih değerleri küçük olduğu için "int" tipi değişken kullanabilirsiniz ama saniyeye çevirince büyük sayılar çıkacak ve "double" tipi değişken kullanmanız gerekecek.
Ben sadece gün için nasıl olabileceğini göstereyim siz de ay ve yıl kısmını eklemeye çalışın.
#include<stdio.h>
int main (){
   int gun1, ay1, yil1, gun2, ay2, yil2;
   double zaman_farki;

   printf("Birinci tarih icin gun girin\n");
   scanf("%d", &gun1);
   printf("Ikinci tarih icin gun girin\n");
   scanf("%d", &gun2);
   zaman_farki = gun1 * 24.0 * 60 * 60 - gun2 * 24.0 * 60 * 60;
   printf("zaman farki = %.0f saniye\n", zaman_farki);
}

fatih6761

@ahmets hocama ek olarak gün hesaplama için Julian Date vb. kullanabilirsiniz. Standart time fonksiyonlarıyla direkt hesaplarsınız ama fonksiyonu kendiniz yazmanız gerektiğinden bu tarz formüllerden yararlanacaksınız.
Örnek kod:
#include <stdio.h>

typedef struct {
    int yil;
    int ay;
    int gun;
} Tarih;

/* Julian gün hesabı */
int getDays(Tarih *date) {
	int yil = date->yil;
	int ay = date->ay;
	int gun = date->gun;
    return
            (                                                               \
                gun                                                         \
                + ((153 * (ay + 12 * ((14 - ay) / 12) - 3) + 2) / 5)  \
                + (365 * (yil + 4800 - ((14 - ay) / 12)))               \
                + ((yil + 4800 - ((14 - ay) / 12)) / 4)                 \
                - ((yil + 4800 - ((14 - ay) / 12)) / 100)               \
                + ((yil + 4800 - ((14 - ay) / 12)) / 400)               \
                - 32045                                                     \
            );
}

int main() {
	int birinciGun, ikinciGun;
	int gunFarki;
	long int saniyeFarki;
	Tarih birinciTarih, ikinciTarih;

	printf("Birinci tarihe ait Yil'i girin :");
	scanf("%d", &(birinciTarih.yil));
	printf("\nBirinci tarihe ait Ay'i girin :");
	scanf("%d", &(birinciTarih.ay));
	printf("\nBirinci tarihe ait Gun'u girin :");
	scanf("%d", &(birinciTarih.gun));

	printf("\nIkinci tarihe ait Yil'i girin :");
	scanf("%d", &(ikinciTarih.yil));
	printf("\nIkinci tarihe ait Ay'i girin :");
	scanf("%d", &(ikinciTarih.ay));
	printf("\nIkinci tarihe ait Gun'u girin :");
	scanf("%d", &(ikinciTarih.gun));

	birinciGun = getDays(&birinciTarih);
	ikinciGun = getDays(&ikinciTarih);

	gunFarki = birinciGun - ikinciGun;
	gunFarki = (gunFarki >= 0) ? (gunFarki) : (-gunFarki);

	saniyeFarki = gunFarki * 24 * 60 * 60;

	printf("\nTarihler arasindaki fark : %lu \n", saniyeFarki);
}

Tabi bu yöntem normalde virgüllü tamsayı veriyor. Yani günün saat 12 den öncesi bir önceki gün + 0.5 oluyor. Julian date sistemi saat olayından dolayı gerçek zamandan farklı değerler verebiliyor. Ayrıca getDays fonksiyonunu double'a çevirmezseniz(komple) bir yıl 366 gün gibi olur. Buna dikkat edin. Sadece fikir vermesi açısından koydum... İyi çalışmalar...

teknikelektronikci

Ey Türk istikbalinin evlâdı! İşte, bu ahval ve şerâit içinde dahi, vazifen; Türk İstiklâl ve Cumhuriyetini kurtarmaktır! Muhtaç olduğun kudret, damarlarındaki asil kanda mevcuttur!

gozdecenar

#include<stdio.h>
int main (){
   int gun1, ay1, yil1, gun2, ay2, yil2;
   double zaman_farki;

   printf("Birinci tarih icin gun girin\n");
   scanf("%d", &gun1);
   printf("Ikinci tarih icin gun girin\n");
   scanf("%d", &gun2);
   zaman_farki = gun1 * 24.0 * 60 * 60 - gun2 * 24.0 * 60 * 60;
   printf("zaman farki = %.0f saniye\n", zaman_farki);
}

Printf("Birinci tarih icin ay girin\n");
Scanf("%d", &ay);
Printf("Ikinci tarih icin ay girin\n");
Scanf("%d",&ay2);
İf(ay1=4,6,9,11 & ay2=4,6,9,11){
Zaman_farki=ay1*30*24*60*60- ay2*30*24*60*60;
Printf("zaman farki=%0.f saniye\n",zaman_farki);
}else{
İf(ay1=1,3,5,7,8,10,12 & ay2=1,3,5,7,8,10,12){
Zaman_farki=ay1*31*24*60*60-ay2*31*24*60*60;
Printf("zaman farki=%0.f saniye\n",zaman_farki);
}
}else{
İf( ay1=1,3,5,7,8,10,12 & ay2=4,6,9,11){
Zaman_farki=ay1*31*24*60*60-ay2*30*24*60*60;
Printf("zaman farki=%0.f saniye\n",zaman_farki);
}
}
Yil1>yil2 ;
Printf("Birinci tarih icin yıl girin\n");
Scanf("%d", &yil1);
Printf("Ikinci tarih icin yıl girin\n");
Scanf("%d",&yil2);
Yil=yil1-yil2;
İf(yil1%4=0){
...


yazdıklarınıza bişeyler ekledim ama oldu mu emin değilim ve şu son kısmın devamını getiremedim:/birde gün,ay,yıl için ayri ayri zaman farki hesaplarken 3ü için de zaman_farki=...deyip işlem yaptırmam doğru mu?gun farkı, ay farkı, yıl farkı deyip üçü için saniye cinsinden sonuç bulup programlama sonunda 3ünü topla desem mi daha doğru olur?
birde hocamız fonksiyonların kalıbını
tür fonksiyon_adi(tür parametre1,tür parametre2,...){
fonksiyonun yapacağı işlemler..
return değer;
}
olarak göstermişti sizin yazdığınız şekilde de program çalışır dimi;

#include<stdio.h>
int main (){
   int gun1, ay1, yil1, gun2, ay2, yil2;
   double zaman_farki;

   printf("Birinci tarih icin gun girin\n");
   scanf("%d", &gun1);
   printf("Ikinci tarih icin gun girin\n");
   scanf("%d", &gun2);
   zaman_farki = gun1 * 24.0 * 60 * 60 - gun2 * 24.0 * 60 * 60;
   printf("zaman farki = %.0f saniye\n", zaman_farki);
}


şeklinde??????


fatih6761

Alıntı yapılan: teknikelektronikci - 23 Temmuz 2013, 13:17:27
arkadasa faydadan cok zararimiz oldu ;)
Hocam haklısınız ama bence çokta zorlamanın bir alemi yok. Belki öğrenmek istemiyordur, zorla yapıyordur...

ahmets

@gozdecenar
Kusura bakma ama durumun ümitsiz. Benim yazdıklarım senin başlaman için bir adım attırma çabasıydı. Küçük bir parçadan başlayıp ödevini öğrenerek yapman için seni yönlendirecektim.

Bir dönem C aldım dediğin için biraz temelinin olacağını düşünüyordum. Yazdıklarından anladığıma göre elinde bir C derleyici bile yok veya C programı nasıl çalıştırılır bilmiyorsun. Bu durumda sana ben yardım edemem.

fatih6761 istediğini yapan bir kod vermiş. Biraz değiştirip onu kullanabilirsin ama final sınavına girdiğinde ne olacak?

Hazır ödev arıyorsan bu forum yanlış adres ama öğrenmek istiyorsan benim tavsiyem önce bir C programı nasıl çalıştırılır öğren. Ders notlarını tekrar et ve bilgisayar üzerinde deneme programlar yazarak çalış.  Bu ödevini de küçük parçalara bölerek yapmaya çalış.
Mesela saniye işini düşünme. Artık yıl konusunu da en sona bırak.
Önce iki ay arasındaki gün sayısını bulan bir program yaz.
Programa 3 ve 5 girdiğinde 3. ve 5. ay arasında kaç gün var hesaplasın gibi.
Sonra gün ekle. 3. ayın 25i ve 7. ayın 23ü arasında kaç gün var gibi.
Bunları doğru çalıştırır hale getirince yıl ekle. En son artık yılı da dikkate alır, saniyeye çevirir ve input girilen tarihlerin doğruluğunu kontrol edersin.

Kolay gelsin.