Would you like to react to this message? Create an account in a few clicks or log in to continue.


Bismil Team Groub
 
AnasayfaAramaLatest imagesKayıt OlGiriş yap

 

 C dersleri 8

Aşağa gitmek 
YazarMesaj
dynamic
Co Admin
Co Admin
dynamic


Mesaj Sayısı : 220
Kayıt tarihi : 25/09/08
Yaş : 34

C dersleri 8 Empty
MesajKonu: C dersleri 8   C dersleri 8 Icon_minitimeSalı Ekim 21, 2008 5:25 am

SONUNDA, BUTUN BIR SATIR OKUYORUZ

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

#include "stdio.h"

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

fp1 = fopen("ONSATIR.TXT","r");

do {
c = fgets(birkelime,100,fp1); /* bir satir okuyalim */
if (c != NULL)
printf("%s",birkelime); /* ekrana yazalim */
} while (c != NULL); /* ta ki NULL olana kadar.. */

fclose(fp1);
}

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

Bu program, simdiye de gorduklerimize benziyor, fakat NULL isimli yeni bir
nesne de katildi.

"fgets" fonksiyonu ile, bir butun satiri, ve sonundaki yeni satir
karakterini (n), bir diziye okur. Ilk parametre olarak, donen
karakterleri koyacagimiz yerin adresi tanimlanir, ikinci parametrede en
fazla kac karakter okunmasina izin verecegimizi belirtiyoruz, ve son
olarak da kutuk degiskeninin ismini veriyoruz.

o Yani bu fonksiyon, ya bir yeni satir karakterine rastlayana kadar, yada
izin verilen karakter sayisi eksi bir kadar okur. Eksi birin sebebi ise,
katarin sonunu belirten () sifir degerine yer birakmasidir.

Tabi sonunda, kutugu kapatiyoruz..

DEGISKEN BIR KUTUK ISMI

HERKUTUK.C:
================================================
#include "stdio.h"

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

printf("Kutuk ismini girin -> ");
scanf("%s",kutukismi); /* istenilen kutuk ismini alalim */

fp1 = fopen(kutukismi,"r");

do {
c = fgets(birkelime,100,fp1); /* kutukten bir satir okuyalim */
if (c != NULL)
printf("%s",birkelime); /* ekrana yazalim */
} while (c != NULL); /* ta ki NULL olana kadar */

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

Burada, ilk once kullanicidan "scanf" ile kutuk ismini kullanicidan
aliyoruz, daha sonra kutugu acip, satir satir ekrana yaziyoruz.

YAZICIYA NASIL BIRSEY YOLLAYABILIRIZ

PRINTDAT.C:
================================================
#include "stdio.h"

main()
{
FILE *guzel,*printer;
int c;

guzel = fopen("onsatir.txt","r"); /* kutugu acalim */
printer = fopen("PRN","w"); /* printeri acalim */

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

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

Okumak icin, "onsatir.txt" yi actiktan sonra, yazmak icin "PRN" isimli
kutugu aciyoruz. Printere bir bilgi yollamak, ayni bir kutuge yazmak
gibidir, fakat standart bir kutuk ismi kullanmak zorundayiz. Bu konuda
kesin standartlar yoktur, fakat genellikle bu isimler "PRN" , "LPT",
"LPT1" yada "LPT2" dir.

Bazi yeni derleyicilerin, "stdprn" diye, onceden tanimli bir kutuk
tanimliyicilari vardir. Bu sayede, siz printer'i bir kutuk gibi acmadan,
ona veri yollayabilirsiniz.

Program, birer birer butun kutugu okuyup, ekranda gosterir, ve printer'e
yollar. EOF , kutuk sonu bulundugunda, kutukler kapanir, ve programv
biter.

ODEVLER:

1. Okunacak, yazilacak kutuklerin isimlerini kullaniciya soran, daha
sonra bu ikisini ve printer kutugunu acan bir program yazin. Program
bunlari actiktan sonra, kutuk sonu gelinceye kadar okunacak kutugu harf
harf okuyup, yazilacak kutuge ve yaziciya bu karakteri yollamalidir.

2. Programiniz, kullaniciya bir kutuk ismi sorsun, cevabi alinca da, bu
kutugu ekranda, 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 structure, kullanici tarafindan tanimlanmis bir veri tipidir. Su ana
kadar kullandigimiz veri tiplerinden cok daha karmasik olanlari,
tanimlayabilirsiniz. Bir structure, daha once tanimlanmis olan veri
tiplerinin bir araya gelmis halidir - ki bu veri tiplerine, daha once
tanimladigimiz structure'lar da dahildir. Bu tanimi rahat anlamanin bir
yolu, structure'un, veriyi kullaniciya yada o programi kullanacak olan
kisiye daha rahat bir sekilde gruplamak icin kullanildigini
belirtebiliriz. Her zamanki gibi, bir seyi anlamanin en iyi yolu,
orneklere bakmaktir...

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

main()
{

struct {
char bas_harf; /* Soyadin bas harfi */
int yas; /* cocugun yasi */
int not; /* okulda not ortalamasi (100 uzerinden) */
} oglan,kiz;

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

kiz.yas = oglan.yas - 1; /* o, oglandan bir yas kucuk */
kiz.not = 82;
kiz.bas_harf = 'H';

printf("%d yasindaki %c'nin aldigi not, %d dir.n",
kiz.yas, kiz.bas_harf, kiz.not);

printf("%d yasindaki %c'nin aldigi not, %d dir.n",
oglan.yas, oglan.bas_harf, oglan.not);
}
================================================

Program, bir structure tanimi ile basliyor. "struct" kelimesinden sonra,
kume isaretleri arasinda bazi basit degiskenler goruyorsunuz. Bu
degiskenler, bu structure'i olusturan parcalardir. Kapanan kume
isaretinden sonra, iki tane degisken ismi goruyorsunuz: "oglan" ve "kiz".
Bu structure'un tanimina gore, "oglan" artik, 3 elemandan olusan bir
degiskendir. Bunlar "bas_harf", "yas", ve "not" dur, ve herbiri, kendi
tiplerinde bir veriyi saklayabilirler. "kiz" degiskeninin de ayni 3
elemani vardir, fakat bu baska bir degiskendir. Yani, 6 tane basit
degisken tanimlamis olduk..

TEK BIR BIRLESIK DEGISKEN

"oglan" degiskenini daha yakindan izleyelim. Daha once soyledigimiz gibi,
"oglan" in her elemani, basit birer degiskendir, ve bu tip bir degiskenin
kullanilabilecegi heryerde kullanilabilir. Ornegin, "yas" elemani, bir
tamsayi degiskenidir, dolayisiyla, bir C programinda bir tamsayi
degiskeninin kullanilabilecegi her yerde kullanilabilir. Hesaplamalarda,
bir sayac olarak, I/O islemlerinde vs. Yegane problem, bu "yas" isimli
basit degiskeni "oglan" ile beraber kullanmamiz gerekir. Bunu yapmak
icinde, ikisini de yaziyoruz, ve arasina bir nokta isareti koyuyoruz.
Oyleyse, tum degisken ismi olan "oglan.yas", "oglan" degiskeninin "yas"
sahasi oluyor.. Bu yapiyi, bu sahaya erismek istedigimiz heryerde
kullanabiliriz. Hatta, sadece "oglan" yada "yas" dememiz, kabul
edilmeyecektir. Tek baslarina, isimlerin bir manasi yoktur.


DEGISKENLERE DEGER ATAMA

Yukardaki tanimlamayi kullanarak, "oglan" ve "kiz" 'in her uc sahasina
("bas_harf","yas","not") degerler ayabiliriz. Dikkat etmeniz gereken bir
nokta, "oglan.bas_harf"'in bir "char" tipi oldugudur. Bu nedenle,
programda karakter verisine atanmistir. "oglan" in geri kalan iki sahasi
da, tanimlandiklari 'tiplerde', degerlere atanir.. Sonra, "kiz" isimli
degiskenin 3 sahasi da, degerlere atanir. Burada atama sirasinin fark
etmeyecegini gosterebilmek icin, farkli bir sira izlenmistir.

BU DEGERLERI NASIL KULLANABILIRIZ??

Alti basit degiskenimizin her elemanina veri atadiktan sonra, onlarla
diledigimizi yapabiliriz. Bu ilk ornegi basit tutmak icin, biz sadece
degerlerini ekrana yazdiriyoruz. "printf" satirinin alistigimizdan farkli
olmadigini goreceksiniz.

Structure'lar, programi daha kolay yazmak ve anlamak icin, cok faydali bir
gruplama metodudur. Bu ilk ornek cok basit oldugundan, size structure'un
gercek degerini gostermekten acizdir, fakat okumaya devam ederseniz,
structure'un gercekten faydali oldugunu goreceksiniz..


BIR STRUCTURE DIZISI

STRUCT2.C:
===============================================
main()
{
struct {
char bas_harf;
int yas;
int not;
} cocuklar[12];

int indeks;

for (indeks = 0;indeks < 12;indeks++) {
cocuklar[indeks].bas_harf = 'A' + indeks;
cocuklar[indeks].yas = 16;
cocuklar[indeks].not = 84;
}

cocuklar[3].yas = cocuklar[5].yas = 17;
cocuklar[2].not = cocuklar[6].not = 92;
cocuklar[4].not = 57;

for (indeks = 0;indeks < 12;indeks++)
printf("%c , %d yasindadir ve notu %d dur.n",
cocuklar[indeks].bas_harf, cocuklar[indeks].yas,
cocuklar[indeks].not);
}
==============================================

Bu programda, bir oncekinin ayni structure tanimini kullaniyor. Fakat
tanimladigi, 12 tane "cocuklar" isimli degisken oluyor. Yani bu program
12 * 3 = 36 tane basit degiskenden olusuyor. Bunlarin herbiri, kendi
tiplerinde veri tasiyabilirler. Ayrica for dongulerinde kullanmak icin
"indeks" isimli bir basit degisken de tanimliyoruz.

Her sahaya bir deger atamak icin, bir for dongusu kullaniyoruz, ve
donguden her gecis, bu 3 sahaya deger atanmasini sagliyor. Gercek hayatta
bu metod, veri atanmasi icin pek uygun olmayacaktir. Ornegin veriler
kutukten okunup, degerlerine atanabilir. Bunu basit bir veri tabani
uygulamasi olarak gorebilirsiniz, gercekten de oyledir.

Bundan sonra, birkac elemana, nasil atanacagini gostermek amaci ile,
degerler atiyoruz.

PASCAL PROGRAMCILARINA NOT:

Pascal dilinde bir butun RECORD'un tek bir komut ile kopyalayabilirsiniz.
Bu, C de mumkun degildir. Structure'un her elemanini tek tek kopyalamaniz
lazimdir. Lisan gelismelere ugradikca, bu da degisecek bir noktadir.
Hatta, bazi yeni derleyiciler, structure'un atanmasini yapabiliyor.
Derleyicinizin kilavuzuna bir bakin..


SONUNDA BUTUN NETICELERI GOSTERIYORUZ

Son birkac satirda da, formatlanmis bir sekilde verilerin yazilmasini
goruyorsunuz.

POINTER'LAR VE STRUCTURE'LARI BIR ARADA KULLANMAK

STRUCT3.C:
================================================
main()
{
struct {
char bas_harf;
int yas;
int not;
} cocuklar[12],*point;

int index;

for (index = 0;index < 12;index++) {
point = cocuklar + index;
point->bas_harf = 'A' + index;
point->yas = 16;
point->not = 84;
}

cocuklar[3].yas = cocuklar[5].yas = 17;
cocuklar[2].not = cocuklar[6].not = 92;
cocuklar[4].not = 57;

for (index = 0;index < 12;index++) {
point = cocuklar + index;
printf("%c , %d yasindadir ve notu %d dur.n",
(*point).bas_harf, cocuklar[index].yas,
point->not);
}
}
===============================================

Bu program, bir once gordugumuz programin neredeyse aynisi, fakat bu, bazi
islemler icin pointer'lardan yararlaniyor.

Ilk fark, structure'un tanimlanmasindan sonraki degisken tanimlarinda goze
carpiyor. Burada, "point" isimli bir pointer tanimliyoruz, ve tipine de,
bu pointer'in tipi olarak veriyoruz. Bu pointer'in herhangi baska bir cins
degisken tipini 'gostermesine' calismak, yalnis olur. C dilinde bu
kisitlama icin cok yerinde bir neden vardir, ve bunu gelecek paragraflarda
gorecegiz.

Daha sonraki degisiklik ise, veri sahalarina erismek icin pointer
kullandigimiz dongude ortaya cikiyor. "cocuklar" kendi basina bir pointer
gorevi yaptigindan, "point" i "kids" in adresine atayabiliriz.

POINTER ARITMETIGI

"point" e bir ekledigimiz zaman, "cocuklar" dizisindeki ikinci elemanini
gosteriyoruz. Sistem, bu structure'un 3 tane degiskenden olustugunu ve
butun structure'u hafizada tutmak icin ne kadar yer gerektigini bilir. Bu
sayede, "point"e bir ekle dedigimizde, dizideki bir sonraki elemana varmak
icin kac hafiza elemani a$ilmasi gerekiyorsa, o kadar ekler. Ornegin,
"point" e 4 ekleseydik, sistem, "point" e 4 kere structure'un boyu kadar
yer adres atlatirdi. Bu sebeple, pointerlar, tanimlandiklari tipten baska
bir tip icin kullanilamazlar.

Simdi programimiza geri donelim. Bir onceki paragraftan da
anlayabileceginiz gibi, dongunun icinde ilerledikce, pointer'in degeri
artarak her dizi elemaninin baslangicini teker teker gosterecektir. Bu
sayede, pointer ile bu structure'un degisik elemanlarina erisebiliriz. C
dilinde bir structure'un elemanlarina pointer ile erismek o kadar cok
kullanilir ki, bunu gostermek icin ozel bir metod gelistirilmistir.
"point->bas_harf" metodunu kullanmak, "(*point).bas_harf" metodunu
kullanmak ile ayni manadadir. "->" sembolu, bir eksi isareti ve bir
buyuktur isareti ile elde edilir.

Pointer, bir structure'u gosterdigine gore, kullanirken, o structure'un
hangi degiskenine erismek istedigimizi belirtmemiz gereklidir. Gordugunuz
gibi, bir structure'un elemanlarina erismek icin degisik yollar vardir, ve
programin sonunda, ciktiyi saglayan "for" dongusunde, 3 degisik metod
goruyorsunuz. Bu kotu bir programlama teknigi olarak kabul edilirdi, fakat
burada size her ucunun de ayni neticeyi verdigini gostermek amaci ile
yapilmistir. Bu program, tam olarak kavrayabilmeniz icin, herhalde bir
sure incelemenizi gerektirecektir.
Sayfa başına dön Aşağa gitmek
 
C dersleri 8
Sayfa başına dön 
1 sayfadaki 1 sayfası
 Similar topics
-
» C dersleri 9
» C dersleri 10
» C dersleri 11
» C dersleri 12
» C dersleri 1

Bu forumun müsaadesi var:Bu forumdaki mesajlara cevap veremezsiniz
 :: BT Bilgisayar ve Teknolojisi :: Programlama :: C / C++-
Buraya geçin: