C dili hakkında bazı bilgiler

esiresir

New member
sadece C değil bazı bölümlerde C++ ve visuall de var, kendi notlarımdır. ( Başka bir formda da yazmıştım, burada hepsini bir başlık altında vermeye çalıştım, yapabildiğimin en iyisini paylaşıyorum, hatalarım varsa burada tartışabiliriz.)

KISIM 1:

bazı bilgiler vereyim;
C dili windowsun yazıldığı temel dillerden biridir. sadece C dili kullanılmaz, bazı yan dil dallarıda vardır, mesela; C, C++, C builder, C#, turbo C vs. bir çok program, yazılım ve sistemlerin taban dilini oluşturan bu dil günüzmüzde çok yaygın olarak kullanılmaktadır. bu diller uğraşan kişiler bu dilin bir derya olduğunu ve uğraşan kişilerin hayal güçlerini sonuna kadar zorlayacaklarını belirtmektedir. bütün universitelerde, mühendislik mimarlık fakültelerinde bu ders öğretilmektedir.
windowsun yazıldığı temel dillerden biri olduğunu belirtmiştim, ama sadece C dilleri kullanılmıyor, aynı zamanda Assembly dilide kullanılmaktadır. biraz dos bilginiz varsa bunu beraber test edebiliriz.

xp kullanıcıları başlat-programlar-donatılar-komut istemi
2000 işletim sistemi ve altı için direk dos u açabilirsiniz.

mesela windows işletim sisteminin ana direklerini oluşturan ve programış işleyişini sağlayan üç komut; autoexec.bat , command.com ve io.sys.

bunların içeriğini açtığımız dos penceresinde nasıl görebiliriz?

1- dos komut satırında kök dizine çıkmamız gerekebilir. (bazı komutlar direk olarak C sürücüsü altında çalışıyor olabilir) bunun için karşımıza çıkan ekranda eğer c:\windows\doumantes and settings> yazıyorsa, kök dizine çıkmak için cd\ komutunu yazıyoruz, ve karşımıza C:\> çıkıyor. şimdi C kök dizine çıktık.

2- içeriğini görmek istediğimiz dosyanın tam adını ve uzantısını bilmekte yarar var, mesela ben command.com u seçiyorum, siz çok değişik adda ve uzantıda dosyaları seçebilirsiniz.
c:\>type command.com (enter)
dedikten sonra bilgisayarın sihay ekranında hiç anlamadığımız çeşitli şekiller ve görüntüler çıktı ve sonunda kök dizine otomatik geri döndü. şimdi karşımıza çıkan bu garip şekiller sizce ne olabilir?(1) (xp kullanıcılarında göremeyebilrsiniz, dos eklentisi XP için ayrıca internette vardır.) bu karmaşık şekillere değineceğim, bu arada siz biraz düşünün. şimdi; masa üstünde yeni bir metin belgesi oluşturalım, içine istediğiniz bazı şeyleri yazın, ve kaydedip kapatın. şimdi dos a geri dönelim, ve ana kökte iken şu komutu kullanalım,
c:\> type belgeadı.txt (enter)
enterledikten sonra karşımıza bir hata raporu çıkacaktır? sizce neden? (2)
ŞİMDİ, daha önceden oluşturduğumuz metin belgesini C sürücüsünün içine direk olarak kopyalayın. ve aynı komutu deneyerek içeriğine bakalım,
c:\> type belgeadı.txt (enter)
içeriğine ne yazmışsanız, bu komuttan sonra görebilirsiniz.
gelelim cevaplara ;
1- başta anlaşılmayan garip simgeler, kodlanmış farklı bir dil yapısı olduğunu gösterir. bunu hemen anlayabiliriz, bu kodlanmış ggarip simgeler ASSEMBLY dilidir. ve kaynak kodları kapatılmıştır.
2- göremememizin nedeni ; biz belgemizi masa üstü platformuna açtık, yen işletim sistemlerinde içeriği istenen bir belgenin tam olarak yolu belirtilmelidir.

gelelim C dili ile olan bağlantılarına,
C dili de komlex bir bütünlük biçimidir. kolay öğrenilen bir dil değildir. ama Assembly dili gibi karma karşık simge ve komut guruplarından oluşmaz. bildiğimiz latin alfabesi üzerinde ingilizce dili bütünlemesi ile yazılmış bir taban dilidir. akıllara gelen bir soru : neden ingilizce; ingilizce dünyanın ana dili olarak kabul edilmiştir. evrensel kabul edilmiştir. bu yüzden ingilizce.

C dili bize ne sunar, bizden ne ister, biz neler yapabiliriz, nasıl başlayabiliriz?

C dili belli başlı komut ve kuramlardan oluşmuştur, bize sunduğu hayalimizde yapabileceğimiz bir programı yazmamızı sağlar. görsel nitelikler, oyunlar, resimler ve aklınıza gelen herşey. (burada küçük bir hatırlatma; lütfen type komutu ile bir resmin dos kapsamındaki içeriğine göz atın). tabiki basit olduğunu söyleyemeyiz. ama insan zekası herşeyin üstesinden gelebilecek kadar muazzam.
C dilinin bizden istediği tek şey, gerekli kurallar ve tanımlamaları ifade et, ve sana derlesin, çalıştırsın, hatalarını gör, problemlerini aktarsın, vs vs. sonuca ulaşmanıza yardımcı olacaktır.
C dili ile neler yapabiliriz? windows bu dil ile yazılmış denebilir demiştik, kendinize bir program yazabilirsiniz, nasıl olacağına sizin beyniniz karar versin.
C diline nasıl başlayabiliriz? bu dili öğrenmek basit değildir, ama anne karnında öğrenilmiyor, yapmak gereken bazı şeyler var, birincisi, elimize kitap alıp karıştırmak, (elimden geldiğince buradan yardımcı olacağım bende), ikincisi bir C dilini taşıyan program temin etmek (internetten bulabilirsiniz, boyutu yaklaşık olarak 400-600 mb civarı , tabiki yeni sürümleri), ve azimli olmak.
başladıktan sonra göreceksinizki ilerleme kaydedebiliyorsunuz, ve başlangıç için bayağı hızlı bilgiler ve uğraşımlar hemen sizi belirli kademelere taşıyacakır.

size önerebileceğim güzel bir kitap :
yayımcı: türkmen kitabevi
kitap adı : C ile programlama teknikleri
yazar galip özer
internetten sipariş veriliyormu bilmiyorum ama web adresini sizlere yazayım;
www.turkmenkitabevi.com

gelecek yazımda bu kitaptan ve kendi ders notlarımdan bilgileri paylaşacağım, buradan da takip edebilirisiniz.

CD temini için size yardımcı olabilirim ama kargo parasını siz ödersiniz. veya internetten indirebilirseniz arayın;
"microsoft visiually C 6.0" veya "mic. visually C++ 6.0" vsvs.
ilgilenenler benimle irtibata geçebilir.

KISIM 2:

C İLE İLGİLİ GENEL BİLGİLER:

C komutları main() ile başlar, bu main () en başa yazılacak anlamına gelmez; main() den önce yazılan değimler, tanımlardan ibarettir.

her blok, yani birden fazla komut, { ile başlar ve } ile biter.

main() için herzaman bir blok gereklidir.

klavyeden girilmeyen veya klavyeye basmadan, basılmış kabul edeceğimiz ve kontrol karakteri adını alan karakterler için "\" kullanılır. örneğin; satırbaşı enter tuşu ile gerçekleştirilir. enter tuşuna basmadan satırbaşı yapmak için ekran veya yazıcıya '\n' komutu (n: new line) gönderilebilir.

tüm C komutlarının kendine özgü yazılım kuralları vardır.

her C komutundan sonra ';' konur. (bildirge türünden olan deyimler hariç)

büyük harf ve küçük harf ayrımı önemlidir. CINS, Cins, cins kelimelerinin herbiri C için ayrıdır.

makina yorumu komutlarla olur. fakat bazen program yazan kişi ileride neyi nerde kullandığını hatırlaması için program komutları arasına küçük notlar iliştirebilir. makine bunları dikkate almaz. yorumun başı için '/*' sonu için ise '*/' işareti konur.

C nin kendi kelimeleri çok fazla değildir, şimdi C nin kelimelerini vereyim ( bu kelimler değiştirilemez, amacından farklı kullanılamaz)

kelime
türkçesi​
asm
assembly​
break
kesme​
case
durum​
cdecl
C tanımı​
char
karakter​
const
sabit​
enum
numaralı​
extern
dış, hariç​
far
uzak​
float
gerçek sayı​
for
için​
goto
git​
contunie
devam et​
default
kabul edilen​
do
yap​
double
çift​
else
aksi halde​
register
register, kayıt​
return
dönüş​
short
kısa​
if
eğer​
int
tamsayı​
long
uzun​
struct
yapı​
switch
dallanma​
void
boş​
while
...dıkça, ...dukça​

burada bazı gereksiz bilgiler vermek yerine, direk olarak konuya girelim;
bir programı yazmaya başladığımızda elimizdeki yazım dili programının içinde tanımlı olan bazı bilgiler vardır, bunları ayrıca program içinde tanıtmaya gerek yoktur. ayrıca bir programı yazmak için o programı alakadar eden kütüphane terimlerini yazmamız gerekir. ve programın içinde kullanıcı olarak yazdığımız kendi terimlerimizi makineye tanıtmamız ve ne işlem yaptıracağını atamamız gerekecektir.
kütüphane tanımlamasına örnek ;
#include <iosteram.h>
#include <studio.h> vs

yaptığımız tanımlamalara örnek;
mesela ESIR kelimesini bilgisayarın tanıması ve ona işlevseliik yüklememiz için ilk önce onu makineye okutturmamız gerekecektir. sonra işlevsellik yükleyebiliriz.

int sayi;
printf sayi;

KISIM 3:

en kısa program ;

amacımız C ve C ++ da yazılabilecek en küçük programı yazmaktır; nasıl yazarız? önceki bilgilermize dayanarak ;

/* kullanıcı için ilk C programı */
main()
{
printf ("merhaba kullanıcı \n");
}


bu programı C dilinde yazdıktan sonra derleme butonuna bastığımızda; programın çıktısı bize şu şekilde görünecektir:
---------------------------
merhaba kullanıcı
---------------------------

yorum:/* ifadesini belirttiğim gibi kullanıcının program içine yerleştirdiği küçük hatırlatmalar diyebiliriz. makine programı derlerken ve bize çıktıyı gösterirken bunu dikkate almaz.

main() olarak belirttiğimiz, programımızın başlangıç kısmını oluşturdu, açıklamasını önceki derse bakarak anlayabilirisiniz.

bildiğiniz gibi C dili hakkında bilgi verdiğim başta { işareti ve } işareti programın çalıştırılacağı kısımları içine alan bölgeyi gösterir. yani programa bunlarla başladık, ve programı bitirdik,
';' işareti tanımınıda yapmıştım. her yaptığımız şeyden sonra konulması mecburi olan işaretimiz. o komut satırını sonlandıran ve diğer komut satırından başlanılmasını gerektiren bir deyimdir.
printf komutu programın içine girdiğimiz bilgileri direkt olarak çıkış ekranına yazdıracaktır. ve görülmesini sağlayacaktır. (anlamıda zaten çıkışa yazdır)
'\n' ve ya 'endl' komutu aynı işlevi görür.
şimdi programımızı birde C++ da yazalım;

main()
{
cout <<"merhaba kullanıcı"<<endl;
}

programın çıktısı tabiki aynı olacaktır. yani C dili ile C++ dili arasında benzerlikler aşırı derecede görülmektedir. sadece bazı komutların adı farklıdır fakat işlevleri aynıdır. printf ve cout gibi.

şimdi biraz farklı bir örnek göstereyim;

/*verilen iki sayının toplamını aldırmak*/
int sayi1, sayi2, toplam;
/* verilen ilk iki sayı ve iki sayının toplamı için toplam kelimelerini tanıtıyorum, bunu int komutu ile yapıyorum*/
main()
{
printf ("ilk sayıyı giriniz: \n");
scanf ("&d", &sayi1); /*ekrandan girilen ilk sayıyı birinci sayı olarak kabul ecektir.*/
printf ("ikinci sayıyı giriniz: \n");
scanf ("&d", &sayi2); /*ekrandan girilen ikinci sayıyı ikinci sayı olarak kabul ecektir.*/
toplam=sayi1+sayi2; /*toplam yaptırıyoruz*/
printf ("bu iki sayının toplamı : %d ", toplam);
}

ve programımızı bitirdik;
şimdi burda kayda alınması gereken bazı bilgiler var, yani bazı tanımlamalar. bunlarıda gelecek derste anlatacağım.

bu işlemde yaptırdığımız şey; sayi1 sayi2 ve toplam olarak girdiğimiz değerleri makineye söyledik, şimdi makine bu int komutu sayesinde artık bunları tanıyor, ama bizim bunları birde nerede nasıl işlevsellik yaptıcağımızı girmemiz gerekir, bilgisayarın çıktısına bakılınca ilk sayıyı girin dediği yere girdiğimiz herhangi bir sayıyı tam sayı olarak kabul edecek ve scanf komutuyla girdiğimiz sayıyı otomatik olarak sayi1 tanımlamasına atayacaktır.
sonra bizden çıkış ekranında 2. sayıyı girmemizi isteyecek ve girilen 2. sayının ardından onuda sayi2 diye tabir ettiğimiz değere atamasını yapacaktır. sonra geriye kalan işlem sırasında sayi1 ve sayı2 nin toplamını alacak ve çıkış ekranına bu iki sayının toplamı şudur diyecektir. ve ardından herhangi bir tuşa bastığımızdada program kendini sonlandıracaktır.

KISIM 4:

bu bölümde size biraz yardımcı olsun diye bölme işlemini anlatacağım, umarım sizde çarpma işlemini gerçekleştirebilirsiniz. başaramazsanız yardım için nerede takıldığınızı yazabilirsiniz.
bu bölümde bölme işlemini anlatacağım:
----------------------------------
int bolunen,bolen,bolum,kalan,aracı;
main()
{
printf ("boluneni giriniz: ");
scanf ("%d", &bolunen);
git1: printf ("bolen giriniz :");
scanf ("%d", &bolen);
if (bolen==0) goto git1;
bolum=0;
git2: aracı=bolum*bolen;
kalan=bolunen-aracı;
if (kalan>=bolen)
{
bolum=bolum+1;
goto git2;
}
printf ("bulunan bölüm : %d\n", bolum);
printf ("bulunan kalan : %d\n",kalan);
}
-------------------------------------

programımız bu, burda yaptıklarımızı anlatayım, anlaşılmayan yerler sorulabilir. sorularınızı yazabilirsiniz.

int komutu ile işimize yarayacak olan terimleri veya deyimleri makineye tanıttık, yani biz bunları ileride kullanacağız, sen bunları tanı.
main() ile bolgemizin sınırlarını bir nebze belirlemil oluyoruz
printf komutu ile bolunen sayıyı girmek için çıkış ekranına bakıldığında, ilk girilecek (metindende anlaşıacağı gibi) sayıyı bolunen olarak int ile tanıttığımız bolunen deyimine atayacaktır. scanf ile bu durumu atadık, yani bolunen diye tanıttığımız karaktere bir işlevsellik atadık.

git1: program içinde , eğer bölünen hatalı bir sayı girilirse (mesela, bolunenden büyük veya sıfır girilirse) ileride goto komutunu kullanarak kısır döngüyü atlamış olacağız. yani belirlenen hedef sayıların dışında bir rakam girilmesi durumunda program otomatik olarak kendini başa alacak ve tekrar bolen i girmemizi isteyecektir. isteyen buraya "bolunen hatalı girildi" raporunu ekeyebilir. yani içerik işlevselliğini size bırakıyorum.
bolen girildikten sonra scanf ile girilen sayıyı int ile tanıttığımız bolen karakterine atayacaktır.
if komutunun turkce anlamından da anlaşılacağı gibi, eğer bölen =0 olursa git1 diye tanımlı aralığa gidecektir. ve işlemleri tekrarlayacaktır.
Burada dikkat edilmesi gereken bir husus vardır, bir sayının değerini atamak için (mesela bolen==0 gibi) onu iki defa eşittir ile kullanmamız gerekir. iki eşittir ile kullanılan terimin değeri otomatik olarak ona atanmıl olacaktır.
Daha sonra git2 tanımladık, neden? çünkü eğer kalan bölenden büyükse bu işlemi tekrar etmemiz gerekir, buradanda anşalılacağı gibi git2 yi eğer kalan bolenden büyükse işlemi tekrarı için if komutunu kullanarak gerçekleştiriyoruz.
yani ;
kalan>=bolen demek kalanın bolene eşit veya düyük olması durumunda devamlı bu işlemi tekrarla, yani tekrar bol anlamındadır.
daha sonradan açtığımız yeni işlemimiz olan;

{
bolum=bolum+1;
goto git2;
}

işlemi; atanan bolum değerinin kalan değerinden büyük olana kadar bu hem işlemin tekrarı, hemde programın bu işlemi yapması için ayrı bir işlem olarak tanımladık, dikkat ederseniz goto (yani git2 ye gitmek) git2 burada tanıma ve programa eklenmiştir.
daha sonra sonradan açtığımız bu küçük tanım programını başladığımız işaretin tersi ile kapatıyoruz ve asıl başlama işlemimize geri dönmüş oluyoruz, yan ilk başta tanımladığımız işlemi henüz kapatmadık; şimdi:

makinenin işlem sonunda bulduğu değerleri çıkışa yani kullanıcıya görsel olarak sunmamız gerekecek; bunu yapmak içinde şu komutları kullanmıştık;

printf ("bulunan bölüm : %d\n", bolum);
printf ("bulunan kalan : %d\n",kalan);

evet, burada printf komutu (yani çıkışa yazdır, veya ekrana yazdır) komutu ile bulunan kalan ve bölümü çıkşa yazdırmış olduk,
arada kullandığımız aracı diye belirrtiğimiz kelimenin program içindeki işlevselliğini umarım anladınız, aracı diye tanıttığız işlem adını programn içinden görerek ne işe yaradığını ve ne iş yaptığını anlayabilirsiniz, yani;
işlemin sağlamısı niteliğini yaptırdık, bolumle boleni çarparsak, ve kalanı eklersek boluneni veriyormu acaba? vermiyorsa programın içinde veya döngüsellikte bir hata yapmışız anlamına gelir. zaten yapılan hatalar, programın yazımından sonara bilgisayar derleme işlemini yaparken bizim yaptığımız veya makinenin anlamadığı, niteleminin eksik olduğu satır ve kısımları altta hata olarak belirtecektir.
yazdımız bu program çalışıyor, gersine güzel başka eklentiler eklemek size kalmış.

umarım anlaşılmıştır. hesap makinesi programını birde şimdi yazmayı deneyin.

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.
UYARI: anlaşılmayan yerler hakkında sorular sorabilirisiniz. elimizden geldiğince ve dilimizn döndüğünce anlatırız.

<<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!)

***elimden geldiği kadar yazmaya devam edeceğim. teşekkürler ilgilenenlere.

esir.
 

HTML

Üst