C dili hakkında genel bilgiler_2

Önceki başlık Sonraki başlık Aşağa gitmek

C dili hakkında genel bilgiler_2

Mesaj tarafından m@yny@ch Bir Ptsi 26 Şub. 2007, 6:14 pm

KISIM 5:

çarpım tablosu programını yazacağım; ama bilinen C dili ile değil, visually C ++ ile; (arkadaslar visual falan demiştik, bende harmanladım)

--------------------------------------
#include <iostream.h>
#include <stdlib.h>
#include <conio.h>
int main()
{
for (int i=1; i<11; i++)
{
for (int j=1; j<11; j++)
{
cout<<i*j<<'\t';
}
cout<<endl;
}
system ("pause");
return 0;
}

-------------------------------------------

evet programımız tam olarak bu şekilde.
şimdi özlü detayını anlatıyorum;

#include <iostream.h>
#include <stdlib.h>
#include <conio.h>
ile bahsedilen kısımlar bildiğiniz üzre kütüphaneler, neden 1 tane değilde 3 tane farklı kütüphane, şöyle düşünelim, bunların tamamı asıl kütüphaneyi oluşturur, ama hepsinin kategorisi farklıdır, basit düşünürsek; birisi matematik üzerine bölümlerin kitaplarını içerir, biri dil bilgisi kitaplarının bölümünü oluşturur, işte burda tanımlı olan kütüphanelerin görevleride aynen böyledir. eğer bu konuyla az çok alakalı iseniz zaten ne demek istediğimi anlamışsınızdır.
bildiğiniz gibi for döngüsü bizim işimizi daima kolaylaştırıcı etkiye sahiptir. nedenini sorarsak, biz for döngüsü yaptırmadan sayıların hepsini tanıtıp çarpma işlemini tanıtıp, sayıların çarpım vs gibi işlerinide kendimiz yapabilirdik. ama bu çok uzun sürerdi ve anlamsız birşey olurdu. for döngüsü bizim için belirlenen kısımların arasında istenilen değerlerin döngüsünü yapar.
burda for döngüsü de aynen böyle; şimdi teknik içerik açıklaması yapalım;

for (int i=1; i<11 ; i++)
gibi bir döngü yaptırdık, bu nedir? işte bu şudur;
for---> döngüyü yaptıran komut
int belirlenen bir değerin tanıtım komutu, neden kullandık? i diye bişeyden bahsettik, bunu baştada tanıtabilirdik, yani main kısmının altında, ama burda da tanıtımı aynı şeyi ifade ediyor. sonra i değerine 1 sayısını atadık (i=1) ve i değerinin 11 den küçük olduğunu belirttik, (i<11)
peki ( i ++ ) ne anlama geliyor? burda ben devreye girerek şunu açıklıyorum, i değerinin 1 ile 11 değeri arasındaki değerleri alacağını söylemiştik(1 dahil, 11 hariç) işte bu ( i ++) değeri, i=1 değerini 1 den itibaren al ve 11 den küçük hale gelinceye kadar 1 er olarak artır. 11 e gelince dur ve 11 değerini işe karıştırma.
işte bunun anlamı budur.

peki altta j li for döngüsüde yaptırdık, bu aynımı? ayrımı? tabiki aynı.
ama ! dikkat edilecek bir hususumuz var, nedir? dikkat ederseniz j li for döngüsünü i li for döngüsünün program katmanı arkasına koydum, yani bu şekilde i nin alacağı her bir değer için J değeri 1 ile 11 değeri arasında gidip geliyor, yani bize çarpma işlemini gerçekleşiriyor.
nasıl?
işte böyle;
i=1 için ---> j=1, j=2, j=3....... J=10
i*j diye değer atamasıda yapmıştık, işte size 1 ile çarpım. daha sonra i=2 değerini alacak ve yine J li for döngüsü baştan başlayıp 11 kadar gidip tamamlanacak, ve bu şekilde i= 3 değerini alacak.

mantık çok basitmiş değilmi?
umarım hesap makinası programını yazabilirsiniz.... artık tüyo kalmadı
kolay gelsin.

KISIM 6:

bu kısımda paranın kullanımı ve yatırımı hakkında küçük bir program yazacağım.
programa başlamadan önce bazı bilgiler yararlı olacaktır.
program yazımında bazen bir formül bilinmesi programın yazımına %100 etki edebilir, işte bunun örneğini bu programda göreceğiz, yani bir yandan program yazarken bir yandanda matematiğin kurallarını hatırlamış olacağız.

bildiğiniz gibi, lise yıllarından kalan yüzde faiz hesapları, veya benzer sorular hep karşımza çıkmıştır, bazen sıkılarak bazen içtenlikle çözmeye çalışmışızdır.

gelelim önbilgilerimize;
a = ana para (kapital yani)
f = senelik faiz oranı
t = toplam
n = süre (sene sayısı)
o = ödeme
d = dönem ( senelik için 1, aylık için 12, 3 aylık için 4 vs.
as = ay sayısı

şimdi gelelim bunlarla işimize, yani formüle;
1. sene sonunda toplam para :
t= a+fa= a(1+f)
2. sene sonunda toplam para:
t= a(1+f) + f(a(1+f)) = [a(1+f)] üzeri 2(karesi)

n sene sonra t=[a(1+f)] üzeri n olacaktır. [ birleşik faiz formülü]

kapital büyütme de ise (yani yatırım);
t=o(1+f)[(1+f)^n-1]/f formülünü elde edeceğiz.

borç ödeme de ise; (yani kredi);
genel formül = o= af/[1- (1+f)^(-n)]
ödeme sayısı döneme bağlı ise ;
o=[af/d]/[1-(1+f/d)^(-d*n) bulunur.

buraya kadar matematiğin formüllerini çıkardım( biraz zor oldu ama )
şimdi bunu C dilinde nasıl yazabiliriz, programa nasıl adapte ederiz;
işte bu şekilde;
t=o*(1+f7100)/(f/100)*(exp(n*log(1+f/100))-1) şeklinde olmalıdır. (hönghh ne matematik ama....)

not: exp = exponansiyel (yani e sayısı)

gelelim program yazımına ;

--------------------------------------------
#include <math.h>
float o,f,t,gec1;
int a,d,n;
main()
{
0=2000.0;
f=4.5;
n=18;
gec1=exp(n*log(1.0+f/100.0))-1;
t=o*(1.0+f/100.0)/(f/100.0)*gec1;
printf("t (18 - sene(216 ay)) = %c%6.2f\n",'$',t);
}
------------------------------------------------

ve programımızın yazımını tamamladık. tabiki ilk baştaki derslerde verdiğim bilgiler aynen geçerli. mesela $ işareti bir çeşit araçtır. ve burdaki görevine gelince bulunan değerler arasındaki ilişkiyi temsilen (parasal dedikya hani ) konulan ayrıca; yerine göre değişen bir program aracıdır.
%c bildiğiniz bir şey zaten, yüzdesini al demek,
%6.2f faizin ne kadar olduğunu temsil eder... vsvs.

teşekkürlerinizi beklerim, sırfyarım saat işlem yaptım bu yaşımda!!!!
hadi kolay gelsin.

KISIM 7:

bu derste seriler nasıl hesalanır, neye göre yapılır vs onu anlatacağım;
fazla detaya girmiyorum artık, zor oluyor; ilgilenenler artık ne demek istediğimi az çok anlıyorlardır;

şimdi epsilon nedir? bunu biliyormuyuz?
elbette biliyoruz; (bu simgeyi çıkarmak için office yükledim inanın!)

∑ x/i! buda nerden çıktı? ???...???
işte burdan;
matematikte bi seri hesaplarken sin(x), cos(x)den falan faydalanırmıyız? evet!
bu gibi fonksiyonlar bir serinin hesaplanması ile elde edilir.

∑ x/i! işte bu terimlerin hesaplanması ile e^x elde edilir.
bu hesap için ana terim dediğim x/i! ifadesinin yeteri kadar küçük alınması gerekir.(buna epsilon diyorum)
epsilon genelde 1.0E-9(1.0x10^(-9) olarak alınır. (matematikten bilinen birşey, ama lise matematiği değil! uni matematiği).
Üs (-9), gerçek sayının rakam sayısından 1 eksik olmalıdır. yani gerçek sayı 10 ise 9 olmalıdır.(bazen 2 eksik olabilir) (sebebi sonsuz döngü yapıyorsa 2 düşüğünü almak)

şimdi verilen bir x için e^x değerini bulalım, C ile ve normal yolla bulun, ve karşılaştırın bakalım.......
işte programı yazıyorum. sıkı durun.

---------------------------------------
#define EPS 1.0E-9
/* bu sabit tanım ona göre, dikkat edin ; koymadım!*/^
#define son 10
#include <math.h>
double usal(int y, int ussu)
{
if (usuu==0) return1.0;
else if (ussu>0) return y*usal(y, ussu-1);
else return 1/usal(y,-ussu);
}
double faktoriyel (int x)
{
if (x>1) return x*faktoriyel(x-1);
else return1.0;
}
double y(double x) /* ilk 10 terimin kullanımı*/
{
int i;
double terim,netice =1.0;
i=1;
while (i<son)
{
terim=usal(x,i)/faktoriyel(i);
netice=netice+terim;
i=i+1;
}
return netice;
}
double y1(double x)
{
int i;
double terim,netice=1.0;
i=1;
do
{
terim=usal(x,i)/faktoriyel(i);
netice=netice+terim;
i=i+1;
}
while (terim>EPS);
return netice;
}
main()
{
double x;
int n;
prinf ("x değerini girin: \n"); scanf ("%f",&x);
printf ("%f için, epsilon ile toplam = %f \n", x,y1(x));
printf ("%f için ilk 10 değer ile toplam = %f\n",x,y(x));
printf ("%f için C ile değer =%f\n", x, exp(x));
}
----------------------------------------------------------

of anam of, 3 kere uğraştım çalıştırmak için ama sonuçta başardım. tabi hatalar mahfediyor adamı, program çalışıyor! çalışmıyor demeyin pls!

NOTLAR:
1- ilk başta float kullanmıştım ama gördümki sayılarda taşmalar oluyor, onun için double kullandım! şimdi bana double ne diye sormayın!
2- x>2 den itibaren ilk 10 terimin toplamı yeterli olmadığından ötürü yine double kullandım!


şimdide C de kullanılan bazı matematik terimlerini vereyim sırası gelmişken;
fabs(x)
x in mutlak değeri
sqr(x)
x in karesi
sqrt(x)
x in karekökü
sin(x), cos(x)
trigonometrik fonksiyonlar
log(x)
tabii yani doğal logaritma
exp(x)
x in exponansiyeli, yani e nin x değeri
pow(x,y)
x üssü y

hepinize kolay gelsin!!!!!! teşekkür etmeyide unutmayın( çok kafa göz yardım ama , artık bi teşekkürü de edersiniz)

KISIM 8:

C ile başka neler yapabiliriz; 1 günlük uğraşın ardından paylaşabileceğim bir konuda programımı sizinle paylaşmak istiyorum.
programın içeriği ne?
telefon rehberi
isterseniz cep telefonunuza bile yükleyebilirsiniz ( ama cep tel.ine uygun bir derleyiciden geçirerk, hatta radyoya bile uygulayabilirisiniz, ama birkaç eklenti gerekiyor)

lafı uzatmadan telefon defterinin programını yazıyorum.

*--------------------------------
#define enbuyuk 100
int t,j;
char isim[enbuyuk] [20];
char soyad[enbuyuk] [20];
char telno[enbuyuk] [20];
void kayit()
{
char devam='e';
while (devam !='h')
{
printf ("\n");
printf (" isim giriniz.........:");
gets (isim [t]);
printf (" soyad giriniz.........:");
gets (soyad [t]);
printf ("telefon numarasını giriniz......:");
gets (telno [t]);
printf ("devam edecekmisiniz? (E/H)...? :");
devam=getch();
t=t+1;
}
j=t;
}
void duzeltme()
{
char devam='e';
char gec[1];
clrscr();
while (devam !='h')
{
printf ("\n");
printf (" düzeltilecek kayıt no girin....:");
t=atoi (gets(gec));
printf ("\n");
printf ("yeni isim giriniz.....:");
gets (isim [t]);
printf ("yeni soyad giriniz......:");
gets ( soyad [t]);
printf ("yeni tel no giriniz........:");
gets (telno [t]);
printf (" devam edecekmisiniz....? (E/H)...:");
devam=getch();
}
}
void silme()
{
char gec[1];
clrscr();
printf ("silinecek kayıt no giriniz.....:");
t=atoi (gets (gec));
if (t<j)
{
*isim[t] = '\0';
*soyad[t] = '\0';
*telno[t] = '\0';
}
}
void arama()
{
#include <string.h>
char ad[20];
char devam='e';
clrscr();
printf ("\n");
while (devam !='h')
{
t=0;
printf ("aranan ismi giriniz.........:");
gets (ad);
while (t<j)
{
if (strcpm (ad, isim[t])==0)
{
printf ("isim .......................: %s \n", isim[t]);
printf ("soyad.....................: %s \n", soyad[t]);
printf ("telno......................: %s \n", telno[t]);
t=j;
}
t=t+1;
}
printf(" başka arama yapacakmısınız... (E/H)...? ");
devam=getch();
}
}
void liste()
{
clrscr();
t=0;
while (t<j)
{
printf ("%-20s %-20s %-20s \n", isim[t], soyad[t], telno[t]);
t=t+1;
}
getch();
}
void menu()
{
char secim;
do
{
clrscr();
printf (" [1] - kayıt girme bölümü \n");
printf (" [2] - kayıt düzeltme bölümü \n");
printf (" [3] - kayıt silme bölümü \n");
printf (" [4] - kayıt ekleme bölümü \n");
printf (" [5] - kayıt arama bölümü \n");
printf (" [6] - kayıt listleri bölümü \n");
printf (" [7] - programdan çıkış \n");
printf ("\n");
printf (" yukarıdaki menüye göre seçiminizi girin....:");
secim=getch();
if (secim=='1') kayit();
if (secim=='2') duzeltme();
if (secim=='3') silme();
if (secim=='4')
{
t=j;
kayıt();
}
if (secim=='5') arama();
if (secim=='6') liste();
}
while (secim !='7');
}
main()
{
clrscr();
t=0;
menu();
}

-------------------------------------------------------

program bitti.......... hepinize kolay gelsin. anlaşılmayan yer varsa sorulabilir.
sorularınızı beklerim....

KISIM 9:

gün ay yıl ve benbzeri değerleri gösteren bir yazılım, fena değil, derleyiciden geçirerek program haline getirebilrsiniz.


----------------------------------------------------------
#include <iostream.h>

#include <stdlib.h> //exit fonksiyonu için

#include <conio.h>

class YilinGunu

{

public:

YilinGunu(int ayDegeri,int gunDegeri);

YilinGunu(int ayDegeri);

YilinGunu();

void goster();

void giris();

void ayarla(int yeniAyDegeri,int yeniGunDegeri);

// yeniAyDegeri ve yeniGunDegeri gecerli bir tarih degeri olusturmali

void ayarla(int yeniAyDegeri);

// 1<=yeniAyDeger<=12 olmalı

// gunDegeri otomatik olarak ayın ilk günü olacaktir

int ayDegeri();

int gunDegeri();

private:

int ay;

int gun;

int tarihTest();

};

main(){

YilinGunu tarih(21,22);//program gecersiz tarih degeri hatasi verecektir

YilinGunu tarih2(1,2),tarih3(3),tarih4;

//tarih4 nesnesini deklare ederken parantez kullanmadigimiz icin öntanimli

//(default) yapici cagirilacaktir

cout<<"tarih2nin degeri"<<endl;

tarih2.goster();

cout<<"tarih3un degeri"<<endl;

tarih3.goster();

cout<<"tarih4un degeri"<<endl;

tarih4.goster();

tarih4=YilinGunu::YilinGunu(5,6);//yapici acik olarak cagiriliyor

cout<<"tarih4'un simdiki degeri"<<endl;

tarih4.goster();

tarih3.ayarla(3,4);

cout<<"tarih3'un simdiki degeri"<<endl;

tarih3.goster();

tarih2.ayarla(4);

cout<<"tarih2'un simdiki degeri"<<endl;

tarih2.goster();

cout<<"Tarih degeri degistiriliyor:"<<endl;

tarih.giris();

cout<<"tarih degeri:"<<endl;

tarih.goster();

getch();

}

YilinGunu::YilinGunu(int ayDegeri,int gunDegeri)

:ay(ayDegeri),gun(gunDegeri)

{

tarihTest();

}

YilinGunu::YilinGunu(int ayDegeri)

:ay(ayDegeri),gun(1)

{

tarihTest();

}

YilinGunu::YilinGunu() // öntanimli(default) yapici

:ay(1),gun(1)

{

// bos kalacak

}

int YilinGunu::tarihTest()

{

if ((ay<1)|| (ay>12))

{

cout<<"Gecersiz ay degeri"<<endl;

return 0;

}

if((gun<1 )|| (gun> 31))

{

cout<<"Gecersiz gun degeri"<<endl;

return 0;

}

}

void YilinGunu::goster()

{

switch(ay)

{

case 1:

cout<<"Ocak ";break;

case 2:

cout<<"Subat ";break;

case 3:

cout<<"Mart ";break;

case 4:

cout<<"Nisan ";break;

case 5:

cout<<"Mayis ";break;

case 6:

cout<<"Haziran ";break;

case 7:

cout<<"Temmuz ";break;

case 8:

cout<<"Agustos ";break;

case 9:

cout<<" Eylul ";break;

case 10:

cout<<"Ekim ";break;

case 11:

cout<<"Kasim ";break;

case 12:

cout<<"Aralik ";break;

default:

cout<<" Hata "<<endl;

}

cout<<gun<<endl;

}

int YilinGunu::ayDegeri() {

return ay;

}

int YilinGunu::gunDegeri(){

return gun;

}

void YilinGunu::giris(){

cout<<"Ay'i sayi olarak giriniz:";

cin>>ay;

cout<<"Günü sayi olarak giriniz:";

cin>>gun;

if (( ay<1)|| (ay>12)|| (gun<1) ||(gun >31))

{

cout <<" Gecersiz tarih degeri,program kapanacak"<<endl;

exit(1);

}

}

void YilinGunu::ayarla(int yeniAyDegeri,int yeniGunDegeri) {

if ((yeniAyDegeri >=1)&& (yeniAyDegeri <=12))

ay=yeniAyDegeri;

else

{

cout<<"Gecersiz ay degeri"<<endl;

exit(1);

}

if((yeniGunDegeri>=1 )&& (yeniGunDegeri<= 31))

gun=yeniGunDegeri;

else

{

cout<<"Gecersiz gun degeri"<<endl;

exit(1);

}

}

void YilinGunu::ayarla(int yeniAyDegeri) {

if ((yeniAyDegeri >=1)&& (yeniAyDegeri <=12))

ay=yeniAyDegeri;

else

{

cout<<"Gecersiz ay degeri"<<endl;

exit(1);

}

gun=1;

}


NOT: bu program internette gezinirken gözüme çarptı, baktım fena değil, ayrıca C++ ile yazılmış, visuall içinde uygun bir program yazılımı, denedim çalışıyor, bende alıntı yaparak içerik için ekledim.


<<kısım 9 için>> programın alıntı yeri: www.picprogramlama.org (reklam olarak algılamayın, nerden aldığımı yazmam lazım- emeğe saygı için!)
avatar
m@yny@ch
baştacımız
baştacımız

Kadın Mesaj Sayısı : 52
Kayıt tarihi : 25/02/07

Kullanıcı profilini gör

Sayfa başına dön Aşağa gitmek

Önceki başlık Sonraki başlık Sayfa başına dön

- Similar topics

 
Bu forumun müsaadesi var:
Bu forumdaki mesajlara cevap veremezsiniz