SensiZOlmuyoR.org  
Geri git   SensiZOlmuyoR.org > Pc - Bilgisayar > Programlama > C ve C++
İhbar sistemini kullanmak istermisin?


En iyi Paylaşımınız Ney¿

Cevapla
 
Konu Araçları Stil
Eski 28-01-2008, 14:06   #1 (permalink)
Banlandı
 
*MeLeK* - ait Kullanıcı Resmi (Avatar)
 
Ü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 : *MeLeK* has a little shameless behaviour in the past


Standart C'de faktöriyel hesaplama


Kod:
#include <stdio.h>
#include <conio.h>


//Tarih: 20061027 Yazan: FoX_ / baron06 

int main()

{

double b,a,d,sayac;
b = 1;
sayac = 0;



printf("Hangi sayinin faktoriyelini hesaplamak istiyorsunuz?\n");
scanf("%lf", &d);



while(d < 0)
{
printf("Negatif sayinin faktoriyeli olmaz.Lutfen yeniden deneyin.\n");
scanf("%lf", &d);
}

a = d;



while(sayac < d)
{

b = b * a;
a = a - 1;
sayac = sayac + 1;
}



printf("\n%.0lf", b);

getch();

return 0;

}
Simdi programimizi adim adim inceleyelim:

Notrogramin basindaki #include <conio.h> kismini dev-c++ kullandigim icin yazdim.Microsoft kullananlarin bunu ve programin sonunda getch() yazmasina gerek yoktur.Diger derleyicilerde gerek var midir orasini bilemiyorum.

Oncelikle printf ve scanf islevlerinin calismasi icin programin tepesine #include <stdio.h> yaziyoruz ve degiskenlerimizi double turunde tanimliyoruz.Bunun nedeni daha fazla sayinin faktoriyelini hesaplayabilmek.Bu sayede 170! 'e kadar sayilarimizi hesaplayabiliriz.
b'nin ilk degerini 1 verdik cunku ilerideki while dongumuzde b = b*a oldugundan ilk degerinin 1 olmasi gerekiyor yoksa yanlis sonuc verir.İleriki aciklamamda neden 1 verdigimizi daha iyi anlayacaksiniz.

Sayacin degerine neden 0 verdigimize gelince ikinci while dongumuzde sayac < girilen sayi oldugundan girilen sayinin faktoriyelini hesaplamasi icin sayac degiskenine 0 verdik.Eger sayac degiskenine 2 verip 5 sayisinin faktoriyelini hesaplamak isteseydik eksik sayida carpma islemi yapilip sonuc yanlis cikardi.
Sonra kullanicidan hangi sayinin faktoriyelini hesaplamak istedigini sorup bunu d degiskeninde depoladik.Degiskenlerimizi double olarak tanimladigimiz icin de scanf("%lf", &d) yaptik.Eger degiskenlerimiz long olsaydi scanf("%ld", &d) yapacaktik.Bu arada "&" isaretini de unutmamaliyiz yoksa program calismaz.

Gelelim 1. while dongumuze.Burada girilen sayi 0'dan kucuk oldugu surece kullanicidan yeni deger istenmektedir.Bunun nedeni ise negatif sayilarinin faktoriyelinin olmamasidir.Kullanici negatif deger girdigi surece bu donguden cikamaz.

Sonra d degiskeninin degerini a degiskenine aktardik.Neden boyle yaptigimizi yazinin sonunda programin calismasini bir ornekle incelerken anlatacagim.

Simdi programimizi calistiralim.Simdi anlatacaklarimda son while dongusunun ne ise yaradigini da aciklayacagim.

Programi calistirmadan once bir kagit kalem alip degiskenleri ve ilk degerlerini not edin.Bu programa gore programin baslangicinda b degiskenimizin degeri 1 a ve d degiskenimizin degeri belirsiz ve sayac degiskenimizin degeri 0 'dir.

Program calisti ve kullanicidan bir deger girmesi istendi.Programci 4 sayisini girsin.Simdi d degiskenimizin degeri 3 oldu.Kullanici sayiyi 0'dan buyuk girdigi icin 1.while dongusune girmeden bir sonraki ifadeye geldi.Bu ifade de d degiskeninin degerini a degiskenine koymamizi soyluyor.O halde a degiskenimizin degeri de 3 oldu.Burada bir noktaya dikkatinizi cekmek istiyorum.Burada a = d demek d degiskeninin degerini a'ya koy demektir.Eger d = a yazsaydi belirsiz bir degiskenin degerini d'ye koy demek olacakti ve programimiz hatali sonuc verecekti.

Simdi duruma bir bakalim: b degiskeni 1, a degiskeni 4, d degiskeni 4 ve sayac degiskeni 0.Degiskemlerin yeni durumlarini kagit kalemle not alin.

Simdi 2. while dongumuze geldik.sayac degiskeni(0), d degiskeninden(3) kucuk oldugu icin donguye girdik.Birinci ifademiz b = b*a calistirildi ve b'nin yeni degeri, eski degeri * a oldu.Yani b = 1 * 3'den b = 3 oldu.İkinci ifadede a'nin yeni degeri, eski degeri - 1 oldu.Yani a = 3 -1 = 2 oldu.Sayac degiskeninin yeni degeri, eski degeri + 1 yani, sayac = 0 + 1 = 1 oldu.Bu arada d degiskeninin deger degismedi ve 3 olarak kaldi.

Tekrar basa donduk.sayac'in degeri(1) , d'den (3) kucuk oldugu icin donguye devam ettik ve adimlari tekrarladik.Yani b degiskenini degeri artik b'nin eski degeri * a'nin yeni degeri.Yani 3*2 = 6.a'nin degerini 1 eksilttik.Bu durumda a = 1 oldu.sayac degiskeni 1 artti ve 2 oldu.d degiskeni degismedi.

sayacin degeri(2) , d degiskeninden(3) kucuk oldugu icin donguye devam edildi ve adimlar tekrarlanarak b = 6.a yani 6.1 = 6 oldu.Sonra a degiskeni bir azalarak 0 oldu.sayac degiskeni 1 artarak 3 oldu ve d degiskeni 3 olarak kaldi.

Artik dongunun sonuna geldik cunku sayac degiskeni(3), d degiskeninden(3) kucuk degil.Bu sayede dongumuz sonlandi.
Simdi bir durum degerlendirmesi yapalim:b degiskenimizin degeri 6 oldu ki bu da 3! 'e esittir.a dgiskenimizin deger 0 oldu.sayac ve de degiskenlerimiz de 3 oldu.

Geldik en son adima:Bu adimda printf("\n%.0lf", b) seklinde bir ifade goruyoruz.
Bu ifadede yazilan "%.0lf" nin anlami hesapladigimiz sayida noktadan sonra hicbir basamaginin gosterilmemesini saglamaktir.Faktoriyel sonucu tamsayi cikacagindan 0.lf seklinde yazdik.Eger .2lf yazsaydik sayi 6.00 sekline gosterilecekti.Sonra da b'nin degerini bir satir atlayip ekrana yazdirdik sonra "return 0;" ifadesine geldi ve programimiz bitti.

Umarim programi aciklayici bir sekilde anlatabilmisimdir.Bu programin benim gibi yeni baslayanlara yardimi olacagini dusunuyorum.Eger alinti yapacaksak lutfen programin basindaki aciklama satirlarini silmeyelim
*MeLeK* isimli üyemiz çevrimdışıdır. (Offline)  
Bu Mesajı Google'a Ekle!Bu Mesajı FaceBook'da Paylaş!
Alıntı ile Cevapla
Cevapla

Bu konunun kısa yolunu aşağıdaki sitelere ekleyebilirsiniz!

Konu Araçları
Stil

Yetkileriniz
Konu Açma Yetkiniz Yok
Mesaj Yazma Yetkiniz Yok
Eklenti Yükleme Yetkiniz Yok
Mesajınızı Değiştirme Yetkiniz Yok

BB code is Açık
Smileler Açık
[IMG] Kodları Açık
HTML-KodlarıKapalı
Trackbacks are Kapalı
Pingbacks are Kapalı
Refbacks are Kapalı

Benzer Konular
Konu Konuyu Başlatan Forum Cevaplar son Mesaj
2008 ÖSS Puan Hesaplama Ghost Sınavlar ve Hazırlık - ÖSYM 1 07-04-2008 04:40
BİORİTM HESAPLAMA emay Sağlık 0 10-03-2008 11:26
C'de menülü Hesap programı WaMPiR_CaDı C ve C++ 0 07-02-2008 22:34
Takvim C'de WaMPiR_CaDı C ve C++ 0 07-02-2008 22:29
ÖSS PuAn HeSaPLaMa BoZKuRT Programlar 4 23-05-2007 22:05


Tüm Saatler GMT +3. Şuan Saat: 09:01 .
(Türkiye için GMT +2 seçilmelidir.)


Powered by vBulletin Version 3.7.4
Copyright ©2000 - 2008, Jelsoft Enterprises Ltd.
Search Engine Friendly URLs by vBSEO 3.2.0
www.SensiZOlmuyoR.org © 2007 - 2008


Bağış yapın

* Metin2 * Trendy Bayan *Sohbet * Bilgisonsuz