![]() |
| Ana Sayfa | Cadde XL | Programlar | Renk Kodları | Messenger | Camfrog | Nasil Yapariz? | Yerli Klipler | Modifiye Otomobil | Hastalıklar | İl Plakaları | Farmville |
| |||||||
| Kayıt ol | Yardım | Üye Listesi | Ajanda | Arama | Bugünki Mesajlar | Forumları Okundu Kabul Et | Reklamları Kapat |
![]() |
| | Share | Seçenekler |
| | #6 (permalink) |
Arthur | Cevap: C Programlama Dili KELIME KATARI (STRING) NEDIR? Bir katar genellikle harflerden olusan karakterler dizisidir. Ciktinizinguzel ve manali gorunmesi icin icinde isimler ve adresler olabilmesiicin programlarinizin katarlar kullanmasi sarttir. C dilinde tam tanimi![]() *quot;char*quot; tipi bilgilerin NULL karakter (yani sifir) ile sonlandirilmasidir.C bir katari karsilastiracagi kopyalayacagi yada ekrana yansitacagizaman bunlari gerceklestiren fonksiyonlar NULL gorunene dek bu islemiyapmak uzere programlanmistir. ARRAY (dizi) NEDIR? dizi ayni tip verilerin birbiri arkasina tanimlanmasidir. Kelime katari![]() 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; isim);printf(*quot;Icinden bir karakter: %cn*quot; isim[2]);printf(*quot;Ismin bir parcasi: %s n*quot; *amp;isim[3]);} ================================================== Bu programda ilk once *quot;char*quot; tipi bir tanimlama goruyoruz. Koseliparantezler icinde kac hanelik bir dizi tanimlanacagini belirtiyoruz. Cdilinde butun diziler sifirdan basladigi icin bu tanimlama ilekullanabilecegimiz en yuksek index degeri 6 dir. KATAR NASIL KULLANILIR Demek ki *quot;isim*quot; degiskeni icinde 7 tane karakter tutabilir. Fakat en sonkarakterin sifir olmasi zorunlugu oldugu icin kullanilabilecek olan alan6 karakterliktir. Bu katarin icine manali birsey yuklemek icin yedi tanekomut veriyoruz - her biri katara bir karakter atamaktadir. En sonundada katarin sonunu belirten sifir rakamini koyuyoruz. (Bir *quot;#define*quot; ileNULL karakteri programin basinda sifir olarak tanimlayabiliriz.)printf komutundaki %s isareti printf'e *quot;isim*quot; isimli katardan sifirarastlayincaya kadar ekrana yazmasini belirtir. Dikkat etmeniz gereken bir nokta *quot;isim*quot; degiskeninin indexinin yazilmasinin gerekmedigidir.KATARIN BIR KISMININ YAZILMASI Ikinci printf komutu ise %c ile katarin icinden sadece bir karakter(harf) yazilmasini gosterir. Istedigimiz karakterin index numarasini da ![]() *quot;isim*quot; degiskeninin yanina koseli parantezler arasinda gosterebiliriz.Son printf komutunda ise katarin 4. karakterinden itibaren yazmanin birornegidir. *quot;isim*quot; degiskeninin onundeki *amp; (ampersand) isareti isim[3]'unhafizada saklandigi adresin printf'e gecirilmesini belirtir. Adresleri 8. konuda gorecegiz fakat ufak bir ornek ile size bizleri nelerinbekledigini gostermek istedim. BAZI KATAR FONKSIYONLARI KATAR.C ================================================ main() { char isim1[12] isim2[12] karisik[25];char baslik[20]; strcpy(isim1 *quot;Rosalinda*quot;);strcpy(isim2 *quot;Zeke*quot;);strcpy(baslik *quot;Bu bir basliktir.*quot;);printf(*quot; %snn*quot; baslik);printf(*quot;isim 1: %s n*quot; isim1);printf(*quot;isim 2: %s n*quot; isim2);if(strcmp(isim1 isim2)*gt;0) /* sayet isim1 *gt; isim2 ise 1 dondurur */strcpy(karisik isim1);else strcpy(karisik isim2);printf(*quot;Alfabetik olarak en buyuk isim %s dir.n*quot; karisik);strcpy(karisik isim1);strcat(karisik *quot; *quot;);strcat(karisik isim2);printf(*quot;Iki isim birden %sn*quot; karisik);} ================================================= Ilk once 4 tane katar tanimliyoruz. Daha sonra *quot;strcpy*quot; isimli cok pratikbir fonksiyona geliyoruz. Yaptigi is bir katari bir digerine ta kisifir bulunana kadar kopyalamak. Hangi katarin hangisine kopyalancagini hatirlamak icin bir atama komutunu dusunun (*quot;x=23*quot; gibi). Veri![]() sagdakinden soldakine kopyalanir. Bu komutun yapilmasindan sonra isim1in icinde *quot;Rosalinda*quot; olacaktir - den-densiz olarak. Den-denler![]() derleyicinin sizin bir katar tanimladiginizi anlamasi icin gereklidir. KATARLARIN ALFABETIK OLARAK SIRAYA KONMASI Ilginizi cekebilecek diger bir fonksiyonda *quot;strcmp*quot; dur. Sayet kendisinegecirilen birinci katar ikinciden daha buyukse 1 dondurur ayni ise 0 veikinci daha buyukse -1 dondurur. *quot;Zeke*quot; katarinin kazanmasi sizi herhaldesasirtmaz. Burada katarin boyu onemli degildir sadece icindekikarakterler. 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 satirda *quot;strcat*quot; isimli yeni bir fonksiyon goreceksiniz. Gorevi![]() bir katarin sonuna diger katari eklemektir. Bunu yaparken NULL karakterin de yerli yerinde olmasini saglar. Burada *quot;isim1*quot; *quot;karisik*quot; 'akopyalanir daha sonra *quot;karisik*quot; a iki bosluk ve *quot;isim2*quot; eklenir.Katarlar zor degildir ve son derece faydalidirlar. Onlari kullanmayiiyice 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; index degerler[index]);} =============================================== Bu programda bir tamsayi dizisi tanimliyoruz. Gordugunuz gibi ayni katartanimlama gibi.. Bu sayede index degiskeni haric oniki tane degiskenimizoluyor. Bu degiskenlerin isimleri *quot;degerler[0]*quot; *quot;degerler[1]*quot; vs. dir.Ilk *quot;for*quot; dongusunde bunlara deger atiyoruz ikincisi ise indexdegiskeni 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; isim1);printf(*quot;%snn*quot; isim2);for (index = 0;index *lt; 12;index++) printf(*quot;%5d %5d %10.3fn*quot; index ivir[index] tuhaf[index]);} ================================================ Burada *quot;float*quot; olarak tanimli bir kayar nokta dizisi goruyorsunuz.Ayrica bu program katarlara nasil baslangic degeri atanabileceginigosteriyor. Koseli parantezlerin icini bos birakarak derleyicinin overiyi saklamak icin yeteri kadar yer ayarlamasini sagladik. Programin icinde bir katar daha ilk degerini veriyoruz. Burada onune *quot;static*quot;koymak zorunlugumuz var. Baska yeni birsey yok bu programda. Degiskenler rastgele degerlere atanir ve sonra da bu degerler ekrana yazdirilir. |
| | |
| | #7 (permalink) |
Arthur | Cevap: C Programlama Dili POINTER VE ARITMETIK Her cesit islemler pointer'lar ile mumkun degildir. Pointer bir adresoldugundan ona bir sabit rakam ekleyip daha ilerideki bir adreseerismek mumkundur. Ayni sekilde pointer'in adresinde bir rakam cikartip![]() daha onceki hafiza bolgelerine erismek mumkundur. Iki pointer'i toplamak pek mantikli degildir cunku bilgisayardaki adresler sabit degildir.Cikacak rakamin tuhaf olacagi icin pointer ile carpma da yapilamaz. Ne yaptiginizi dusunurseniz yapabilecekleriniz ve yapamayacaklariniz kendinibelli edecektir. TAMSAYI POINTER'I *quot;list*quot; isimli tamsayi dizisine 100 den 199 a kadar degerler verilir. Dahasonra 28. elemanin adresini *quot;pt*quot; isimli pointer'a atiyoruz. Daha sonraekrana yazdigimizda gercektende o degeri aldigini goruyoruz.Daha onceki konularda bir fonksiyondan veri degerlerini dondurmek iciniki metod oldugunu soylemistim. Ilki bir dizi kullanarakti. Ikincisiniherhalde tahmin edersiniz. Sayet tahmininiz *quot;pointer sayesinde*quot; idiyse ![]() tebrikler. CIFTYON.C: ================================================== == main() { int cevizler elmalar;cevizler = 100; elmalar = 101; printf(*quot;Baslangic degerleri %d %dn*quot; cevizler elmalar);/* *quot;degistir*quot; i cagirinca */degistir(cevizler *amp;elmalar); /* cevizlerin DEGERI ve *//* elmalarin adresini geciriyoruz */ printf(*quot;Bitis degerleri ise %d %d dir..n*quot; cevizler elmalar);} degistir(kuru_yemis meyvalar) /* kuru_yemis tamsayidir */int kuru_yemis *meyvalar; /* meyvalar bir tamsayi pointer'idir */{ printf(*quot;Degerler %d %dn*quot; kuru_yemis *meyvalar);kuru_yemis = 135; *meyvalar = 172; printf(*quot;Sonraki degerler %d %dn*quot; kuru_yemis *meyvalar);} ================================================= Burada iki tane tamsayi degiskeni (pointer degil) tanimliyoruz:*quot;cevizler*quot; ve *quot;elmalar*quot;. Once bunlara birer deger atiyoruz ve *quot;degistir*quot;isimli fonksiyonu cagiriyoruz. Cagirirken *quot;cevizler*quot; in degeri (100) ve*quot;elmalar*quot; degiskeninin adresini geciriyoruz. Fakat fonksiyona da birdeger ve bir adres gelecegini haber vermemiz gereklidir. Bunun icin ![]() fonksiyonun parametreleri tanimlanirken bir adres tasiyacak olan sembolunbasina bir yildiz koymamiz yeterlidir. Fonksiyonun icinde bu iki degeri degistirip eski ve yeni degerleriekrana yaziyoruz. Bu program calistiginda ana programdaki *quot;cevizler*quot; indegerinin ayni kaldigini fakat *quot;elmalar*quot; in yeni degerlerini aldigini goreceksiniz. *quot;cevizler*quot; in degerinin ayni kalmasinin nedeni fonksiyona birdeger gecirildiginde C dilinin o degerin bir kopyasini fonksiyonagecirmesi yuzundendir. Programa geri dondugunuzde degerin bir kopyasinikullandigimiz icin asil degerin degismedigini goreceksiniz. *quot;elmalar*quot; in degerinin degismesi ise yine fonksiyona *quot;elmalar*quot;degiskeninin adresinin bir kopyasi gecirildigi halde bu adres anaprogramdaki *quot;elmalar*quot; a karsilik geldigi icin fonksiyonda bu adrestekidegeri degistirir degistirmez *quot;elmalar*quot; in da degeri degismis olur.ODEV 1. Bir karakter katari tanimlayin ve icine *quot;strcpy*quot; ile bilgi koyun. Birdongu ve pointer ile katari harf-harf (teker teker) ekrana yazin. Programin basinda pointer'i katarin ilk elemanina atayin daha sonra ciftarti isareti ile pointer'in degerini arttirin. Ayri bir tamsayi degiskeni ile kac karakter yazilacagini kontrol edin.. 2. 1. deki programi pointeri katarin sonuna atayip cift eksi isaretinikullanarak 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 deyimi verinin girildigi ve ciktigi en normal yerleri![]() klavyeyi ve ekrani kast eder. Bu kutuge ilk baktiginizda *quot;#include*lt;stdio.h*gt;*quot; komutunu goreceksiniz. Bu komut on-derleyiciye kucuktur vebuyuktur isaretleri arasinda yer alan kutuk isminin programa eklenmesini soyler. Bazen *lt; *gt; isaretleri yerine den-den *quot; *quot; isaretleri degorebilirsiniz. Aralarindaki fark *lt;*gt; isaretlerinin on-derleyiciye suanda calistiginiz diskte / dizinde degil de bu tip kutuklerin konulduguyerde aramasini bildirir. Halbuki den-den isaretleri ile belirlenmis bir kutuk ismi sizin su anda bulundugunuz disk / dizinde aranir. Genellikle![]() *quot;bu tip kutuklerin konuldugu yer*quot; derleyiciye daha onceden belirtilir.Ornegin Quick C derleyicisinde derleyiciye girmeden once:SET INCLUDE=C:INCLUDE yazmak derleyicinin bundan sonra butun 'include' edilecek yani eklenecekkutuklerin C: diskinin INCLUDE dizininde aranmasini belirtir. Sonu .h ile biten kutuklerin ozel bir fonksiyonu vardir. Bunlara headeryada baslik kutukleri denir. Genellikle iclerinde bazi fonksiyonlarikullanmak icin gereken tanimlamalar yer alir. Bu kullandigimiz *quot;stdio.h*quot; kutugu ise bir suru *quot;#define*quot; komutundan olusur.C DE INPUT/OUTPUT ISLEMLERI C dilinde lisanin bir parcasi olarak tanimlanmis input/output komutlari yoktur bu nedenle bu fonksiyonlarin kullanici tarafindan yazilmasigereklidir. Her C kullanan kisi kendi input/output komutlarini yazmakistemediginden derleyici yazarlari bu konuda calisma yapmislar ve bizebir suru input/output fonksiyonlari saglamislardir. Bu fonksiyonlar standart hale gelmislerdir ve hemen her C derleyicisinde ayniinput/output komutlarini bulabilirsiniz. C nin lisan tanimi Kernigan veRichie tarafindan yazilmis bir kitaptir ve onlar bu gorecegimizinput/output fonksiyonlari bu kitaba katmislardir. Bu *quot;stdio.h*quot; isimli kutugu incelemenizde fayda vardir. Icinde bircok anlamadiginiz nokta olacaktir fakat bazi kisimlar tanidik olacaktir.DIGER INCLUDE KUTUKLERI C de buyuk programlar yazmaya basladiginizda programlari ufak parcalaraayirip ayri ayri derlemek isteyebilirsiniz. Bu degisik parcalarin ortak kisimlarini tek bir kutukte toplayip bir degisiklik gerektiginde sadece oortak 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 tanimlanir ve ekrana mesaj yazilir. Daha sonra![]() kendimizi *quot;c*quot; buyuk harf X e esit olmadigi surece devam eden bir dongununicinde buluyoruz. Bu programdaki iki yeni fonksiyon su an icin ilginoktamiz. Bunlar klavyeden bir tus okumak ve ekrana bir karakter yazmayisaglarlar. *quot;getchar()*quot; isimli fonksiyon klavyeden okudugu tusu dondurur bu deger*quot;c*quot; ye atanir. *quot;putchar()*quot; fonksiyonu ise bu degeri ekrana yansitir.Bu programi derleyip calistirdiginizda bir surpriz ile karsilasacaksiniz.Klavyeden yazdiginizda ekrana herseyin iyi bir sekilde yansitildiginigoreceksiniz. RETURN tusuna bastiginizda ise butun satirin tekrar ekranayazildigini goreceksiniz. Her karakteri teker teker ekrana getirmesini soyledigimiz halde programimiz sanki butun satiri sakliyor gibi.DOS BIZE YARDIMCI OLUYOR (YADA ISE KARISIYOR) Bu durumu anlayabilmek icin DOS un nasil calistigini anlamamizgereklidir. Klavyeden tuslar DOS kontrolu ile okundugu zaman RETURN tusubasilana dek basilan tuslar bir sahada saklanir. RETURN basilinca da![]() butun satir programa dondurulur. Tuslara basilirken karakterler ekrana dayansitilir. Bu duruma da *quot;eko*quot; ismi verilir. Simdi anlatilanlari goz onunde bulundurarak programimiz calisirken ekranaeko edilenlerin DOS tarafindan yapildigini anlayabilirsiniz. Siz RETURN ebasinca da bu saklanan tuslar programa gonderilir. Bunu daha iyi anlamakicin icinde buyuk harf X olan bir satir yazin. DOS buyuk X in ozel birtus oldugundan habersiz siz RETURN e basana kadar tuslari kabul etmeyedevam eder. RETURN e basinca ise bu katar programa gecirilir ve programX e rastlayincaya kadar ekrana karakterleri birer birer yazar. Isletim sisteminin bu tuhafliklari karsisinda yilmayin. Bazi programlarinizda bu ozellik isinize yarayabilir. Fakat simdi biz az onceyazdigimiz programin 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; yineklavyeden tek bir karakter okur. Farki *quot;getchar*quot; gibi DOS'atakilmamasidir. Bir karakter okur ve ekrana yansitmadan bu tusu programadondurur. Bu programi calistirdiginizda bir oncekindeki gibi tekrarlanan satirlarolmadigini goreceksiniz. Ayrica program artik 'X' e basar basmaz durmaktadir. Burada baska bir problemimiz var. RETURN'e basinca cursor ![]() ekranin soluna gitmektedir ama bir alt satira inmemektedir.SATIR ATLAMAMIZ LAZIM Cogu uygulama programi siz RETURN e basinca program o RETURN e ek olarakbir de *quot;Line Feed*quot; yani satir atlama karakteri ilave eder. Satir atlama otomatik olarak yapilmaz. Bundan sonraki programda bu sorunu da halletmisolacagiz. 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 ise ![]() 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 bakarsaniz RETURN tusunakarsilik gelen kodun 13 oldugunu gorursunuz. Ayni tabloda satir atlamakodu da 10 dur. Ekrana basilan tusu yazdiktan sonra sayet bu tus RETURN tusu ise birsatir atlayabilmemiz icin satir atlama kodunu ekrana yaziyoruz.Programin basindaki *quot;#define*quot; lar yerine *quot;if (c == 13) putchar(10);*quot; diyebilirdik fakat ne yapmak istedigimiz pek belirgin olmazdi. |
| | |
| | #8 (permalink) |
Arthur | 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 metodda butun isi DOS ustlenmektedir. Programimiz baska islerleugrasirken DOS bizim icin satiri hazirlayabilir ve RETURN'e basilinca busatiri programa dondurebilir. Fakat bu metodda karakterleri basildiklarianda fark etmemiz imkansizdir. Ikinci metodda tuslari teker teker fark etmemiz mumkundur. Fakat![]() program bu okuma sirasinda butun zamanini okumaya harcar ve baska bir is yapamaz ve bilgisayarin tum zamanini bu isle almis oluruz.Hangi metodun uzerinde calistiginiz program icin daha uygun oldugunu programci olarak siz karar vereceksiniz. Burada *quot;getch()*quot; fonksiyonun tersi olan *quot;ungetch()*quot; isimli bir fonksiyondaha oldugunu da belirtmeliyim. Sayet bir karakteri *quot;getch()*quot; le okuduktan sonra fazla okudugunuzu fark ederseniz bu fonksiyon ile okunan tusu gerikoyabilirsiniz. Bu bazi programlarin yazilimini kolaylastirmaktadir cunku bir tusu istemediginizi onu okuyuncaya kadar bilemezsiniz. Sadece bir tek tusu *quot;ungetch*quot; edebilirsiniz 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 yazin durmak icin 100 girin.n*quot;);do { scanf(*quot;%d*quot; °er); /* bir tamsayi oku (adresi ile) */printf(*quot;Okunan deger %d idi. n*quot; deger);} while (deger != 100); printf(*quot;Programin sonun*quot;); } =============================================== Alistigimiz tip bir program olan TAMOKU'da *quot;scanf*quot; isimli yeni birfonksiyon goruyoruz. Cok kullandigimiz *quot;printf*quot; fonksiyonuna cok benzeyen bu fonksiyonun gorevi istenilen tip verileri okuyup degiskenlere atamak.*quot;printf*quot; den en buyuk farki *quot;scanf*quot; in degisken degerleri yerine![]() adreslerini kullanmasidir. Hatirlayacaginiz gibi bir fonksiyonunparametrelerinin degerlerini degistirebilmesi icin degiskenin adresineihtiyaci vardir. *quot;scanf*quot; fonksiyonuna adres yerine deger gecirmek Cdilinde en SIK rastlanan hatalardan biridir. *quot;scanf*quot; fonksiyonu girilen satiri satirdaki bosluklara bakmadan ve busekilde kullanildiginda rakam olmayan bir karakter bulana kadar birtamsayi okur. Sayet 32766 den buyuk bir rakam girerseniz programin hata yaptiginigorursunuz. Ornegin 65536 girerseniz programin 0 degerini dondurdugunugorursunuz. Buna sebep tamsayilarin hafizada saklanisinda onlara 16bitlik bir saha ayrilmasindandir. Programinizda daha buyuk rakamlar kullanacaksaniz 'long' yada 'float' tiplerini secebilirsiniz.KARAKTER KATARI GIRISI KATARIN.C: ================================================ #include *lt;stdio.h*gt; main() { char big[25]; printf(*quot;Karakter katari girin en fazla 25 karakter.n*quot;);printf(*quot;Birinci kolonda X yazarak programi bitirin.n*quot;); do { scanf(*quot;%s*quot; big);printf(*quot;Yazdiginiz katar -*gt; %sn*quot; big);} while (big[0] != 'X'); printf(*quot;Programin sonu.n*quot;); } ================================================== Bu program bir oncekine cok benzer fakat bu sefer bir kelime katarigiriyoruz. 25 elemanli bir dizi tanimlanmistir fakat en son deger bir '0'olmasi gerektiginden kullanilabilen kisimi 24 dur. *quot;scanf*quot; dekidegiskenin onune *amp; ampersand isareti gerekmez cunku koseli parantezleriolmayan bir dizi degiskeni C dilinde o dizinin baslangicini gosterenbir adrestir. Calistiginizda sizi bir supriz bekliyor. Yazdiginiz cumleyi program ayrisatirlarda gosterir. Bunun sebebi *quot;scanf*quot; bir katar okurken satirinsonuna yada bir bosluga rastlayincaya kadar okumasina devam eder. Bir dongu icinde oldugumuzdan program tekrar tekrar *quot;scanf*quot; i cagirarak![]() DOS'un giris sahasinda kalan butun karakterleri okur. Cumleleri kelimelere boldugunden X ile baslayan herhangi bir kelimeye rastlayinca bu programdurur. 24 karakterden daha fazlasini girmeye calisin. Ne olduguna bakin. Size bir hata mesaji verebilir yada programiniz aleti kilitleyebilir. Gercek birprogramda boyle seylerin sorumlulugu sizlerin omuzlarinizdadir. C dilindeyazdiginiza size cok sey duser fakat ayni zamanda bircok kolaylik dasaglar. C DE INPUT/OUTPUT PROGRAMLAMA C dili cok miktarda input/output yapan programlar icin degil de birbircok icsel islemler yapan sistem programlari icin yazilmistir. Klavye'den bilgi alma rutinleri cok kullanislidir fakat C size azyardimci olur. Yani yapmaniz gereken I/O islemlerinde sorun cikmasinionlemek icin detaylarla sizin ugrasmaniz lazimdir. Fakat genellikle herhangi bir program icin bu tip fonksiyonlari bir defa tanimlamaniz yeterlidir. HAFIZADA.C: ================================================= main() { int rakam[5] sonuc[5] index;char satir[80]; rakam[0] = 5; rakam[1] = 10; rakam[2] = 15; rakam[3] = 20; rakam[4] = 25; sprintf(satir *quot;%d %d %d %d %dn*quot; rakam[0] rakam[1]![]() rakam[2] rakam[3] rakam[4]);printf(*quot;%s*quot; satir);sscanf(satir *quot;%d %d %d %d %d*quot; *amp;sonuc[4] *amp;sonuc[3]![]() (sonuc+2) (sonuc+1) sonuc);for (index = 0;index *lt; 5;index++) printf(*quot;Sonuc %d dir. n*quot; sonuc[index]);} ================================================= Bu programda birkac tane degisken tanimliyoruz ve *quot;rakamlar*quot; isimlidiziye de *quot;sprintf*quot; fonksiyonunu incelemek icin rastgele sayilaratiyoruz. Bu fonksiyon *quot;printf*quot; e cok benzer. Yegane farki ciktisiniekrana yazmak yerine bir karakter dizisine yazmasidir. Bunu da ilkparametresi olarak veriyoruz. Yani program bu fonksiyondan dondukten sonra *quot;satir*quot; dizisinin icinde bes tane rakam olacaktir. Ikinci ileucuncu rakamlar arasindaki bosluk *quot;sscanf*quot; fonksiyonunun bunlarinuzerinden atlamasini gormek icindir. Bunun altinda *quot;printf*quot; i kullanarak bu hazirladigimiz satiri yaziyoruz. Daha sonra gordugunuz *quot;sscanf*quot; fonksiyonu ise *quot;scanf*quot; gibi ekrandanokumak yerine bizim *quot;satir*quot; dizimizden degerleri okur. Gordugunuz gibi![]() *quot;sscanf*quot; e rakamlarin konacagi dizinin adreslerini cok degisik sekillerde verebiliyoruz. Ilk ikisi sadece dizideki 5. ve 4. elemanlarin adresleriniindex vererek tanimliyorlar sonraki ikisi ise dizinin baslangic adresinebir offset (bir rakam) ekleyerek buluyorlar. Sonuncusu ise koseliparantezi olmayan bir dizinin o dizinin baslangic elemaninin adresinigostereceginden hicbir sey gerektirmiyor.Bazen bir programin ciktilarini standart ciktidan (ekrandan) bir baskakutuge yoneltmek istenir. Fakat hata mesajlarini gibi bazi mesajlari halaekrana yollamak isteyebilirsiniz: OZEL.C: ================================================= #include *lt;stdio.h*gt; main() { int index; for (index = 0;index *lt; 6;index++) { printf(*quot;Bu satir standart ciktiya gidiyor.n*quot;);fprintf(stderr *quot;Bu satir ise standart hataya gidiyor.n*quot;);} exit(4); /* Bu komut DOS 'un ERRORLEVEL komutu ile bir batch file'da(yigit kutugunde) kontrol edilebilir. Bu programin d*#8221;nd£rd£g£ deger soyle kontrol edilebilir:A*gt; COPY CON: DENE.BAT *lt;RETURN*gt; OZEL IF ERRORLEVEL 4 GOTO DORT (Dortten kucukse buraya devam eder..). . GOTO BITTI ORT (dort yada buyukse buraya devam eder). . :BITTI *lt;F6*gt; *lt;RETURN*gt; */ } ================================================== Bu program bir dongu ve icinde iki satirdan olusur. Bu satirlardan birtanesi standart ciktiya bir tanesi de standart hataya gider. Buradagordugunuz *quot;fprintf*quot; komutu *quot;printf*quot; e cok benzer fakat ciktinin nereyegidecegini de belirtmenizi saglar. Bu alanda bir sonraki konuda daha uzun duracagiz. Program calisinca ekranda on iki tane satir goreceksiniz. Sayet buprogrami: A*gt; OZEL *gt; CIKTI seklinde calistirirsaniz ekranda sadece alti tane standart hataya gidenmesajlari goreceksiniz. Geri kalan (standart ciktiya giden) alti tanesi ise *quot;cikti*quot; isimli kutukte yer alacaktir.YA exit(4) KOMUTU ? Bu programdaki en son satir olan *quot;exit(4)*quot; komutu programi sona erdirir![]() ve dort degerini DOS a dondurur. Parantezlerin arasinda 0 ila 9 degerleri kullanilabilir. Sayet bir *quot;batch*quot; (yigit) kutugu icinde bu programi calistiriyorsaniz 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 icin dolar sembolunu bekleyin. *quot;getch*quot; fonksiyonunu kullanarakprogramin tusa basilir basilmaz islemesini saglayin. F tuslari gibi ozel tuslara basarak ne oldugunu kaydedin. Her fonksiyon tusundan iki tane deger donecektir. Birincisi sifir olup ozel bir tusa basildigini haberverecektir. |
| | |
| | #9 (permalink) |
Arthur | Cevap: C Programlama Dili DIKKAT DIKKAT DIKKAT Bu noktada C nin en sasirtici ve en cok yapilan hatasina rastliyoruz.*quot;getc*quot; fonksiyonundan geri donen degisken bir karakterdir dolayisi ilebunu *quot;char*quot; tipi bir degiskene atayabiliriz. Hatirlayalim ki bir *quot;char*quot;degiskeni 0 ila 255 arasindaki degerleri alabilir. Fakat cogu C derleyicilerinde EOF karakteri -1 olarak tanimlanmistir -yani *quot;char*quot; degiskeninin disinda - Bu nedenle sayet char kullanirsak![]() program kutugun sonunun geldigini bulamaz ve sonsuz bir dongude takilir.Bunun onune gecmesi kolaydir: EOF karakteri donmesini beklediginiz durumlarda daima *quot;int*quot; tipi bir degisken kullanin.Sayet sizin derleyiciniz icin EOF karakterinin ne oldugunu ogrenmek isterseniz *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; *quot;r*quot;);do { c = fscanf(fp1 *quot;%s*quot; birkelime); /* kutukten bir kelime okuyalim */printf(*quot;%sn*quot; birkelime); /* ekrana yazalim */} while (c != EOF); /* ta ki EOF olana kadar */ fclose(fp1); } ================================================ Bu program nerdeyse bir oncekinin aynisidir. Burada kelime kelime okumakicin *quot;fscanf*quot; fonksiyonunu kullaniyoruz cunku *quot;fscanf*quot; fonksiyonu birbosluga gelince okumayi birakir.FAKAT BIR PROBLEM VAR Programi inceleyince verinin kutukten okundugunu ekrana yazildigini vedaha sonra EOF olup olmadiginin kontrol edildigini goruyoruz. Bu nedenle ![]() istemedigimiz birsey ekrana yazilmis oluyor. Buyuk ihtimalle programinsonunda en son kelimeyi bir daha yaziyoruz - cunku zaten *quot;birkelime*quot; ninicinde idi o deger. Buna mani olmak icin 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; *quot;r*quot;);do { c = fscanf(fp1 *quot;%s*quot; birkelime); /* kutukten bir kelime oku... */if (c != EOF) printf(*quot;%sn*quot; birkelime); /* ekrana yaz... */} while (c != EOF); /* ta ki EOF olana dek.. */ fclose(fp1); /* kutugu kapa */ } ================================================ Gordugunuz gibi bir *quot;if*quot; komutu ile sayet kutugun sonuna gelipgelmedigimize bakiyoruz. Aslinda bu problem KAROKU.C da da vardi fakatorada pek gorunmuyordu. SONUNDA BUTUN BIR SATIR OKUYORUZSATIROKU.C: ================================================= #include *quot;stdio.h*quot; main() { FILE *fp1; char birkelime[100]; char *c; fp1 = fopen(*quot;ONSATIR.TXT*quot; *quot;r*quot;);do { c = fgets(birkelime 100 fp1); /* bir satir okuyalim */if (c != NULL) printf(*quot;%s*quot; birkelime); /* ekrana yazalim */} while (c != NULL); /* ta ki NULL olana kadar.. */ fclose(fp1); } =============================================== Bu program simdiye de gorduklerimize benziyor fakat NULL isimli yeni birnesne de katildi. *quot;fgets*quot; fonksiyonu ile bir butun satiri ve sonundaki yeni satirkarakterini (n) bir diziye okur. Ilk parametre olarak donenkarakterleri koyacagimiz yerin adresi tanimlanir ikinci parametrede enfazla kac karakter okunmasina izin verecegimizi belirtiyoruz ve sonolarak da kutuk degiskeninin ismini veriyoruz. o Yani bu fonksiyon ya bir yeni satir karakterine rastlayana kadar yadaizin 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 *quot;stdio.h*quot; main() { FILE *fp1; char birkelime[100] kutukismi[25];char *c; printf(*quot;Kutuk ismini girin -*gt; *quot;); scanf(*quot;%s*quot; kutukismi); /* istenilen kutuk ismini alalim */fp1 = fopen(kutukismi *quot;r*quot;);do { c = fgets(birkelime 100 fp1); /* kutukten bir satir okuyalim */if (c != NULL) printf(*quot;%s*quot; birkelime); /* ekrana yazalim */} while (c != NULL); /* ta ki NULL olana kadar */ fclose(fp1); } =============================================== Burada ilk once kullanicidan *quot;scanf*quot; ile kutuk ismini kullanicidanaliyoruz daha sonra kutugu acip satir satir ekrana yaziyoruz.YAZICIYA NASIL BIRSEY YOLLAYABILIRIZ PRINTDAT.C: ================================================ #include *quot;stdio.h*quot; main() { FILE *guzel *printer;int c; guzel = fopen(*quot;onsatir.txt*quot; *quot;r*quot;); /* kutugu acalim */printer = fopen(*quot;PRN*quot; *quot;w*quot;); /* 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 *quot;onsatir.txt*quot; yi actiktan sonra yazmak icin *quot;PRN*quot; isimlikutugu aciyoruz. Printere bir bilgi yollamak ayni bir kutuge yazmakgibidir fakat standart bir kutuk ismi kullanmak zorundayiz. Bu konudakesin standartlar yoktur fakat genellikle bu isimler *quot;PRN*quot; *quot;LPT*quot;![]() *quot;LPT1*quot; yada *quot;LPT2*quot; dir. Bazi yeni derleyicilerin *quot;stdprn*quot; diye onceden tanimli bir kutuktanimliyicilari vardir. Bu sayede siz printer'i bir kutuk gibi acmadan![]() ona veri yollayabilirsiniz. Program birer birer butun kutugu okuyup ekranda gosterir ve printer'eyollar. EOF kutuk sonu bulundugunda kutukler kapanir ve programvbiter. ODEVLER: 1. Okunacak yazilacak kutuklerin isimlerini kullaniciya soran dahasonra bu ikisini ve printer kutugunu acan bir program yazin. Program bunlari actiktan sonra kutuk sonu gelinceye kadar okunacak kutugu harfharf okuyup yazilacak kutuge ve yaziciya bu karakteri yollamalidir.2. Programiniz kullaniciya bir kutuk ismi sorsun cevabi alinca da bukutugu 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 anakadar kullandigimiz veri tiplerinden cok daha karmasik olanlari ![]() tanimlayabilirsiniz. Bir structure daha once tanimlanmis olan veritiplerinin bir araya gelmis halidir - ki bu veri tiplerine daha oncetanimladigimiz structure'lar da dahildir. Bu tanimi rahat anlamanin bir yolu structure'un veriyi kullaniciya yada o programi kullanacak olankisiye 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(*quot;%d yasindaki %c'nin aldigi not %d dir.n*quot;![]() kiz.yas kiz.bas_harf kiz.not);printf(*quot;%d yasindaki %c'nin aldigi not %d dir.n*quot;![]() oglan.yas oglan.bas_harf oglan.not);} ================================================ Program bir structure tanimi ile basliyor. *quot;struct*quot; kelimesinden sonra![]() kume isaretleri arasinda bazi basit degiskenler goruyorsunuz. Bu degiskenler bu structure'i olusturan parcalardir. Kapanan kumeisaretinden sonra iki tane degisken ismi goruyorsunuz: *quot;oglan*quot; ve *quot;kiz*quot;.Bu structure'un tanimina gore *quot;oglan*quot; artik 3 elemandan olusan birdegiskendir. Bunlar *quot;bas_harf*quot; *quot;yas*quot; ve *quot;not*quot; dur ve herbiri kenditiplerinde bir veriyi saklayabilirler. *quot;kiz*quot; degiskeninin de ayni 3 elemani vardir fakat bu baska bir degiskendir. Yani 6 tane basitdegisken tanimlamis olduk.. TEK BIR BIRLESIK DEGISKEN *quot;oglan*quot; degiskenini daha yakindan izleyelim. Daha once soyledigimiz gibi ![]() *quot;oglan*quot; in her elemani basit birer degiskendir ve bu tip bir degiskeninkullanilabilecegi heryerde kullanilabilir. Ornegin *quot;yas*quot; elemani birtamsayi degiskenidir dolayisiyla bir C programinda bir tamsayidegiskeninin kullanilabilecegi her yerde kullanilabilir. Hesaplamalarda ![]() bir sayac olarak I/O islemlerinde vs. Yegane problem bu *quot;yas*quot; isimlibasit degiskeni *quot;oglan*quot; ile beraber kullanmamiz gerekir. Bunu yapmak icinde ikisini de yaziyoruz ve arasina bir nokta isareti koyuyoruz.Oyleyse tum degisken ismi olan *quot;oglan.yas*quot; *quot;oglan*quot; degiskeninin *quot;yas*quot;sahasi oluyor.. Bu yapiyi bu sahaya erismek istedigimiz heryerdekullanabiliriz. Hatta sadece *quot;oglan*quot; yada *quot;yas*quot; dememiz kabuledilmeyecektir. Tek baslarina isimlerin bir manasi yoktur.DEGISKENLERE DEGER ATAMA Yukardaki tanimlamayi kullanarak *quot;oglan*quot; ve *quot;kiz*quot; 'in her uc sahasina(*quot;bas_harf*quot; *quot;yas*quot; *quot;not*quot;) degerler ayabiliriz. Dikkat etmeniz gereken birnokta *quot;oglan.bas_harf*quot;'in bir *quot;char*quot; tipi oldugudur. Bu nedenle![]() programda karakter verisine atanmistir. *quot;oglan*quot; in geri kalan iki sahasi da tanimlandiklari 'tiplerde' degerlere atanir.. Sonra *quot;kiz*quot; isimlidegiskenin 3 sahasi da degerlere atanir. Burada atama sirasinin farketmeyecegini gosterebilmek icin farkli bir sira izlenmistir.BU DEGERLERI NASIL KULLANABILIRIZ?? Alti basit degiskenimizin her elemanina veri atadiktan sonra onlarladiledigimizi yapabiliriz. Bu ilk ornegi basit tutmak icin biz sadecedegerlerini ekrana yazdiriyoruz. *quot;printf*quot; satirinin alistigimizdan farkli olmadigini goreceksiniz. Structure'lar programi daha kolay yazmak ve anlamak icin cok faydali birgruplama metodudur. Bu ilk ornek cok basit oldugundan size structure'ungercek degerini gostermekten acizdir fakat okumaya devam ederseniz![]() structure'un gercekten faydali oldugunu goreceksiniz. |
| | |
| | #10 (permalink) |
Arthur | 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 */ } ford sun_fish 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 oyle */printf(*quot;Ford'un %d tekerlegi var.n*quot; ford.tasit_tip.oto.tekerlekler);if (piper_cub.tasit == OTO) /* hayir degil */printf(*quot;Ucagin %d tekerlegi var.n*quot; piper_cub.tasit_tip.oto.tekerlekler); } ============================================== Bu ornekte union'larin cok rastlanilan bir kullanim tarzini goruyorsunuz.Dusunun ki bircok tip tasittan olusan bir veri bankasi (veri tabani)olusturmak istiyoruz. Bir arabadaki pervane sayisi yada bir teknedeki tekerlek sayisini koymak komik olurdu. Verimli bir veri tabani olusturmakicin bir kismi her cins tasit icin degisik bir kismi ayni tip kalanverileri saklamaniz gerekecektir. Burada bir structure tanimliyoruz ve bunun icine gidebilecek degisiktiplere karar veriyoruz. Ilk once #definelarla bazi sabitlertanimliyoruz daha sonra icindekilerin size hic te yabanci gelmeyecegi*quot;otomobil*quot; isimli bir structure tanimliyoruz fakat degiskentanimlamiyoruz. TYPEDEF KOMUTU Daha sonra *quot;typedef*quot; ile yeni bir cins veri tanimliyoruz. Bu da *quot;int*quot;yada *quot;char*quot; gibi kullanilabilecek tumuyle yeni bir tip tanimliyoruz. Structure'un ismi olmadigini fakat degisken tanimlanacagi yerde![]() *quot;TEKNEDEF*quot; ismini goruyorsunuz. Artik *quot;TEKNEDEF*quot; diye bir tipimiz vardir![]() ve bununla istedigimiz heryerde bir structure tanimlayabiliriz. Bu komut ![]() degisken tanimlamasi yapmiyor fakat sadece tipi tanimliyor.Buyuk harf kullanmak sadece sahsi tercih icindir fakat bir C standartidegildir. Sadece *quot;typedef*quot; i bir degisken isiminden ayri tutmaktadir.Daha once yarattigimiz parcalari kullanan buyuk kesime geldik. Bu structure 5 parcadan olusmustur iki *quot;tasit*quot; ve *quot;agirlik*quot; isimli basitdegisken bir union ve *quot;deger*quot; ve *quot;sahibi*quot; isimli iki basit degiskendaha. Tabii ki burada onemle bakmamiz gereken union tanimlanmasidir.Bakinca bunun 4 parcadan olustugunu goreceksiniz. Ilk parcasi *quot;oto*quot;isimli ve daha once tanimladigimiz bir tipte olan degiskendir. Ikincikismi *quot;tekne*quot; ismindedir ve daha once tanimladigimiz *quot;TEKNEDEF*quot;tipindedir. Ucuncu kesimi ise *quot;ucak*quot; isimli ve union icinde tanimlananbir structure'dur. Sonunda union'un en son parcasi olan *quot;gemi*quot; isimlidegisken de *quot;TEKNEDEF*quot; tipindedir. Umarim bu dordunun gosterilen 3 mettoddan biri ile tanimlanabilecegi ![]() sizin icin aciktir. Normalde herhalde en *quot;temiz*quot; tanim her birinin*quot;typedef*quot; ile tanimlanmasi sayesinde olacaktir. SIMDI NE OLDU? Simdi icine dort cins veri saklayabilecegimiz bir yapimiz var. Herkayitin uzunlugu en buyuk union'u tasiyan kayitin uzunlugunda olacaktir.Bu durumda birinci kesim en buyugudur cunku 3 tamsayi degiskenindenolusmaktadir. Digerleri ise bir karakter ve bir tamsayidanolusmaktadirlar. Yani bu union'un ilk parcasi bu tipteki butunstructure'larin boyunu belirleyecektir. Elde edilen structure her dorttip veriden birini saklamasi icin kullanilabilir fakat bu tip bir birdegiskenin icinde neler saklandigini kontrol etmek programcinin isidir.*quot;tasit*quot; isimli degisken orada ne tip bir tasit saklandigini belirtmekicin kullanilmistir. Programin basindaki dort #define satiri *quot;tasit*quot; inicinde saklanabilecekleri belirtir. Ortaya cikan yapinin kullanimini gostermek icin birkac ornek de vardir.Bazi degiskenlere degerler atanmis birkac tanesinin degeri ekranayazilmistir. Union'lar hele yeni programlamaya baslayanlar tarafindan cok SIKkullanilmaz. Bazen rastlayabilirsiniz ve ne ise yaradiklarini bilmenizdefayda vardir. Su an icin detaylarini ogrenmenize luzum yoktur ve bunedenle bu ornekte fazla vakit harcamayin. Sayet bir gun saha tanimlaridegisen bir yapiya ihtiyaciniz olursa o zaman ogrenebilirsiniz. Fakatkendi igiliginiz icin structure'lara alismaya bakin - onlar daha SIKkullanilirlar. ODEV 1. Icinde *quot;isim*quot; icin bir karakter dizisi *quot;ayaklar*quot; icin bir tamsayidegiskeni ve *quot;kollar*quot; icin bir baska tamsayi degiskeni olan ISIMLI birstructure tanimlayin. Bu structure ile 6 elemanlik bir dizin tanimlayin.Bu sahanin icine degisik bilgiler atayin ve ekrana suna benzer bir ciktisaglayin: 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 yazip verileri ekrana yazmak icin birpointer'dan yararlanin. |
| | |
![]() |
| Bookmarks |
| Etiketler |
dili, programlama ![]() |
| Konuyu Toplam 1 Üye okuyor. (0 Kayıtlı üye ve 1 Misafir) | |
| Seçenekler | |
| |
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.































































