Üye Ol (Üye olduğunuzda tüm reklamlar gizlenecektir)
C Programlama Dili - Sayfa 2 - MekanBursa.com
MekanBursa.com  
Automatic Translations (Powered by Powered by Google):
Afrikaans Albanian Arabic Belarusian Bulgarian Catalan Chinese Croatian Czech Danish Dutch English Estonian Filipino Finnish French Galician German Greek Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Taiwanese Thai Turkish Ukrainian Vietnamese Welsh Yiddish

Geri git   MekanBursa.com > BiLGiSaYaR DüNYaSı > Programlama Dilleri > C / C++ / C#

Özel Arama

NasilYaparizNet-Mükemmel Yemek ve Pasta Tarifleri
C Programlama Dili Hakkında: C Programlama Dili konusu ile ilgili daha detaylı bilgiye, forumumuzun  Programlama Dilleri Katagorisinde ve  C / C++ / C# Bölümünde bulunanC Programlama Dili Konusunu MekanBursa.com Kalitesi İle Görüntülemektesiniz;Özet=>KELIME KATARI (STRING) NEDIR? Bir katar genellikle harflerden olusan karakterler dizisidir. Ciktinizin guzel ve manali gorunmesi icin icinde isimler ve adresler olabilmesi icin programlarinizin katarlar kullanmasi sarttir. C dilinde tam ...
Yeni Konu aç Cevapla
 
Share Seçenekler
Alt 07-09-2008   #6 (permalink)

Cevap: C Programlama Dili


KELIME KATARI (STRING) NEDIR?

Bir katarC Programlama Dili genellikle harflerden olusan karakterler dizisidir. Ciktinizin
guzel ve manali gorunmesi icinC Programlama Dili icinde isimler ve adresler olabilmesi
icinC Programlama Dili programlarinizin katarlar kullanmasi sarttir. C dilinde tam tanimiC Programlama Dili
*quot;char*quot; tipi bilgilerinC Programlama Dili NULL karakter (yani sifir) ile sonlandirilmasidir.

C bir katari karsilastiracagiC Programlama Dili kopyalayacagi yada ekrana yansitacagi
zamanC Programlama Dili bunlari gerceklestiren fonksiyonlarC Programlama Dili NULL gorunene dek bu islemi
yapmak uzere programlanmistir.

ARRAY (dizi) NEDIR?

diziC Programlama Dili ayni tip verilerin birbiri arkasina tanimlanmasidir. Kelime katariC Programlama Dili
bir cins dizidir.

CHRSTRG.C:
=================================================

main()
{
char isim[7]; /* Bir karakter dizisi tanimlayalim */

isim[0] = 'T';
isim[1] = 'u';
isim[2] = 'r';
isim[3] = 'g';
isim[4] = 'u';
isim[5] = 't';
isim[6] = 0; /* Bos karakter - katarin sonu */

printf(*quot;Isim %s dur. n*quot;C Programlama Diliisim);
printf(*quot;Icinden bir karakter: %cn*quot;C Programlama Diliisim[2]);
printf(*quot;Ismin bir parcasi: %s n*quot;C Programlama Dili*amp;isim[3]);
}

==================================================

Bu programdaC Programlama Dili ilk onceC Programlama Dili *quot;char*quot; tipi bir tanimlama goruyoruz. Koseli
parantezler icindeC Programlama Dili kac hanelik bir dizi tanimlanacagini belirtiyoruz. C
dilinde butun diziler sifirdan basladigi icinC Programlama Dili bu tanimlama ile
kullanabilecegimiz en yuksek index degeri 6 dir.

KATAR NASIL KULLANILIR

Demek kiC Programlama Dili *quot;isim*quot; degiskeniC Programlama Dili icinde 7 tane karakter tutabilir. Fakat en son
karakterin sifir olmasi zorunlugu oldugu icinC Programlama Dili kullanilabilecek olan alan
6 karakterliktir. Bu katarin icine manali birsey yuklemek icinC Programlama Dili yedi tane
komut veriyoruz - her biriC Programlama Dili katara bir karakter atamaktadir. En sonunda
daC Programlama Dili katarin sonunu belirten sifir rakamini koyuyoruz. (Bir *quot;#define*quot; ile
NULL karakteriC Programlama Dili programin basinda sifir olarak tanimlayabiliriz.)

printf komutundaki %s isaretiC Programlama Dili printf'e *quot;isim*quot; isimli katardanC Programlama Dili sifira
rastlayincaya kadar ekrana yazmasini belirtir. Dikkat etmeniz gereken bir
noktaC Programlama Dili *quot;isim*quot; degiskeninin indexinin yazilmasinin gerekmedigidir.

KATARIN BIR KISMININ YAZILMASI

Ikinci printf komutu ise %c ileC Programlama Dili katarin icinden sadece bir karakter
(harf) yazilmasini gosterir. Istedigimiz karakterin index numarasini daC Programlama Dili
*quot;isim*quot; degiskeninin yaninaC Programlama Dili koseli parantezler arasinda gosterebiliriz.

Son printf komutunda iseC Programlama Dili katarin 4. karakterinden itibaren yazmanin bir
ornegidir. *quot;isim*quot; degiskeninin onundeki *amp; (ampersand) isaretiC Programlama Dili isim[3]'un
hafizada saklandigi adresin printf'e gecirilmesini belirtir. Adresleri 8.
konuda gorecegizC Programlama Dili fakat ufak bir ornek ile size bizleri nelerin
bekledigini gostermek istedim.

BAZI KATAR FONKSIYONLARI

KATAR.C
================================================

main()
{
char isim1[12]C Programlama Diliisim2[12]C Programlama Dilikarisik[25];
char baslik[20];

strcpy(isim1C Programlama Dili*quot;Rosalinda*quot;);
strcpy(isim2C Programlama Dili*quot;Zeke*quot;);
strcpy(baslikC Programlama Dili*quot;Bu bir basliktir.*quot;);

printf(*quot; %snn*quot;C Programlama Dilibaslik);
printf(*quot;isim 1: %s n*quot;C Programlama Diliisim1);
printf(*quot;isim 2: %s n*quot;C Programlama Diliisim2);

if(strcmp(isim1C Programlama Diliisim2)*gt;0) /* sayet isim1 *gt; isim2 iseC Programlama Dili 1 dondurur */
strcpy(karisikC Programlama Diliisim1);
else
strcpy(karisikC Programlama Diliisim2);

printf(*quot;Alfabetik olarak en buyuk isim %s dir.n*quot;C Programlama Dilikarisik);

strcpy(karisikC Programlama Diliisim1);
strcat(karisikC Programlama Dili*quot; *quot;);
strcat(karisikC Programlama Diliisim2);
printf(*quot;Iki isim birden %sn*quot;C Programlama Dilikarisik);
}
=================================================
Ilk once 4 tane katar tanimliyoruz. Daha sonraC Programlama Dili *quot;strcpy*quot; isimli cok pratik
bir fonksiyona geliyoruz. Yaptigi isC Programlama Dili bir katariC Programlama Dili bir digerineC Programlama Dili ta ki
sifir bulunana kadar kopyalamak. Hangi katarin hangisine kopyalancagini
hatirlamak icinC Programlama Dili bir atama komutunu dusunun (*quot;x=23*quot; gibi). VeriC Programlama Dili
sagdakindenC Programlama Dili soldakine kopyalanir. Bu komutun yapilmasindan sonraC Programlama Dili isim1
in icindeC Programlama Dili *quot;Rosalinda*quot; olacaktir - den-densiz olarak. Den-denlerC Programlama Dili
derleyicinin sizin bir katar tanimladiginizi anlamasi icin gereklidir.

KATARLARIN ALFABETIK OLARAK SIRAYA KONMASI

Ilginizi cekebilecek diger bir fonksiyondaC Programlama Dili *quot;strcmp*quot; dur. Sayet kendisine
gecirilen birinci katar ikinciden daha buyukseC Programlama Dili 1 dondururC Programlama Dili ayni ise 0C Programlama Dili ve
ikinci daha buyukse -1 dondurur. *quot;Zeke*quot; katarinin kazanmasiC Programlama Dili sizi herhalde
sasirtmaz. Burada katarin boyu onemli degildirC Programlama Dili sadece icindeki
karakterler. Ayrica harflerin buyuk yada kucuk harf olmasi da fark
ettirir. C de bir katarin butun harflerini kucuk yada buyuge ceviren
fonksiyonlar da vardir. Bunlari daha ileri kullanacagiz.

KATARLARI BIRBIRINE EKLEMEK

En son satirdaC Programlama Dili *quot;strcat*quot; isimli yeni bir fonksiyon goreceksiniz. GoreviC Programlama Dili
bir katarin sonuna diger katari eklemektir. Bunu yaparken NULL karakterin
de yerli yerinde olmasini saglar. BuradaC Programlama Dili *quot;isim1*quot;C Programlama Dili *quot;karisik*quot; 'a
kopyalanirC Programlama Dili daha sonra *quot;karisik*quot; a iki bosluk ve *quot;isim2*quot; eklenir.

Katarlar zor degildirC Programlama Dili ve son derece faydalidirlar. Onlari kullanmayi
iyice ogrenmenizde fayda vardir.


BIR TAMSAYI DIZISI

INTDIZIN.C:
================================================
main()
{
int degerler[12];
int index;

for (index = 0;index *lt; 12;index++)
degerler[index] = 2 * (index + 4);

for (index = 0;index *lt; 12;index++)
printf(*quot;Index = %2d deki degeri %3d dir..n*quot;C Programlama DiliindexC Programlama Dilidegerler[index]);

}
===============================================

Bu programdaC Programlama Dili bir tamsayi dizisi tanimliyoruz. Gordugunuz gibiC Programlama Dili ayni katar
tanimlama gibi.. Bu sayedeC Programlama Dili index degiskeni haric oniki tane degiskenimiz
oluyor. Bu degiskenlerin isimleri *quot;degerler[0]*quot; C Programlama Dili *quot;degerler[1]*quot; C Programlama Dilivs. dir.
Ilk *quot;for*quot; dongusundeC Programlama Dili bunlara deger atiyoruzC Programlama Dili ikincisi iseC Programlama Dili index
degiskeni ve *quot;degerler*quot; dizisinin icindekileri ekrana yaziyor.

BIR KAYAR NOKTA DIZINI

BUYUKDIZ.C:
=================================================
char isim1[] = *quot;Birinci Program basligi*quot;;

main()
{
int index;
int ivir[12];
float tuhaf[12];
static char isim2[] = *quot;Ikinci Program Basligi*quot;;

for (index = 0;index *lt; 12;index++) {
ivir[index] = index + 10;
tuhaf[index] = 12.0 * (index + 7);
}

printf(*quot;%sn*quot;C Programlama Diliisim1);
printf(*quot;%snn*quot;C Programlama Diliisim2);
for (index = 0;index *lt; 12;index++)
printf(*quot;%5d %5d %10.3fn*quot;C Programlama DiliindexC Programlama Diliivir[index]C Programlama Dilituhaf[index]);
}
================================================

BuradaC Programlama Dili *quot;float*quot; olarak tanimli bir kayar nokta dizisi goruyorsunuz.
Ayrica bu programC Programlama Dili katarlara nasil baslangic degeri atanabilecegini
gosteriyor. Koseli parantezlerin icini bos birakarakC Programlama Dili derleyicinin o
veriyi saklamak icin yeteri kadar yer ayarlamasini sagladik. Programin
icindeC Programlama Dili bir katar daha ilk degerini veriyoruz. Burada onune *quot;static*quot;
koymak zorunlugumuz var. Baska yeni birsey yok bu programda. Degiskenler
rastgele degerlere atanirC Programlama Dili ve sonra da bu degerler ekrana yazdirilir.


Arthur isimli Üye şimdilik offline konumundadır   Alıntı ile Cevapla
Alt 07-09-2008   #7 (permalink)

Cevap: C Programlama Dili

POINTER VE ARITMETIK

Her cesit islemlerC Programlama Dili pointer'lar ile mumkun degildir. Pointer bir adres
oldugundanC Programlama Dili ona bir sabit rakam ekleyipC Programlama Dili daha ilerideki bir adrese
erismek mumkundur. Ayni sekildeC Programlama Dili pointer'in adresinde bir rakam cikartipC Programlama Dili
daha onceki hafiza bolgelerine erismek mumkundur. Iki pointer'i toplamak
pek mantikli degildirC Programlama Dili cunku bilgisayardaki adresler sabit degildir.
Cikacak rakamin tuhaf olacagi icin pointer ile carpma da yapilamaz. Ne
yaptiginizi dusunursenizC Programlama Dili yapabilecekleriniz ve yapamayacaklariniz kendini
belli edecektir.

TAMSAYI POINTER'I

*quot;list*quot; isimli tamsayi dizisineC Programlama Dili 100 den 199 a kadar degerler verilir. Daha
sonraC Programlama Dili 28. elemanin adresiniC Programlama Dili *quot;pt*quot; isimli pointer'a atiyoruz. Daha sonra
ekrana yazdigimizdaC Programlama Dili gercektendeC Programlama Dili o degeri aldigini goruyoruz.

Daha onceki konulardaC Programlama Dili bir fonksiyondan veri degerlerini dondurmek icin
iki metod oldugunu soylemistim. IlkiC Programlama Dili bir dizi kullanarakti. Ikincisini
herhalde tahmin edersiniz. Sayet tahmininiz *quot;pointer sayesinde*quot; idiyseC Programlama Dili
tebrikler.

CIFTYON.C:
================================================== ==
main()
{
int cevizlerC Programlama Dilielmalar;

cevizler = 100;
elmalar = 101;
printf(*quot;Baslangic degerleri %d %dn*quot;C Programlama DilicevizlerC Programlama Dilielmalar);

/* *quot;degistir*quot; i cagirincaC Programlama Dili */
degistir(cevizlerC Programlama Dili*amp;elmalar); /* cevizlerin DEGERI veC Programlama Dili */
/* elmalarin adresini geciriyoruz */

printf(*quot;Bitis degerleri iseC Programlama Dili %d %d dir..n*quot;C Programlama DilicevizlerC Programlama Dilielmalar);
}

degistir(kuru_yemisC Programlama Dilimeyvalar) /* kuru_yemis tamsayidir */
int kuru_yemisC Programlama Dili*meyvalar; /* meyvalar bir tamsayi pointer'idir */
{
printf(*quot;Degerler %d %dn*quot;C Programlama Dilikuru_yemisC Programlama Dili*meyvalar);
kuru_yemis = 135;
*meyvalar = 172;
printf(*quot;Sonraki degerler %d %dn*quot;C Programlama Dilikuru_yemisC Programlama Dili*meyvalar);
}
=================================================
BuradaC Programlama Dili iki tane tamsayi degiskeni (pointer degil) tanimliyoruz:
*quot;cevizler*quot; ve *quot;elmalar*quot;. Once bunlara birer deger atiyoruzC Programlama Dili ve *quot;degistir*quot;
isimli fonksiyonu cagiriyoruz. CagirirkenC Programlama Dili *quot;cevizler*quot; in degeri (100)C Programlama Dili ve
*quot;elmalar*quot; degiskeninin adresini geciriyoruz. FakatC Programlama Dili fonksiyona daC Programlama Dili bir
deger ve bir adres gelecegini haber vermemiz gereklidir. Bunun icinC Programlama Dili
fonksiyonun parametreleri tanimlanirkenC Programlama Dili bir adres tasiyacak olan sembolun
basina bir yildiz koymamiz yeterlidir.


Fonksiyonun icindeC Programlama Dili bu iki degeri degistiripC Programlama Dili eski ve yeni degerleri
ekrana yaziyoruz. Bu program calistigindaC Programlama Dili ana programdaki *quot;cevizler*quot; in
degerinin ayni kaldigini fakat *quot;elmalar*quot; in yeni degerlerini aldigini
goreceksiniz.

*quot;cevizler*quot; in degerinin ayni kalmasinin nedeniC Programlama Dili fonksiyona bir
deger gecirildigindeC Programlama Dili C dilinin o degerin bir kopyasini fonksiyona
gecirmesi yuzundendir. Programa geri dondugunuzdeC Programlama Dili degerin bir kopyasini
kullandigimiz icin asil degerin degismedigini goreceksiniz.

*quot;elmalar*quot; in degerinin degismesi iseC Programlama Dili yine fonksiyona *quot;elmalar*quot;
degiskeninin adresinin bir kopyasi gecirildigi haldeC Programlama Dili bu adres ana
programdaki *quot;elmalar*quot; a karsilik geldigi icinC Programlama Dili fonksiyonda bu adresteki
degeri degistirir degistirmezC Programlama Dili *quot;elmalar*quot; in da degeri degismis olur.

ODEV

1. Bir karakter katari tanimlayinC Programlama Dili ve icine *quot;strcpy*quot; ile bilgi koyun. Bir
dongu ve pointer ile katari harf-harf (teker teker) ekrana yazin.
Programin basinda pointer'i katarin ilk elemanina atayinC Programlama Dili daha sonra cift
arti isareti ile pointer'in degerini arttirin. Ayri bir tamsayi degiskeni
ile kac karakter yazilacagini kontrol edin..

2. 1. deki programiC Programlama Dili pointeri katarin sonuna atayipC Programlama Dili cift eksi isaretini
kullanarak sondan basa dogru yazmasi icin degistiriniz.



c++ dersleri 8.bölüm

C Dili - 9. Konu

Standart Input/Output

BASITIO.C:
=================================================
#include *lt;stdio.h*gt; /* input/output icin standard header */

main()
{
char c;

printf(*quot;Herhangi bir tusa basin. X = Programi durdurur. n*quot;);

do {
c = getchar(); /* klavyeden bir tus okuyalim */
putchar(c); /* ekranda gosterelim. */
} while (c != 'X'); /* ta ki okunan bir X oluncaya dek... */

printf(*quot;nProgramin sonu.n*quot;);
}
================================================

Standart I/O deyimiC Programlama Dili verinin girildigi ve ciktigi en normal yerleriC Programlama Dili
klavyeyi ve ekrani kast eder. Bu kutuge ilk baktiginizdaC Programlama Dili *quot;#include
*lt;stdio.h*gt;*quot; komutunu goreceksiniz. Bu komut on-derleyiciyeC Programlama Dili kucuktur ve
buyuktur isaretleri arasinda yer alan kutuk isminin programa eklenmesini
soyler. BazenC Programlama Dili *lt; *gt; isaretleri yerine den-den *quot; *quot; isaretleri de
gorebilirsiniz. Aralarindaki farkC Programlama Dili *lt;*gt; isaretlerinin on-derleyiciyeC Programlama Dili su
anda calistiginiz diskte / dizinde degil deC Programlama Dili bu tip kutuklerin konuldugu
yerde aramasini bildirir. Halbuki den-den isaretleri ile belirlenmis bir
kutuk ismiC Programlama Dili sizin su anda bulundugunuz disk / dizinde aranir. GenellikleC Programlama Dili
*quot;bu tip kutuklerin konuldugu yer*quot;C Programlama Dili derleyiciye daha onceden belirtilir.
OrneginC Programlama Dili Quick C derleyicisindeC Programlama Dili derleyiciye girmeden once:
SET INCLUDE=C:INCLUDE
yazmakC Programlama Dili derleyicinin bundan sonra butun 'include' edilecekC Programlama Dili yani eklenecek
kutuklerin C: diskinin INCLUDE dizininde aranmasini belirtir.

Sonu .h ile biten kutuklerinC Programlama Dili ozel bir fonksiyonu vardir. Bunlara header
yada baslik kutukleri denir. Genellikle iclerindeC Programlama Dili bazi fonksiyonlari
kullanmak icin gereken tanimlamalar yer alir. Bu kullandigimiz *quot;stdio.h*quot;
kutugu iseC Programlama Dili bir suru *quot;#define*quot; komutundan olusur.

C DE INPUT/OUTPUT ISLEMLERI

C dilinde lisanin bir parcasi olarak tanimlanmis input/output komutlari
yokturC Programlama Dili bu nedenle bu fonksiyonlarin kullanici tarafindan yazilmasi
gereklidir. Her C kullanan kisiC Programlama Dili kendi input/output komutlarini yazmak
istemedigindenC Programlama Dili derleyici yazarlari bu konuda calisma yapmislarC Programlama Dili ve bize
bir suru input/output fonksiyonlari saglamislardir. Bu fonksiyonlar
standart hale gelmislerdirC Programlama Dili ve hemen her C derleyicisinde ayni
input/output komutlarini bulabilirsiniz. C nin lisan tanimiC Programlama Dili Kernigan ve
Richie tarafindan yazilmis bir kitaptirC Programlama Dili ve onlar bu gorecegimiz
input/output fonksiyonlari bu kitaba katmislardir.

Bu *quot;stdio.h*quot; isimli kutugu incelemenizde fayda vardir. Icinde bircok
anlamadiginiz nokta olacaktirC Programlama Dili fakat bazi kisimlar tanidik olacaktir.

DIGER INCLUDE KUTUKLERI

C de buyuk programlar yazmaya basladiginizdaC Programlama Dili programlari ufak parcalara
ayirip ayri ayri derlemek isteyebilirsiniz. Bu degisik parcalarin ortak
kisimlarini tek bir kutukte toplayipC Programlama Dili bir degisiklik gerektiginde sadece o
ortak kutukten yapmayi isteyebilirsiniz (ornegin global degisken
tanimlari.) Bu gibi durumlarda *quot;#include*quot; kutukleri cok faydali olacaktir.

*quot;BASITIO*quot; YA GERI DONELIM

*quot;c*quot; isimli degisken tanimlanirC Programlama Dili ve ekrana mesaj yazilir. Daha sonraC Programlama Dili
kendimizi *quot;c*quot;C Programlama Dili buyuk harf X e esit olmadigi surece devam eden bir dongunun
icinde buluyoruz. Bu programdaki iki yeni fonksiyonC Programlama Dili su an icin ilgi
noktamiz. Bunlar klavyeden bir tus okumakC Programlama Dili ve ekrana bir karakter yazmayi
saglarlar.

*quot;getchar()*quot; isimli fonksiyonC Programlama Dili klavyeden okudugu tusu dondururC Programlama Dili bu deger
*quot;c*quot; ye atanir. *quot;putchar()*quot; fonksiyonu iseC Programlama Dili bu degeri ekrana yansitir.

Bu programi derleyip calistirdiginizdaC Programlama Dili bir surpriz ile karsilasacaksiniz.
Klavyeden yazdiginizdaC Programlama Dili ekrana herseyin iyi bir sekilde yansitildigini
goreceksiniz. RETURN tusuna bastiginizda iseC Programlama Dili butun satirin tekrar ekrana
yazildigini goreceksiniz. Her karakteri teker teker ekrana getirmesini
soyledigimiz haldeC Programlama Dili programimiz sanki butun satiri sakliyor gibi.

DOS BIZE YARDIMCI OLUYOR (YADA ISE KARISIYOR)

Bu durumu anlayabilmek icinC Programlama Dili DOS un nasil calistigini anlamamiz
gereklidir. Klavyeden tuslar DOS kontrolu ile okundugu zamanC Programlama Dili RETURN tusu
basilana dekC Programlama Dili basilan tuslar bir sahada saklanir. RETURN basilinca daC Programlama Dili
butun satir programa dondurulur. Tuslara basilirkenC Programlama Dili karakterler ekrana da
yansitilir. Bu duruma da *quot;eko*quot; ismi verilir.

Simdi anlatilanlari goz onunde bulundurarakC Programlama Dili programimiz calisirken ekrana
eko edilenlerinC Programlama Dili DOS tarafindan yapildigini anlayabilirsiniz. Siz RETURN e
basinca daC Programlama Dili bu saklanan tuslarC Programlama Dili programa gonderilir. Bunu daha iyi anlamak
icinC Programlama Dili icinde buyuk harf X olan bir satir yazin. DOSC Programlama Dili buyuk X in ozel bir
tus oldugundan habersizC Programlama Dili siz RETURN e basana kadar tuslari kabul etmeye
devam eder. RETURN e basinca iseC Programlama Dili bu katar programa gecirilirC Programlama Dili ve program
X e rastlayincaya kadar ekrana karakterleri birer birer yazar.

Isletim sisteminin bu tuhafliklari karsisinda yilmayin. Bazi
programlarinizdaC Programlama Dili bu ozellik isinize yarayabilir. Fakat simdi bizC Programlama Dili az once
yazdigimiz programinC Programlama Dili dusundugumuz gibi calismasini saglayalim.

TEKIO.C:
=================================================

#include *lt;stdio.h*gt;

main()
{
char c;

printf(*quot;Herhangi bir tusa basin. X = Programi durdurur. n*quot;);

do {
c = getch(); /* bir tus oku */
putchar(c); /* basilan tusu goster */
} while (c != 'X'); /* ta ki c == 'X' olana dek */

printf(*quot;nProgramin sonu.n*quot;);
}
=================================================

Bu programdaki yegane degisiklik olan yeni fonksiyon *quot;getch()*quot;C Programlama Dili yine
klavyeden tek bir karakter okur. FarkiC Programlama Dili *quot;getchar*quot; gibi DOS'a
takilmamasidir. Bir karakter okurC Programlama Dili ve ekrana yansitmadan bu tusu programa
dondurur.

Bu programi calistirdiginizdaC Programlama Dili bir oncekindeki gibi tekrarlanan satirlar
olmadigini goreceksiniz. Ayrica program artik 'X' e basar basmaz
durmaktadir. Burada baska bir problemimiz var. RETURN'e basinca cursorC Programlama Dili
ekranin soluna gitmektedirC Programlama Dili ama bir alt satira inmemektedir.

SATIR ATLAMAMIZ LAZIM

Cogu uygulama programi siz RETURN e basincaC Programlama Dili program o RETURN e ek olarak
bir de *quot;Line Feed*quot; yani satir atlama karakteri ilave eder. Satir atlama
otomatik olarak yapilmaz. Bundan sonraki programdaC Programlama Dili bu sorunu da halletmis
olacagiz.

IYIIO.C:
================================================
#include *quot;stdio.h*quot;
#define CR 13 /* CR sembolunu 13 olarak tanimlar */
#define LF 10 /* LF sembolunu 10 olarak tanimlar */

main()
{
char c;

printf(*quot;Tuslara basin. Durmak icin X e basin.n*quot;);

do {
c = getch(); /* Bir karakter oku */
putchar(c); /* basilan tusu ekrana yaz */
if (c == CR) putchar(LF); /* sayet basilan RETURN tusu iseC Programlama Dili
bir SATIR ATLAMA karakteri yolla */
} while (c != 'X');

printf(*quot;nProgramin sonu.n*quot;);
}
================================================
Programin ilk basinda CR 'nin artik 13 e esit oldugunu ve LF nin de 10
oldugunu belirtiyoruz. Sayet ASCII tablosundan bakarsanizC Programlama Dili RETURN tusuna
karsilik gelen kodun 13 oldugunu gorursunuz. Ayni tablodaC Programlama Dili satir atlama
kodu da 10 dur.

Ekrana basilan tusu yazdiktan sonraC Programlama Dili sayet bu tus RETURN tusu iseC Programlama Dili bir
satir atlayabilmemiz icinC Programlama Dili satir atlama kodunu ekrana yaziyoruz.

Programin basindaki *quot;#define*quot; lar yerine *quot;if (c == 13) putchar(10);*quot;
diyebilirdikC Programlama Dili fakat ne yapmak istedigimiz pek belirgin olmazdi.


Arthur isimli Üye şimdilik offline konumundadır   Alıntı ile Cevapla
Alt 07-09-2008   #8 (permalink)

Cevap: C Programlama Dili

HANGI METOD DAHA IYI?

Burada ekrandan bir harf okumanin iki yolunu inceledik. Her ikisinin de
avantajlari ve dezavantajlari var. Bunlara bir bakalim.

Ilk metoddaC Programlama Dili butun isi DOS ustlenmektedir. Programimiz baska islerle
ugrasirkenC Programlama Dili DOS bizim icin satiri hazirlayabilirC Programlama Dili ve RETURN'e basilinca bu
satiri programa dondurebilir. FakatC Programlama Dili bu metodda karakterleri basildiklari
anda fark etmemiz imkansizdir.

Ikinci metoddaC Programlama Dili tuslari teker teker fark etmemiz mumkundur. FakatC Programlama Dili
program bu okuma sirasinda butun zamanini okumaya harcar ve baska bir is
yapamazC Programlama Dili ve bilgisayarin tum zamanini bu isle almis oluruz.

Hangi metodun uzerinde calistiginiz program icin daha uygun oldugunu
programci olarak siz karar vereceksiniz.

BuradaC Programlama Dili *quot;getch()*quot; fonksiyonun tersi olan *quot;ungetch()*quot; isimli bir fonksiyon
daha oldugunu da belirtmeliyim. Sayet bir karakteri *quot;getch()*quot; le okuduktan
sonra fazla okudugunuzu fark edersenizC Programlama Dili bu fonksiyon ile okunan tusu geri
koyabilirsiniz. Bu bazi programlarin yazilimini kolaylastirmaktadir cunku
bir tusu istemediginizi onu okuyuncaya kadar bilemezsiniz. Sadece bir tek
tusu *quot;ungetch*quot; edebilirsinizC Programlama Dili fakat genellikle bu yeterlidir.

BIRAZ TAMSAYI OKUYALIM

TAMOKU.C:
=================================================
#include *lt;stdio.h*gt;

main()
{
int deger;

printf(*quot;0 ila 32767 arasinda bir rakam yazinC Programlama Dili durmak icin 100 girin.n*quot;);

do {
scanf(*quot;%d*quot;C Programlama Dili°er); /* bir tamsayi oku (adresi ile) */
printf(*quot;Okunan deger %d idi. n*quot;C Programlama Dilideger);
} while (deger != 100);

printf(*quot;Programin sonun*quot;);
}
===============================================

Alistigimiz tip bir program olan TAMOKU'daC Programlama Dili *quot;scanf*quot; isimli yeni bir
fonksiyon goruyoruz. Cok kullandigimiz *quot;printf*quot; fonksiyonuna cok benzeyen
bu fonksiyonun goreviC Programlama Dili istenilen tip verileri okuyupC Programlama Dili degiskenlere atamak.

*quot;printf*quot; den en buyuk farkiC Programlama Dili *quot;scanf*quot; in degisken degerleri yerineC Programlama Dili
adreslerini kullanmasidir. Hatirlayacaginiz gibiC Programlama Dili bir fonksiyonun
parametrelerinin degerlerini degistirebilmesi icinC Programlama Dili degiskenin adresine
ihtiyaci vardir. *quot;scanf*quot; fonksiyonuna adres yerine deger gecirmekC Programlama Dili C
dilinde en SIK rastlanan hatalardan biridir.

*quot;scanf*quot; fonksiyonuC Programlama Dili girilen satiriC Programlama Dili satirdaki bosluklara bakmadanC Programlama Dili ve bu
sekilde kullanildigindaC Programlama Dili rakam olmayan bir karakter bulana kadar bir
tamsayi okur.

Sayet 32766 den buyuk bir rakam girersenizC Programlama Dili programin hata yaptigini
gorursunuz. Ornegin 65536 girersenizC Programlama Dili programin 0 degerini dondurdugunu
gorursunuz. Buna sebepC Programlama Dili tamsayilarin hafizada saklanisinda onlara 16
bitlik bir saha ayrilmasindandir. Programinizda daha buyuk rakamlar
kullanacaksanizC Programlama Dili 'long' yada 'float' tiplerini secebilirsiniz.

KARAKTER KATARI GIRISI

KATARIN.C:
================================================
#include *lt;stdio.h*gt;

main()
{
char big[25];

printf(*quot;Karakter katari girinC Programlama Dili en fazla 25 karakter.n*quot;);
printf(*quot;Birinci kolonda X yazarak programi bitirin.n*quot;);

do {
scanf(*quot;%s*quot;C Programlama Dilibig);
printf(*quot;Yazdiginiz katar -*gt; %sn*quot;C Programlama Dilibig);
} while (big[0] != 'X');

printf(*quot;Programin sonu.n*quot;);
}
==================================================

Bu program bir oncekine cok benzerC Programlama Dili fakat bu sefer bir kelime katari
giriyoruz. 25 elemanli bir dizi tanimlanmistirC Programlama Dili fakat en son deger bir '0'
olmasi gerektigindenC Programlama Dili kullanilabilen kisimi 24 dur. *quot;scanf*quot; deki
degiskenin onune *amp; ampersand isareti gerekmez cunkuC Programlama Dili koseli parantezleri
olmayan bir dizi degiskeniC Programlama Dili C dilinde o dizinin baslangicini gosteren
bir adrestir.

CalistiginizdaC Programlama Dili sizi bir supriz bekliyor. Yazdiginiz cumleyiC Programlama Dili program ayri
satirlarda gosterir. Bunun sebebiC Programlama Dili *quot;scanf*quot; bir katar okurkenC Programlama Dili satirin
sonuna yada bir bosluga rastlayincaya kadar okumasina devam eder. Bir
dongu icinde oldugumuzdanC Programlama Dili program tekrar tekrar *quot;scanf*quot; i cagirarakC Programlama Dili
DOS'un giris sahasinda kalan butun karakterleri okur. Cumleleri kelimelere
boldugundenC Programlama Dili X ile baslayan herhangi bir kelimeye rastlayincaC Programlama Dili bu program
durur.

24 karakterden daha fazlasini girmeye calisin. Ne olduguna bakin. Size bir
hata mesaji verebilirC Programlama Dili yada programiniz aleti kilitleyebilir. Gercek bir
programdaC Programlama Dili boyle seylerin sorumlulugu sizlerin omuzlarinizdadir. C dilinde
yazdiginiza size cok sey duserC Programlama Dili fakat ayni zamanda bircok kolaylik da
saglar.

C DE INPUT/OUTPUT PROGRAMLAMA

C dili cok miktarda input/output yapan programlar icin degil deC Programlama Dili bir
bircok icsel islemler yapan sistem programlari icin yazilmistir.
Klavye'den bilgi alma rutinleri cok kullanislidirC Programlama Dili fakat C size az
yardimci olur. YaniC Programlama Dili yapmaniz gereken I/O islemlerinde sorun cikmasini
onlemek icin detaylarla sizin ugrasmaniz lazimdir. Fakat genellikle
herhangi bir program icin bu tip fonksiyonlari bir defa tanimlamaniz
yeterlidir.

HAFIZADA.C:
=================================================
main()
{
int rakam[5]C Programlama Dili sonuc[5]C Programlama Dili index;
char satir[80];

rakam[0] = 5;
rakam[1] = 10;
rakam[2] = 15;
rakam[3] = 20;
rakam[4] = 25;

sprintf(satirC Programlama Dili*quot;%d %d %d %d %dn*quot;C Programlama Dilirakam[0]C Programlama Dilirakam[1]C Programlama Dili
rakam[2]C Programlama Dilirakam[3]C Programlama Dilirakam[4]);

printf(*quot;%s*quot;C Programlama Dilisatir);

sscanf(satirC Programlama Dili*quot;%d %d %d %d %d*quot;C Programlama Dili*amp;sonuc[4]C Programlama Dili*amp;sonuc[3]C Programlama Dili
(sonuc+2)C Programlama Dili(sonuc+1)C Programlama Dilisonuc);


for (index = 0;index *lt; 5;index++)
printf(*quot;Sonuc %d dir. n*quot;C Programlama Dilisonuc[index]);

}
=================================================

Bu programdaC Programlama Dili birkac tane degisken tanimliyoruzC Programlama Dili ve *quot;rakamlar*quot; isimli
diziye deC Programlama Dili *quot;sprintf*quot; fonksiyonunu incelemek icin rastgele sayilar
atiyoruz. Bu fonksiyonC Programlama Dili *quot;printf*quot; e cok benzer. Yegane farkiC Programlama Dili ciktisini
ekrana yazmak yerineC Programlama Dili bir karakter dizisine yazmasidir. Bunu daC Programlama Dili ilk
parametresi olarak veriyoruz. Yani program bu fonksiyondan dondukten
sonraC Programlama Dili *quot;satir*quot; dizisinin icindeC Programlama Dili bes tane rakam olacaktir. Ikinci ile
ucuncu rakamlar arasindaki boslukC Programlama Dili *quot;sscanf*quot; fonksiyonunun bunlarin
uzerinden atlamasini gormek icindir.

Bunun altinda *quot;printf*quot; i kullanarak bu hazirladigimiz satiri yaziyoruz.
Daha sonra gordugunuzC Programlama Dili *quot;sscanf*quot; fonksiyonu iseC Programlama Dili *quot;scanf*quot; gibi ekrandan
okumak yerineC Programlama Dili bizim *quot;satir*quot; dizimizden degerleri okur. Gordugunuz gibiC Programlama Dili
*quot;sscanf*quot; e rakamlarin konacagi dizinin adreslerini cok degisik sekillerde
verebiliyoruz. Ilk ikisiC Programlama Dili sadece dizideki 5. ve 4. elemanlarin adreslerini
index vererek tanimliyorlarC Programlama Dili sonraki ikisi iseC Programlama Dili dizinin baslangic adresine
bir offset (bir rakam) ekleyerek buluyorlar. Sonuncusu iseC Programlama Dili koseli
parantezi olmayan bir dizininC Programlama Dili o dizinin baslangic elemaninin adresini
gosterecegindenC Programlama Dili hicbir sey gerektirmiyor.

BazenC Programlama Dili bir programin ciktilariniC Programlama Dili standart ciktidan (ekrandan)C Programlama Dili bir baska
kutuge yoneltmek istenir. FakatC Programlama Dili hata mesajlarini gibi bazi mesajlari hala
ekrana yollamak isteyebilirsiniz:

OZEL.C:
=================================================
#include *lt;stdio.h*gt;

main()
{
int index;

for (index = 0;index *lt; 6;index++) {
printf(*quot;Bu satirC Programlama Dili standart ciktiya gidiyor.n*quot;);
fprintf(stderrC Programlama Dili*quot;Bu satir ise standart hataya gidiyor.n*quot;);
}

exit(4); /* Bu komutC Programlama Dili DOS 'un ERRORLEVEL komutu ile bir batch file'da
(yigit kutugunde) kontrol edilebilir. Bu programin
d*#8221;nd£rd£g£ degerC Programlama Dili soyle kontrol edilebilir:

A*gt; COPY CON: DENE.BAT *lt;RETURN*gt;

OZEL
IF ERRORLEVEL 4 GOTO DORT
(Dortten kucukseC Programlama Dili buraya devam eder..)
.
.
GOTO BITTI
ORT
(dort yada buyukseC Programlama Dili buraya devam eder)
.
.
:BITTI

*lt;F6*gt; *lt;RETURN*gt;

*/
}
==================================================

Bu programC Programlama Dili bir donguC Programlama Dili ve icinde iki satirdan olusur. Bu satirlardan bir
tanesi standart ciktiyaC Programlama Dili bir tanesi de standart hataya gider. Burada
gordugunuz *quot;fprintf*quot; komutuC Programlama Dili *quot;printf*quot; e cok benzerC Programlama Dili fakat ciktinin nereye
gidecegini de belirtmenizi saglar. Bu alanda bir sonraki konuda daha uzun
duracagiz.

Program calisincaC Programlama Dili ekranda on iki tane satir goreceksiniz. Sayet bu
programi:

A*gt; OZEL *gt; CIKTI

seklinde calistirirsanizC Programlama Dili ekranda sadece alti tane standart hataya giden
mesajlari goreceksiniz. Geri kalan (standart ciktiya giden) alti tanesi
iseC Programlama Dili *quot;cikti*quot; isimli kutukte yer alacaktir.

YA exit(4) KOMUTU ?

Bu programdaki en son satir olan *quot;exit(4)*quot; komutuC Programlama Dili programi sona erdirirC Programlama Dili
ve dort degerini DOS a dondurur. Parantezlerin arasinda 0 ila 9 degerleri
kullanilabilir. Sayet bir *quot;batch*quot; (yigit) kutugu icinde bu programi
calistiriyorsanizC Programlama Dili bu degeri ERRORLEVEL komutu ile kontrol edebilirsiniz.

ODEV

1. Bir dongu icinde bir harf okuyun ve ekrana bu harfi normal *quot;char*quot;
tipinde gosterin. Bu harfi bir rakam olarak da gosterin. Programi
durdurmak icinC Programlama Dili dolar sembolunu bekleyin. *quot;getch*quot; fonksiyonunu kullanarak
programin tusa basilir basilmaz islemesini saglayin. F tuslari gibi ozel
tuslara basarak ne oldugunu kaydedin. Her fonksiyon tusundan iki tane
deger donecektir. Birincisi sifir olupC Programlama Dili ozel bir tusa basildigini haber
verecektir.


Arthur isimli Üye şimdilik offline konumundadır   Alıntı ile Cevapla
Alt 07-09-2008   #9 (permalink)

Cevap: C Programlama Dili

DIKKAT DIKKAT DIKKAT

Bu noktadaC Programlama Dili C nin en sasirtici ve en cok yapilan hatasina rastliyoruz.
*quot;getc*quot; fonksiyonundan geri donen degisken bir karakterdirC Programlama Dili dolayisi ile
bunu *quot;char*quot; tipi bir degiskene atayabiliriz. Hatirlayalim kiC Programlama Dili bir *quot;char*quot;
degiskeni 0 ila 255 arasindaki degerleri alabilir.

FakatC Programlama Dili cogu C derleyicilerinde EOF karakteriC Programlama Dili -1 olarak tanimlanmistir -
yaniC Programlama Dili *quot;char*quot; degiskeninin disinda - Bu nedenle sayet char kullanirsakC Programlama Dili
program kutugun sonunun geldigini bulamazC Programlama Dili ve sonsuz bir dongude takilir.
Bunun onune gecmesi kolaydir: EOF karakteri donmesini beklediginiz
durumlardaC Programlama Dili daima *quot;int*quot; tipi bir degisken kullanin.

Sayet sizin derleyiciniz icin EOF karakterinin ne oldugunu ogrenmek
istersenizC Programlama Dili *quot;stdio.h*quot; isimli header'i okuyabilirsiniz.


KELIME KELIME OKUMAK

TEXTOKU.C:
=================================================
#include *quot;stdio.h*quot;

main()
{
FILE *fp1;
char birkelime[100];
int c;

fp1 = fopen(*quot;ONSATIR.TXT*quot;C Programlama Dili*quot;r*quot;);

do {
c = fscanf(fp1C Programlama Dili*quot;%s*quot;C Programlama Dilibirkelime); /* kutukten bir kelime okuyalim */
printf(*quot;%sn*quot;C Programlama Dilibirkelime); /* ekrana yazalim */
} while (c != EOF); /* ta ki EOF olana kadar */

fclose(fp1);
}
================================================

Bu programC Programlama Dili nerdeyse bir oncekinin aynisidir. BuradaC Programlama Dili kelime kelime okumak
icin *quot;fscanf*quot; fonksiyonunu kullaniyoruzC Programlama Dili cunku *quot;fscanf*quot; fonksiyonuC Programlama Dili bir
bosluga gelinceC Programlama Dili okumayi birakir.

FAKAT BIR PROBLEM VAR

Programi inceleyinceC Programlama Dili verinin kutukten okundugunuC Programlama Dili ekrana yazildigini ve
daha sonra EOF olup olmadiginin kontrol edildigini goruyoruz. Bu nedenleC Programlama Dili
istemedigimiz birsey ekrana yazilmis oluyor. Buyuk ihtimalleC Programlama Dili programin
sonundaC Programlama Dili en son kelimeyi bir daha yaziyoruz - cunku zaten *quot;birkelime*quot; nin
icinde idi o deger.

Buna mani olmak icinC Programlama Dili bir baska program gorelim. Ismi IYIOKU.C olsun:

IYIOKU.C:
================================================
#include *quot;stdio.h*quot;

main()
{
FILE *fp1;
char birkelime[100];
int c;

fp1 = fopen(*quot;onsatir.txt*quot;C Programlama Dili*quot;r*quot;);

do {
c = fscanf(fp1C Programlama Dili*quot;%s*quot;C Programlama Dilibirkelime); /* kutukten bir kelime oku... */
if (c != EOF)
printf(*quot;%sn*quot;C Programlama Dilibirkelime); /* ekrana yaz... */
} while (c != EOF); /* ta ki EOF olana dek.. */

fclose(fp1); /* kutugu kapa */
}
================================================

Gordugunuz gibiC Programlama Dili bir *quot;if*quot; komutu ileC Programlama Dili sayet kutugun sonuna gelip
gelmedigimize bakiyoruz. Aslinda bu problem KAROKU.C da da vardiC Programlama Dili fakat
orada pek gorunmuyordu.

SONUNDAC Programlama Dili BUTUN BIR SATIR OKUYORUZ

SATIROKU.C:
=================================================

#include *quot;stdio.h*quot;

main()
{
FILE *fp1;
char birkelime[100];
char *c;

fp1 = fopen(*quot;ONSATIR.TXT*quot;C Programlama Dili*quot;r*quot;);

do {
c = fgets(birkelimeC Programlama Dili100C Programlama Dilifp1); /* bir satir okuyalim */
if (c != NULL)
printf(*quot;%s*quot;C Programlama Dilibirkelime); /* ekrana yazalim */
} while (c != NULL); /* ta ki NULL olana kadar.. */

fclose(fp1);
}

===============================================

Bu programC Programlama Dili simdiye de gorduklerimize benziyorC Programlama Dili fakat NULL isimli yeni bir
nesne de katildi.

*quot;fgets*quot; fonksiyonu ileC Programlama Dili bir butun satiriC Programlama Dili ve sonundaki yeni satir
karakterini (n)C Programlama Dili bir diziye okur. Ilk parametre olarakC Programlama Dili donen
karakterleri koyacagimiz yerin adresi tanimlanirC Programlama Dili ikinci parametrede en
fazla kac karakter okunmasina izin verecegimizi belirtiyoruzC Programlama Dili ve son
olarak da kutuk degiskeninin ismini veriyoruz.

o Yani bu fonksiyonC Programlama Dili ya bir yeni satir karakterine rastlayana kadarC Programlama Dili yada
izin verilen karakter sayisi eksi bir kadar okur. Eksi birin sebebi iseC Programlama Dili
katarin sonunu belirten () sifir degerine yer birakmasidir.

Tabi sonundaC Programlama Dili kutugu kapatiyoruz..

DEGISKEN BIR KUTUK ISMI

HERKUTUK.C:
================================================
#include *quot;stdio.h*quot;

main()
{
FILE *fp1;
char birkelime[100]C Programlama Dilikutukismi[25];
char *c;

printf(*quot;Kutuk ismini girin -*gt; *quot;);
scanf(*quot;%s*quot;C Programlama Dilikutukismi); /* istenilen kutuk ismini alalim */

fp1 = fopen(kutukismiC Programlama Dili*quot;r*quot;);

do {
c = fgets(birkelimeC Programlama Dili100C Programlama Dilifp1); /* kutukten bir satir okuyalim */
if (c != NULL)
printf(*quot;%s*quot;C Programlama Dilibirkelime); /* ekrana yazalim */
} while (c != NULL); /* ta ki NULL olana kadar */

fclose(fp1);
}
===============================================

BuradaC Programlama Dili ilk once kullanicidan *quot;scanf*quot; ile kutuk ismini kullanicidan
aliyoruzC Programlama Dili daha sonra kutugu acipC Programlama Dili satir satir ekrana yaziyoruz.

YAZICIYA NASIL BIRSEY YOLLAYABILIRIZ

PRINTDAT.C:
================================================
#include *quot;stdio.h*quot;

main()
{
FILE *guzelC Programlama Dili*printer;
int c;

guzel = fopen(*quot;onsatir.txt*quot;C Programlama Dili*quot;r*quot;); /* kutugu acalim */
printer = fopen(*quot;PRN*quot;C Programlama Dili*quot;w*quot;); /* printeri acalim */

do {
c = getc(guzel); /* kutukten bir karakter okuyoruz */
if (c != EOF) {
putchar(c); /* ekranda goruntuleyelim */
putc(cC Programlama Diliprinter); /* ve yaziciya yollayalim */
}
} while (c != EOF); /* ta ki (End Of File) kutuk bitene kadar */

fclose(guzel);
fclose(printer);
}
===============================================

Okumak icinC Programlama Dili *quot;onsatir.txt*quot; yi actiktan sonraC Programlama Dili yazmak icin *quot;PRN*quot; isimli
kutugu aciyoruz. Printere bir bilgi yollamakC Programlama Dili ayni bir kutuge yazmak
gibidirC Programlama Dili fakat standart bir kutuk ismi kullanmak zorundayiz. Bu konuda
kesin standartlar yokturC Programlama Dili fakat genellikle bu isimler *quot;PRN*quot; C Programlama Dili *quot;LPT*quot;C Programlama Dili
*quot;LPT1*quot; yada *quot;LPT2*quot; dir.

Bazi yeni derleyicilerinC Programlama Dili *quot;stdprn*quot; diyeC Programlama Dili onceden tanimli bir kutuk
tanimliyicilari vardir. Bu sayedeC Programlama Dili siz printer'i bir kutuk gibi acmadanC Programlama Dili
ona veri yollayabilirsiniz.

ProgramC Programlama Dili birer birer butun kutugu okuyupC Programlama Dili ekranda gosterirC Programlama Dili ve printer'e
yollar. EOF C Programlama Dili kutuk sonu bulundugundaC Programlama Dili kutukler kapanirC Programlama Dili ve programv
biter.

ODEVLER:

1. OkunacakC Programlama Dili yazilacak kutuklerin isimlerini kullaniciya soranC Programlama Dili daha
sonra bu ikisini ve printer kutugunu acan bir program yazin. Program
bunlari actiktan sonraC Programlama Dili kutuk sonu gelinceye kadar okunacak kutugu harf
harf okuyupC Programlama Dili yazilacak kutuge ve yaziciya bu karakteri yollamalidir.

2. PrograminizC Programlama Dili kullaniciya bir kutuk ismi sorsunC Programlama Dili cevabi alinca daC Programlama Dili bu
kutugu ekrandaC Programlama Dili satir numaralari ile birlikte gostersin..

c dersleri 10.bölüm

Structure ve Union'lar

STRUCTURE NEDIR?

Not: Structure'un tam tercumesi herhalde 'Yapi' olacak..

Bir structureC Programlama Dili kullanici tarafindan tanimlanmis bir veri tipidir. Su ana
kadar kullandigimiz veri tiplerinden cok daha karmasik olanlariC Programlama Dili
tanimlayabilirsiniz. Bir structureC Programlama Dili daha once tanimlanmis olan veri
tiplerinin bir araya gelmis halidir - ki bu veri tiplerineC Programlama Dili daha once
tanimladigimiz structure'lar da dahildir. Bu tanimi rahat anlamanin bir
yoluC Programlama Dili structure'unC Programlama Dili veriyi kullaniciya yada o programi kullanacak olan
kisiye daha rahat bir sekilde gruplamak icin kullanildigini
belirtebiliriz. Her zamanki gibiC Programlama Dili bir seyi anlamanin en iyi yoluC Programlama Dili
orneklere bakmaktir...

STRUCT1.C:
================================================

main()
{

struct {
char bas_harf; /* Soyadin bas harfi */
int yas; /* cocugun yasi */
int not; /* okulda not ortalamasi (100 uzerinden) */
} oglanC Programlama Dilikiz;

oglan.bas_harf = 'R';
oglan.yas = 15;
oglan.not = 75;

kiz.yas = oglan.yas - 1; /* oC Programlama Dili oglandan bir yas kucuk */
kiz.not = 82;
kiz.bas_harf = 'H';

printf(*quot;%d yasindaki %c'nin aldigi notC Programlama Dili %d dir.n*quot;C Programlama Dili
kiz.yasC Programlama Dili kiz.bas_harfC Programlama Dili kiz.not);

printf(*quot;%d yasindaki %c'nin aldigi notC Programlama Dili %d dir.n*quot;C Programlama Dili
oglan.yasC Programlama Dili oglan.bas_harfC Programlama Dili oglan.not);
}
================================================

ProgramC Programlama Dili bir structure tanimi ile basliyor. *quot;struct*quot; kelimesinden sonraC Programlama Dili
kume isaretleri arasinda bazi basit degiskenler goruyorsunuz. Bu
degiskenlerC Programlama Dili bu structure'i olusturan parcalardir. Kapanan kume
isaretinden sonraC Programlama Dili iki tane degisken ismi goruyorsunuz: *quot;oglan*quot; ve *quot;kiz*quot;.
Bu structure'un tanimina goreC Programlama Dili *quot;oglan*quot; artikC Programlama Dili 3 elemandan olusan bir
degiskendir. Bunlar *quot;bas_harf*quot;C Programlama Dili *quot;yas*quot;C Programlama Dili ve *quot;not*quot; durC Programlama Dili ve herbiriC Programlama Dili kendi
tiplerinde bir veriyi saklayabilirler. *quot;kiz*quot; degiskeninin de ayni 3
elemani vardirC Programlama Dili fakat bu baska bir degiskendir. YaniC Programlama Dili 6 tane basit
degisken tanimlamis olduk..

TEK BIR BIRLESIK DEGISKEN

*quot;oglan*quot; degiskenini daha yakindan izleyelim. Daha once soyledigimiz gibiC Programlama Dili
*quot;oglan*quot; in her elemaniC Programlama Dili basit birer degiskendirC Programlama Dili ve bu tip bir degiskenin
kullanilabilecegi heryerde kullanilabilir. OrneginC Programlama Dili *quot;yas*quot; elemaniC Programlama Dili bir
tamsayi degiskenidirC Programlama Dili dolayisiylaC Programlama Dili bir C programinda bir tamsayi
degiskeninin kullanilabilecegi her yerde kullanilabilir. HesaplamalardaC Programlama Dili
bir sayac olarakC Programlama Dili I/O islemlerinde vs. Yegane problemC Programlama Dili bu *quot;yas*quot; isimli
basit degiskeni *quot;oglan*quot; ile beraber kullanmamiz gerekir. Bunu yapmak
icindeC Programlama Dili ikisini de yaziyoruzC Programlama Dili ve arasina bir nokta isareti koyuyoruz.
OyleyseC Programlama Dili tum degisken ismi olan *quot;oglan.yas*quot;C Programlama Dili *quot;oglan*quot; degiskeninin *quot;yas*quot;
sahasi oluyor.. Bu yapiyiC Programlama Dili bu sahaya erismek istedigimiz heryerde
kullanabiliriz. HattaC Programlama Dili sadece *quot;oglan*quot; yada *quot;yas*quot; dememizC Programlama Dili kabul
edilmeyecektir. Tek baslarinaC Programlama Dili isimlerin bir manasi yoktur.


DEGISKENLERE DEGER ATAMA

Yukardaki tanimlamayi kullanarakC Programlama Dili *quot;oglan*quot; ve *quot;kiz*quot; 'in her uc sahasina
(*quot;bas_harf*quot;C Programlama Dili*quot;yas*quot;C Programlama Dili*quot;not*quot;) degerler ayabiliriz. Dikkat etmeniz gereken bir
noktaC Programlama Dili *quot;oglan.bas_harf*quot;'in bir *quot;char*quot; tipi oldugudur. Bu nedenleC Programlama Dili
programda karakter verisine atanmistir. *quot;oglan*quot; in geri kalan iki sahasi
daC Programlama Dili tanimlandiklari 'tiplerde'C Programlama Dili degerlere atanir.. SonraC Programlama Dili *quot;kiz*quot; isimli
degiskenin 3 sahasi daC Programlama Dili degerlere atanir. Burada atama sirasinin fark
etmeyecegini gosterebilmek icinC Programlama Dili farkli bir sira izlenmistir.

BU DEGERLERI NASIL KULLANABILIRIZ??

Alti basit degiskenimizin her elemanina veri atadiktan sonraC Programlama Dili onlarla
diledigimizi yapabiliriz. Bu ilk ornegi basit tutmak icinC Programlama Dili biz sadece
degerlerini ekrana yazdiriyoruz. *quot;printf*quot; satirinin alistigimizdan farkli
olmadigini goreceksiniz.

Structure'larC Programlama Dili programi daha kolay yazmak ve anlamak icinC Programlama Dili cok faydali bir
gruplama metodudur. Bu ilk ornek cok basit oldugundanC Programlama Dili size structure'un
gercek degerini gostermekten acizdirC Programlama Dili fakat okumaya devam edersenizC Programlama Dili
structure'un gercekten faydali oldugunu goreceksiniz.


Arthur isimli Üye şimdilik offline konumundadır   Alıntı ile Cevapla
Alt 07-09-2008   #10 (permalink)

Cevap: C Programlama Dili

BIR UNION ORNEGI DAHA

UNION2.C:
================================================
#define OTO 1
#define TEKNE 2
#define UCAK 3
#define GEMI 4

main()
{
struct otomobil { /* bir otomobil icin structure */
int tekerlekler;
int camurluklar;
int kapilar;
};

typedef struct { /* bir gemi yada tekne icin structure */
int su_kesimi;
char boyu;
} TEKNEDEF;

struct {
char tasit; /* ne cins tasit ? */
int agirlik; /* tasitin gros agirligi */
union { /* tipe-bagimli bilgi */
struct otomobil oto; /* union'un birinci kismi */
TEKNEDEF tekne; /* union'un ikinci kismi */
struct {
char motorlar;
int kanat_acikligi;
} ucak; /* union'un 3uncu kismi */
TEKNEDEF ship; /* union'un 4uncu kismi */
} tasit_tip;
int deger; /* tasitin bin TL olarak degeri */
char sahibi[32]; /* sahibinin ismi */
} fordC Programlama Dili sun_fishC Programlama Dili piper_cub; /* 3 structure degiskeni */

/* birkac sahayi tanimlayalim */

ford.tasit = OTO;
ford.agirlik = 2742; /* deposu dolu iken */
ford.tasit_tip.oto.tekerlekler = 5; /* istepne dahil */
ford.tasit_tip.oto.kapilar = 2;

sun_fish.deger = 3742; /* trailer haric */
sun_fish.tasit_tip.tekne.boyu = 5;

piper_cub.tasit = UCAK;
piper_cub.tasit_tip.ucak.kanat_acikligi = 9;

if (ford.tasit == OTO) /* evet C Programlama Dili oyle */
printf(*quot;Ford'un %d tekerlegi var.n*quot;C Programlama Diliford.tasit_tip.oto.tekerlekler);

if (piper_cub.tasit == OTO) /* hayirC Programlama Dilidegil */
printf(*quot;Ucagin %d tekerlegi var.n*quot;C Programlama Dilipiper_cub.tasit_tip.
oto.tekerlekler);
}
==============================================

Bu ornekteC Programlama Dili union'larin cok rastlanilan bir kullanim tarzini goruyorsunuz.
Dusunun kiC Programlama Dili bircok tip tasittan olusan bir veri bankasi (veri tabani)
olusturmak istiyoruz. Bir arabadaki pervane sayisi yada bir teknedeki
tekerlek sayisini koymakC Programlama Dili komik olurdu. Verimli bir veri tabani olusturmak
icinC Programlama Dili bir kismi her cins tasit icin degisikC Programlama Dili bir kismi ayni tip kalan
verileri saklamaniz gerekecektir.

BuradaC Programlama Dili bir structure tanimliyoruzC Programlama Dili ve bunun icine gidebilecek degisik
tiplere karar veriyoruz. Ilk once #definelarlaC Programlama Dili bazi sabitler
tanimliyoruzC Programlama Dili daha sonra icindekilerin size hic te yabanci gelmeyecegi
*quot;otomobil*quot; isimli bir structure tanimliyoruzC Programlama Dili fakat degisken
tanimlamiyoruz.

TYPEDEF KOMUTU

Daha sonraC Programlama Dili *quot;typedef*quot; ile yeni bir cins veri tanimliyoruz. Bu daC Programlama Dili *quot;int*quot;
yada *quot;char*quot; gibi kullanilabilecek tumuyle yeni bir tip tanimliyoruz.
Structure'un ismi olmadiginiC Programlama Dili fakat degisken tanimlanacagi yerdeC Programlama Dili
*quot;TEKNEDEF*quot; ismini goruyorsunuz. ArtikC Programlama Dili *quot;TEKNEDEF*quot; diye bir tipimiz vardirC Programlama Dili
ve bununla istedigimiz heryerde bir structure tanimlayabiliriz. Bu komutC Programlama Dili
degisken tanimlamasi yapmiyorC Programlama Dili fakat sadece tipi tanimliyor.

Buyuk harf kullanmak sadece sahsi tercih icindirC Programlama Dili fakat bir C standarti
degildir. SadeceC Programlama Dili *quot;typedef*quot; iC Programlama Dili bir degisken isiminden ayri tutmaktadir.

Daha once yarattigimiz parcalari kullanan buyuk kesime geldik. Bu
structureC Programlama Dili 5 parcadan olusmusturC Programlama Dili iki *quot;tasit*quot; ve *quot;agirlik*quot; isimli basit
degiskenC Programlama Dili bir unionC Programlama Dili ve *quot;deger*quot; ve *quot;sahibi*quot; isimli iki basit degisken
daha. Tabii kiC Programlama Dili burada onemle bakmamiz gerekenC Programlama Dili union tanimlanmasidir.

BakincaC Programlama Dili bunun 4 parcadan olustugunu goreceksiniz. Ilk parcasi *quot;oto*quot;
isimliC Programlama Dili ve daha once tanimladigimiz bir tipte olan degiskendir. Ikinci
kismiC Programlama Dili *quot;tekne*quot; ismindedirC Programlama Dili ve daha once tanimladigimiz *quot;TEKNEDEF*quot;
tipindedir. Ucuncu kesimi iseC Programlama Dili *quot;ucak*quot; isimliC Programlama Dili ve union icinde tanimlanan
bir structure'dur. SonundaC Programlama Dili union'un en son parcasi olan *quot;gemi*quot; isimli
degisken de *quot;TEKNEDEF*quot; tipindedir.

Umarim bu dordunun gosterilen 3 mettoddan biri ile tanimlanabilecegiC Programlama Dili
sizin icin aciktir. NormaldeC Programlama Dili herhalde en *quot;temiz*quot; tanimC Programlama Dili her birinin
*quot;typedef*quot; ile tanimlanmasi sayesinde olacaktir.

SIMDI NE OLDU?

SimdiC Programlama Dili icine dort cins veri saklayabilecegimiz bir yapimiz var. Her
kayitin uzunluguC Programlama Dili en buyuk union'u tasiyan kayitin uzunlugunda olacaktir.
Bu durumdaC Programlama Dili birinci kesimC Programlama Dili en buyugudurC Programlama Dili cunku 3 tamsayi degiskeninden
olusmaktadir. Digerleri iseC Programlama Dili bir karakter ve bir tamsayidan
olusmaktadirlar. YaniC Programlama Dili bu union'un ilk parcasiC Programlama Dili bu tipteki butun
structure'larin boyunu belirleyecektir. Elde edilen structureC Programlama Dili her dort
tip veriden birini saklamasi icin kullanilabilirC Programlama Dili fakat bu tip bir bir
degiskenin icinde neler saklandigini kontrol etmekC Programlama Dili programcinin isidir.
*quot;tasit*quot; isimli degiskenC Programlama Dili orada ne tip bir tasit saklandigini belirtmek
icin kullanilmistir. Programin basindaki dort #define satiriC Programlama Dili *quot;tasit*quot; in
icinde saklanabilecekleri belirtir.

Ortaya cikan yapinin kullanimini gostermek icinC Programlama Dili birkac ornek de vardir.
Bazi degiskenlere degerler atanmisC Programlama Dili birkac tanesinin degeri ekrana
yazilmistir.

Union'larC Programlama Dili hele yeni programlamaya baslayanlar tarafindanC Programlama Dili cok SIK
kullanilmaz. Bazen rastlayabilirsinizC Programlama Dili ve ne ise yaradiklarini bilmenizde
fayda vardir. Su an icin detaylarini ogrenmenize luzum yokturC Programlama Dili ve bu
nedenleC Programlama Dili bu ornekte fazla vakit harcamayin. Sayet bir gun saha tanimlari
degisen bir yapiya ihtiyaciniz olursaC Programlama Dili o zaman ogrenebilirsiniz. Fakat
kendi igiliginiz icinC Programlama Dili structure'lara alismaya bakin - onlar daha SIK
kullanilirlar.

ODEV

1. Icinde *quot;isim*quot; icin bir karakter dizisiC Programlama Dili *quot;ayaklar*quot; icin bir tamsayi
degiskeniC Programlama Dili ve *quot;kollar*quot; icin bir baska tamsayi degiskeni olan ISIMLI bir
structure tanimlayin. Bu structure ileC Programlama Dili 6 elemanlik bir dizin tanimlayin.
Bu sahanin icineC Programlama Dili degisik bilgiler atayinC Programlama Dili ve ekrana suna benzer bir cikti
saglayin:

Bir insanin 2 kolu ve 2 ayagi vardir.
Bir kopegin 0 kolu ve 4 ayagi vardir.
Bir televizyonun 0 kolu ve 4 ayagi vardir.
Bir sandalyenin 2 kolu ve 4 ayagi vardir.
vs.


2. Birinci programi tekrar yazipC Programlama Dili verileri ekrana yazmak icin bir
pointer'dan yararlanin.


Arthur isimli Üye şimdilik offline konumundadır   Alıntı ile Cevapla
Yeni Konu aç Cevapla
Share

Bookmarks

Etiketler
dili, programlama


Konuyu Toplam 1 Üye okuyor. (0 Kayıtlı üye ve 1 Misafir)
 
Seçenekler

Yetkileriniz
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

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


Benzer Konular
Konu Konuyu Başlatan Forum Cevaplar Son Mesaj
Php Java Mysql Kitabı İndir,Php Java Mysql Programlama Kitabı İndir,Php Java Mysql Arthur Eğitim Programları 0 02-20-2010 05:39 PM
Yrd. Doç. Dr. Güzin Tural Sultan Sencer Bilim Adamları 0 10-01-2008 12:59 PM
Prof. Dr. Osman Horata Sultan Sencer Bilim Adamları 0 10-01-2008 12:56 PM
Prof. Dr. Şükrü Halûk Akalın Sultan Sencer Bilim Adamları 0 10-01-2008 12:55 PM

Başka adreslerde içeriğimizi paylaştığınızda lütfen kaynak belirtmeyi unutmayınız, duyarlılığınız için teşekkürler. Sayfalarımızda bulunan içeriklerin telif haklarıyla ilgili bir şikayetiniz / sorunuz varsa bize ulaşmak için admin@mekanbursa.com email adresine iletebilirsiniz.. If you OWN the copyrights to any content we publish or offer for download and you want them to be REMOVED from our web site, please contact us admin@mekanbursa.com with some proof of ownership of copyright and they will be removed immediately.


Bütün Zaman Ayarları WEZ +3 olarak düzenlenmiştir. Şu Anki Saat: 12:39 AM .


Translations supported by vBET 2.3.10
Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2010, Jelsoft Enterprises Ltd.
Search Engine Friendly URLs by vBSEO 3.3.0 ©2009, Crawlability, Inc.