4. BÖLÜM: C FONKSİYONLARI

Ebat: px
Şu sayfadan göstermeyi başlat:

Download "4. BÖLÜM: C FONKSİYONLARI"

Transkript

1 4. BÖLÜM: C FONKSİYONLARI C Fonksiyonları C ye yapısal dil olma özelliğini veren önemli etmenlerden biri fonksiyonlardır. Birden çok kez kullanılacak, tekrarlanacak işlemleri programın ana gövdesinden ayırarak başka bir yerde tanımlamak için fonksiyonlar kullanılır. Bu ayırma ile aynı zamanda programın ana gövdesi basitleştirilip kullanılan değişken miktarı da azaltılır. Aşağıda fonksiyonların genel yapısıyla ilgili fikir vermek için matematik kütüphanesinde tanımlı birkaç önemli fonksiyonun prototipleri verilmiştir (Bu fonksiyonlar kullanılırken #include <math.h> yazılmalıdır). Bu prototiplerde fonksiyonun girdi ve çıktı tipleri tanımlanır. double cos(double arg) radyan cinsinden girilen double tipli arg in cosinüsünü yine double cinsinden verir. double exp(double arg) double tipli arg i kullanarak e arg değerini double cinsinden hesaplar. double fabs(double num) double tipli num değişkeninin mutlak değerini double cinsinden hesaplar. double pow(double base, double exp) İki parametre alır: base ve exp. base exp değerini double cinsinden hesaplar. Bu fonksiyonlar program içinde şöyle kullanılırlar. Örnek 30: double x,y; x = ; y = fabs(x); x = pow(2,y); Programcılar kendi C fonksiyonlarını şöyle yazabilirler. Öncelikle programın başına include direktiflerinin ardından fonksiyonun prototipi yazılır. Ardından da fonksiyonunun ardından programın içeriği eklenir. Daha gelişmiş uygulamalarda prototipler ve fonksiyon içerikleri ayrı dosyalarda kaydedilir ve bu suretle yeni kütüphaneler geliştirilebilir. Örnek 31: Aşağıdaki kuvvet adlı fonksiyon, taban ve us adında iki pozitif tamsayı değişkeni parametre olarak alır ve çıktı olarak taban us değerini verir. Bu haliyle yukarıda verilen pow fonksiyonun tam sayılar için uyarlanmış halidir.

2 /* C programi: kuvvet fonksiyonu */ int kuvvet(int taban,int us); int x =10, y=5, z; z= kuvvet(x,y); int kuvvet(int taban, int us) int i,carpim =1; for (i=1;i<=us;i++) carpim = carpim * taban; return carpim; kuvvet fonksiyonunda iki girdi, bir çıktı bulunmaktadır. Çıktı fonksiyonun içinde bulunan return komutuyla ifade edilir. Fonksiyonlardan çıkış return komutu ne zaman çalıştırılırsa o zaman gerçekleşir. Yani fonksiyonun son satıra kadar çalıştırılmasına gerek yoktur. Örneğin yukarıdaki fonksiyon eksi değerli üsler için çalışmayacaktır, bu durumları kontrol etmek bir if kıyaslama ifadesi programa şu şekilde yerleştirilebilir: int kuvvet(int taban, int us) int i,carpim =1; if (us < 0) return 0; else for (i=1;i<=us;i++) carpim = carpim * taban; return carpim; Fonksiyonun bu yeni hali program içinde çağrıldığında eğer üs değeri negatif ise fonksiyon hatayı ifade için sıfır değerini çıktı olarak verecektir. Eğer yukarıda else kısmı yazılmasaydı fonksiyonun işleyişi değişmeyecekti, çünkü return 0 komutu çalıştırıldığında fonksiyonun işleyişi sona erer. C de eğer fonksiyonun çıktı tipi int ise bunu belirtmeye gerek yoktur. Yani int yazılmaksızın kuvvet(int taban, int us) yazılabilirdi. C fonksiyonlarının bir girdisi olması gerekmediği gibi bir çıktısı olması da gerekli değildir. Çıktıların olmadığı durumlar void kelimesiyle ifade edilir. Aşağıdaki fonksiyonlar bu değişik durumları gösterirler: Örnek 32: a) Girdisi ve çıktısı olmayan fonksiyon: void merhaba() clrscr(); printf( merhaba ); 2

3 b) Girdisi olan çıktısı olmayan fonksiyon: /* Bu program ekranı temizleyip n. satıra merhaba yazar */ void merhaba(int n) int i; clrscr(); for (i=1;i<n;i++) printf( \n ); printf( Merhaba ); c) Girdisi olmayan çıktısı olan fonksiyon: /*Bu program matematikte e değerini hesaplar */ double edegeri() return exp(1); Bir fonksiyon diğer bir fonksiyonu kendi içinde çağırabilir. Örnek 33: Aşağıdaki programda kuvvet fonksiyonu üçüncü dereceden polinom değeri hesaplayan pol adlı fonksiyon tarafından kullanılmaktadır. /* C programi: kuvvet ve pol fonksiyonlarinin icice kullanimi */ int kuvvet(int taban,int us); int pol(int x,int a,int b,int c); int sayi = 4; int s; s=kuvvet(4,2); int kuvvet(int taban,int us) int i,carpim =1; for(i=1;i<=us;i++) carpim = carpim* taban; return carpim; int pol(int x, int a,int b,int c) return c+b*x+kuvvet(x,2); Örnek 33 ek: (yeni bir numara ver) Aşağıdaki program bir olasılık uygulamasını içermektedir. Bu uygulamada binom dağılımının girilen n ve p parametreleri kullanılarak dağılıma göre i) belli bir x değerinin gözlenmesi olasılığı ii) belli bir x değeri ya da x den daha küçük bir değerin gözlenmesi olasılığı hesaplanmaktadır. Belli bir x değerinin gözlenmesi olasılığı şu formülle verilir: n x p( x) p (1 p) x n x 3

4 Bu formülde n ve x doğal sayı, 0 < p < 1 bir reel sayıdır. n n! x ( n x)! x! formülüyle hesaplanır. Belli bir x değeri ya da x den daha küçük bir değerin gözlenmesi olasılığı ise şu formülle hesaplanır: P ( x ) p ( x ) x i 0 Böyle bir program tasarlanırken p(x) ve P(x) için bir fonksiyon yazılması programı geliştirmeyi kolaylaştıracaktır. Ayrıca n x kombinezon hesabı için de bir fonksiyon tanımlanmıştır. Programda kombinezon hesabı, formüldeki pay ve payda değerleri çok yüksek değerlere ulaşabildiği için, kesirlerin çarpımı şeklinde hesaplanmıştır: n n n 1 n 2 n x 1 L x x x 1 x 2 1 /*binom olasilik hesabi*/ #include <math.h> float px(int N, float P, int X); float Px(int N, float P, int X); float komb(int N, int X); void int n,x; float p; printf("binom olasılık hesabı\n"); printf("n parametresi="); scanf("%d",&n); printf("p parametresi="); scanf("%f",&p); printf("olasiligi hesaplanacak x degeri="); scanf("%d",&x); printf("x degeri olasiligi=%f\n",px(n,p,x)); printf("x ya da daha kucuk bir deger olasiligi=%f\n",px(n,p,x)); float px(int N, float P, int X) return komb(n,x)*pow(p,x)*pow(1-p,n-x); float Px(int N, float P, int X) float toplamolas=0; int i; for(i=0;i<=x;i++) toplamolas+=px(n,p,x); return toplamolas; 4

5 float komb(int N, int X) int i; float kombvalue=1, xsay=x; for (i=n;i>n-x;i--) kombvalue=kombvalue*i/(xsay); xsay--; return kombvalue; Global ve Lokal Değişkenler C de bir fonksiyonun içinde tanımlanan değişkenler lokal değişkenlerdir. Bir lokal değişken sadece tanımlandığı fonksiyonun içinde geçerlidir. Örneğin yukarıdaki kuvvet fonksiyonu içindeki i ve carpim birer lokal değişkendir. Bu değişkenleri pol veya main fonksiyonları doğrudan kullanamazlar (ama örneğin pol fonksiyonuna parametre olarak almaları sağlanabilir). Global değişkenler ise hiçbir fonksiyon içinde tanımlanmayan değişkenlerdir. Dolayısıyla tanımlanacakları yer main den önceki kısımdır. Yukarıda hiç lokal değişken yoktur. Aşağıdaki örnekte a ve b birer global değişkendir. Global değişkenlere her fonksiyon ulaşıp kullanabilir, değerini değiştirebilir. # include <stdio.h> int a,b; Dikkat edilecek olursa main de özel amaçlı bir fonksiyondur. Şimdiye kadarki örneklerde değişkenler hem main gövdesi içinde tanımlandığından bunlar lokal değişkenlerdi. Örnek 34: Eğer bir programın içinde aynı adda bir global bir lokal değişken bulunursa öncelik lokal değişkendedir. Aşağıdaki programda bu durum açıklanmıştır. /* C programi: ayni adli lokal ve global degiskenler */ void fonk1(); void fonk2(); int sayac; /* Global degisken */ sayac=100; /* global degiskene 100 atar */ fonk1(); void fonk1() fonk2(); printf( sayac %d dir, sayac); /* ekrana 100 yazar */ 5

6 void fonk2() int sayac=50; /*lokal değiskene 50 atar*/ sayac +=200; /*lokal degisken kullanilir sayac 250 olur */ printf( sayac %d dir, sayac); /* ekrana 250 yazar */ Özyineleme (Recursion) Bir fonksiyonun kendi kendini çağırması anlamına gelir. Bazı veri tabanları (örneğin ikili ağaçlar) üzerinde arama vs. gibi bazı işlemler için özyineleme büyük programlama rahatlığı sağlar. Endüstri mühendisliğinde dinamik programlama için de elverişlidir. Örnek 35: Aşağıdaki fonksiyon faktoriyel hesabı içindir. Faktoriyel(int n) int yanit; if(i==1) return 1; else yanit=n*faktoriyel(n-1); return yanit; Bu fonksiyonda cağrılış sırasını gözlemek için return yanit ifadesinden hemen önce printf( yanit = %d,yanit) komutu kullanılabilir. İşaretçiler Şu ana kadar ele alınan konularda değişkenlerin bellekte nerede tutuldukları konusuna girilmedi. Aslında bu işletim sisteminin (örneğin Windows) üzerine aldığı bir iştir. Ancak daha ileri düzey programlar yazmak için bellekte değişkenlerin hangi adreslerde tutulduğunu bilmeye gerek vardır. İşaretçiler (pointers) bellekteki bir adresi (adresin kendisini, içindekini değil) tutan değişkenlerdir. Adlarından anlaşılacağı gibi bir değeri tutmak yerine değerin tutulduğu değişkene işaret ederler. C dilinde işaretçilerle ilgili işlemler önemli yer tutar. Burada konu kısaca ele alınacaktır. Bellek Adresi Bellekteki değişken (burada int tipinde)

7 1005 Yukarıdaki örnekte bellek adresleri birbirini takip eden numaralardan oluşmuştur, 1000, vs. Bu adreslerde tutulan değerler ise 254, 16, vs. değerleridir. İşaretçiler 254 değeri yerine 254 değerinin depolandığı bellek alanının adresini yani 1000 adresini tutarlar. İşaretçi Değişkenlerin Tanımlanması İşaretçiler tanımlanırken ne tür değişkene (int, double, vs.) işaret ettiklerini belirtmek gerekir. Örnek 36: Aşağıdaki program parçasında char, int ve double tipi değişkenlere işaretçiler tanımlanmıştır. Char *p; /* p char tipi bir değişkenin adresini tutar */ int *t, *s; /* s ve t int tipi değişkenlerin adreslerini tutar*/ double *d; /* d double tipi bir değişkenin adresini tutar */ İşaretçilerde kullanılan iki önemli operatör * ve & operatörleridir. * adresinde bulunan anlamına gelir, işaretçilerle kullanılır. & nın adresi anlamına gelir, değişkenlerle kullanılır. Örnek 37: Aşağıdaki program parçasında tamsayi_adr bir tamsayı işaretçisidir, yani int tipi bir değişkene işaret eder. İlk tanımlandığında herhangi bir değişkene işsaret etmemektedir, hangi değişkene işaret edeceği (yani hangi değişkenin adresini tutacağı) programın dördüncü satırında belirtilmiştir. Beşinci satırda ise tamsayi_adr nin işaret ettiği değişkenin, yani adr adlı değişkenin, tuttuğu değer t değişkenine atanır. int tamsayi = 150; int t; int *tamsayi_adr; /*degisken isimlerinde _ bulunabilir*/ tamsayi_adr = &tamsayi; t= *tamsayi_adr; programda işaretçinin tipiyle değişken tipi uyuşmalıdır, int ve int * gibi, bir float değişken için bir int işaretçisi kullanılmamalıdır. İşaretçilerin Atanmaları Aynı tip işaretçilerin tuttukları adresler birbirlerine atanabilir. Örnek 38: Bu programda p1 ve p2 adlı int tipi işaretçilerin tuttukları adresler birbirlerine atanmaktadır. /*C programi: isaretci atamasi */ 7

8 int x; int *p1,*p2; x = 101; p1 = &x; p2 = p1; /* p1 in tutugu adres p2 ye atanır */ printf( Bellekteki %p adresinde, p2); printf( %d degeri bulunmaktadir, *p2); /* %p adresi hexadecimal olarak yazar. */ Fonksiyonların Değerler ve Referans (Adresleriyle) Çağrılması C fonksiyonları temel olarak iki farklı biçimde çağrılırlar. Daha önce değerler yoluyla çağrılması işlenmişti. Aşağıdaki örneğe bakalım. Örnek 39: /* C programi: fonksiyonun degerle cagrilmasi */ int kare(int k); int t=10; printf( %d %d, kare(t), t); int kare(int k) k = k*k; return k; Bu fonksiyonda t değişkeninin 10 değeri fonksiyona parametre (formal parametre) olarak geçer. Bu parametre fonksiyon içinde bir lokal değişken gibi muamele görür. Yani bellekte ayrı bir değişken olarak yer kaplar. k=k*k komutuyla bu lokal değişkenin değeri değiştirilmiş olur. Bu değişiklik t nin değerini değiştirmeyecektir. Bu durum, fonksiyonun sınırlarını belirleyicidir: Fonksiyon dışarıyla, yani kendisini çağıran diğer fonksiyonla ilişkisini sadece girdi ve çıktılar yoluyla yapmalı, ve girdinin de değerini değiştirmemelidir. Çünkü genellikle girdi fonksiyona değiştirilmek üzere verilmez, sadece işlemde kullanılmalıdır. Örnek 40: Örnek 39 daki fonksiyonun t değişkeninin değerini değiştirebilmesi için değişkenin adresiyle çağrılması gerekir. Bu örnekteki fonksiyon bir int tipi değişkenin adresini parametre olarak alacaktır. Dolayısıyla parametresi bir işaretçi olmalıdır. Ana gövde içinde fonksiyon kare(&t) şeklinde çağrılır. Yani fonksiyona girdi t değişkenin adresidir. Böylece kare fonksiyonu çalıştığı sürece fonksiyon içinde tanımlı k işaretçisi artık t değişkenine işaret eder. /* C programi: fonksiyonun referansla cagrilmasi */ int kare(int *k); 8

9 int t=10; printf("%d %d", kare(&t), t); int kare(int *k) return *k**k; Örnek 41: Şimdi aynı mantığı kullanarak iki tamsayı değişkeni alarak bunların yerlerini değiştiren bir fonksiyon yazalım. Yer_Degistir(int *x, int *y) int gecici; gecici= *x; *x=*y; *y=gecici; Yer_Degistir fonksiyonu programda cağrıldığında değişkenler adresleriyle girilmelidir: Yer_Degistir(&a,&b); Diziler (Arrays) Dizi, aynı tipteki birden çok değişkenden oluşan karmaşık bir değişken tipidir. Diziler tek boyutlu veya çok boyutlu olabilir. Tek Boyutlu Diziler Tek boyutlu dizileri yanyana aynı tip kutulardan oluşmuş bir kutu dizisi olarak hayal edebiliriz. Bu tipler int, long int, double, float, char, hatta işaretçilerden oluşabilir. Şimdi int tipi değişkenlerden oluşan bir dizinin nasıl tanımlanacağını görelim: int ornek[10]; Burada örnek 10 adet int tipi değişkenden oluşan bir dizidir. Bir dizi yan yana kutularla gösterilebilir. Kutular 0 dan başlayarak numaralandırılırlar (indeks numaraları): ornek: Örnek 42: Aşağıdaki kısa program 10 büyüklüğünde int tipi bir dizi tanımlayarak dizinin her elemanına kendi indeks numarasını yazdırır: 9

10 /* C programi: bir dizinin indeks numaralari */ int x[10]; int t; for(t=0;t<10;t++) x[t]=t; Örnek 43: Aşağıdaki kısa programsa kullanıcının gireceği 10 sayının ortalamasını hesaplar: /* C programi: dizilerde ortalama hesabi */ int ornek[10],i,ort; for(i=0;i<10;i++) printf( sayı %d:, i); scanf( %d, &ornek[i]); ort=0; for (i=0;i<10;i++) ort+=ornek[i]; printf( sayıların ortalaması= %d, ort/10); C de dizi sınırlarının ihlal edilip edilmediği kontrol edilmez. Bir programda büyüklüğü 10 olarak tanımlı bir dizinin 12. elemanına bir değer atanabilir. Bu durumda program çalışacak ancak atama, diziye değil eğer olsaydı dizinin 12. elemanının bulunacağı yere yazılacaktır. Bellekteki bu alanda eğer başka bir değişken depoluysa veya bu alanı işletim sistemi kullanıyorsa bütün sistemin çökmesi muhtemeldir. Örnek 44: Aşağıdaki program yukarıda bahsedilen gizli bir hata içerir, dolayısıyla çalıştırılmamalıdır. /* C Programi: Hatalı program çalıştırılmamalı */ int yanlis[10],i; for (i=1;i<100;i++) yanlis[i]=i; Bir dizinin elemanlarına başlangıç değerleri şu şekilde atanabilirler: int not[10]=23,45,56,78,88,97,56,67,78,23; Başlangıç değerleri veriliyorsa dizinin kaç elemanı olduğunu yazmaya gerek yoktur. Bu durumda verilen başlangıç değerlerinin sayısı dizinin eleman sayısını belirler. int not[] = 23,56,78 /* notdizisinin üç elemanı var*/ 10

11 Örnek 45: Aşağıdaki programda 10 kişilik bir sınıftaki öğrencilerin notları bir diziye en ilk değer olarak girilmiştir. Program bu notların en küçüğünü bulan bir fonksiyon içerir. Fonksiyonun girdisi bir dizidir. Ancak dizinin boyutu belli değildir, bu yüzden yukarıda belirtilen türden dizinin boyutunu aşan elemanlarla işlemler yapılmasını bir şekilde önlemek gerekir. Bunun için boyutu N sembolü ile belirtilmiştir. N bir değişken değildir, programda define direktifi ile kullanılmıştır. Programların başında kullanılan bu direktifle bir harf ya da kelimenin belli bir sayı olarak işlem görmesi sağlanır. Bu programda define direktifi N simgesini 10 olarak tanımlar. Yani programda bulunan bütün N ler 10 sayısı olarak işlem görür. /* C programi: Bir dizinin en kucuk degerinin bulunmasi*/ #define N 10 enkucuk_bul(int dizi[]); int not[n]=23,45,56,78,88,97,56,67,78,23; int enkucuk; enkucuk=enkucuk_bul(not); printf( en kucuk = %d,enkucuk); enkucuk_bul(int dizi[]) int i,ek; ek = dizi[0]; for(i=1;i<n;i++) if (dizi[i]<ek) ek=dizi[i]; return ek; Örnek 46: Yukarıdaki fonksiyonda ufak değişiklikler yapalım: Aşağıdaki gecer_not_yaz fonksiyonu, parametre olarak girilen dizinin içindeki geçer notları, yani 60 a eşit veya daha büyük notları ekrana yazdırmaktadır. void gecer_not_yaz(int dizi[]) int i; for(i=0;i<n;i++) if (dizi[i]>=60) printf( %d\n,dizi[i]); Örnek 47: Aşağıdaki fonksiyon ise geçer notların ortalamasını hesaplatmaktadır. float gecer_not_ort(int dizi[]) int i,say; /* say, toplam kac adet gecer not oldugunu sayar*/ float ort=0; say=0; for(i=0;i<n;i++) if (dizi[i]>=60) ort+=dizi[i]; say++; 11

12 ort=ort/say; return ort; Çok Boyutlu Diziler Çok boyutlu dizilerin en bilinen örneği matrislerdir. Bir matris 2 boyutlu bir dizi ile ifade edilir. Aşağıda 5x2 ebatlarında bir matris için tanımlanan int tipi m dizisi verilmiştir: int m[5][2]; /* m dizisinin elemanları int tipindedir*/ Bu değişken şu biçimde düşünülebilir. Dizinin ilk boyutunda 5 eleman vardır ve bu elemanların her biri 2 elemanlı tek boyutlu bir dizidir. Diğer bir açıdan değerlendirelim: m[0] programın içinde kullanıldığında 2 büyüklüğünde tek boyutlu bir dizidir (Aynı şekilde m[1],m[2],m[3] ve m[4] de öyledir). Daha önceden tek boyutlu dizilerde geçerli olan, tanımdan sonra başlangıç değeri atama burada da geçerlidir: int m[5][2] = 1, 1, 2, 5, 6, 8, 9, 21, 8, 67 ; Burada gözetilen sıra iki türlü yorumlanabilir: i) aynen bir matrisin i inci satır ve j inci sütunları gibi, ii) 1, 1 sayıları m nin ilk boyutundaki 5 elemandan ilk elemana atanırlar, 2, 5 sayıları 2 inci elemana, ve 8, 67 sayıları 5inci elemana atanırlar. Örnek 48: Aşağıdaki program parçası 10x10 luk bir matris tanımlayarak matrisi bir çarpım tablosu olarak düzenlemektedir. Örneğin birinci satır üçüncü sütundaki eleman 1x3=3 olur. Ancak C de indeks numaraları 0 dan başladığından i indeksli sütun (i+1) inci sütun, ve j indeksli satır (j+1)inci satır olarak değerlendirilmiştir. int i,j,carpim[10][10]; for(i=0;i<10;i++) for(j=0;j<10;j++) carpim[i][j]=(i+1)(j+1); Burada iç içe iki for döngüsü çalışmaktadır. Döngü içinde işlem gören tek satır olduğu için kullanılan küme parantezleri programdan çıkartılabilir, bu sonucu değiştirmeyecektir. Diğer dikkat edilmesi gereken konu matris indekslerinin matematikte kullanılanın aksine 0 dan başlıyor olmasıdır. Yani matematiksel olarak 12

13 ifade edilen bir matrisin 1 inci satırı C de 0 ıncı satır, n inci sütunu C de n-1 inci sütun olarak işlem görür. Bu çok basit bir fark gibi gözükse de matematik notasyonuna alışmış bir kişi için programlamada zorluklar ortaya çıkarır. Örnek 49: Aşağıdaki program 4x4 lük bir matrisin elemanlarına 0 ile 9 arasında rasgele sayılar atamakta ardından her satır ve sütunun toplamlarını hesaplayarak toplamlardan herhangi ikisinin eşit olup olmadığını araştırmaktadır. Programın amacı bu işlemi çok sayıda tekrarlayarak böyle bir eşitliğin % kaç olasılıkla ortaya çıktığını bulmaktır. Bu tip olasılıklar klasik yöntemler kullanılarak bulunamaz. Çözüm için böyle bilgisayar yöntemlerine ihtiyaç duyulur. Programı birkaç aşamada yazalım. Aşağıdaki küçük program böyle bir matris tanımlayarak elemanlarına rasgele sayı atamaktadır. Matris ebatlarının N ye bağlı tanımlanması sayesinde ilerde tek satır değişikliğiyle farklı ebatlarda matrisler için çalışmak üzere program değiştirilebilir. #include <math.h> #define N 4 int A[N][N]; int toplam[2*n]; int i,j; for(i=0;i<n;i++) for(j=0;j<n;j++) A[i][j]=rand()%10; Şimdi programı tam olarak verelim. /* C programi: matrislerde satir sutun toplami*/ #define N 4 #define M 1000 /* benzetim sayisi*/ int A[N][N]; int toplam[2*n]; int i,j,say; int esitlik,esitliksay=0; for (say=0;say<m;say++) /* A matrisine rasgele deger atar*/ for(i=0;i<n;i++) for(j=0;j<n;j++) A[i][j]=rand()%10; /* toplam matrisinin elemanlarini sifirlar*/ for(i=0;i<2*n;i++) toplam[i]=0; /* toplamin ilk dort elemani satir toplamlari*/ for(i=0;i<n;i++) for(j=0;j<n;j++) toplam[i]+=a[i][j]; /*toplamin son dort elemani sutun toplamlari*/ for(j=0;j<n;j++) 13

14 for(i=0;i<n;i++) toplam[j+4]+=a[i][j]; /*hic esitlik var mi?*/ esitlik=0; /* esitlik yok*/ for(i=0;i<2*n-1;i++) for(j=i+1;j<2*n;j++) if(toplam[i]==toplam[j]) esitlik=1; if(esitlik) esitliksay++; clrscr(); printf("esitlik olasiligi= %f",(float)esitliksay/m); Programda ilk önce dikkat edilmesi gereken en dıştaki for döngüsüdür, M kez tekrar etmektedir. Yani M kez matrise rasgele sayılar atanmaktadır. M define direktifiyle 1000 olarak verilmiştir, sadece bu satır değiştirilerek 500 veya yapılabilir. Programda kullanılan toplam matrisinin boyutu 2*N dir. İlk N elemanına N satır toplamı, son N elemanına da N sütun toplamı atanmaktadır. Ardından eşitlik kontrolü içiçe iki for döngüsüyle kontrol edilmektedir. Burada i inci elemanın sırayla i+1 inci, i+2 inci,. elemanlara eşit olup olmadığı kontrol edilmektedir. i indeksi, 0 dan 2*N- 1 e kadar değer almaktadır. Eğer herhangi bir eşitlik bulunursa esitlik adlı değişkenin değeri 1 olur, ardından dış döngülerde o ana kadar bulunan eşitlik sayısını tutan esitliksay değişkeninin değeri 1 artırılır. Eşitlik kontrolü sırasında eşitlik bulunduktan sonra döngülerin devamına gerek yoktur, bu gereksiz tekrarlar nasıl önlenebilir? Toplam dizisi hesaplanırken satır ve sütunlar için iki döngü kullanmak yerine tek döngü nasıl kullanılabilir? Fonksiyon Parametresi olarak iki ve daha Yüksek Boyutlu Diziler Daha önce tek boyutlu dizilerin boyut belirtilmeden bir fonksiyonun parametresi olabileceği belirtilmişti. Ancak iki veya daha yüksek boyutlu dizilerde ilk boyut dışındaki boyutlar için büyüklük belirtmek gerekir: fonk (int uc_boyut[][5][7]); bu prototip fonksiyonun girdisi üç boyutludur. ilk boyutun verilmesine gerek yoktur. Fonksiyon içinde kullanıldığında, örneğin, boyut[0], 5x7 boyutlarında iki boyutlu bir dizi olarak değerlendirilir. Örnek 50: Aşağıda verilen topla_matris fonksiyonu 5 sütunlu ve n satırlı iki matrisi (A ve B) toplamakta sonucu A matrisine yazmaktadır. Satır sayısı n dışarıdan beslenmektedir. void topla_matris(float A[][5], float B[][5], int n) int i,j; for(i=0;i<n;i++) for(j=0;j<5;j++) A[i][j]+=B[i][j]; 14

15 Yukarıdaki fonksiyon, dikkat edilecek olursa bir çıktı vermemektedir. Bu taktirde nasıl olup A nın değerini değiştirmektedir? Bunu anlayabilmek için işaretçilerle diziler arasındaki yakın ilişkiyi incelemek gerekir. Bu konu şimdi ele alınacaktır. Ama kısaca bu sorunun cevabı parametrelerde aslında dizi adreslerinin otomatik olarak fonksiyona geçirilmesidir. İşaretçiler ve Diziler Arasındaki İlişki Bir dizinin adı herhangi bir indeks gösterilmediğinde dizinin ilk adresini verir, yani bir işaretçi gibi davranır. (Bu ilk adrese dizinin baz adresi adı verilir.) Örnek: int Z[10], i; Bu tanımlamada Z, 10 büyüklüğünde int tipi bir dizidir. Bellekte 20 (10x2) byte yer kaplar. Z ifadesi programda tek başına Z dizisinin ilk adresini ifade eder. Yani &Z[0] ifadesi Z ye eşittir. İndeks numarası: Bellek Adresi: Z nin kapladığı bellek alanları byte cinsinden yukarıda verildiği gibi olsun. Bu durumda 0 indeksli elemanın adresi 100, 1 indeksli elemanın adresi 1, vs. olur. İkişer farkın nedeni int tipi değişkenlerin iki byte bellek alanı kaplamasıdır. Bu durumda Z=&Z[0]=100 olacaktır. İşaretçilerde Toplama-Çıkartma İşlemleri: (+, -, ++, --, +=, -= ) Yukarıdaki örnekte Z+1= 102, Z+2= 104, vs. olur. Yani toplama, işaretçinin tipinin (burada int) kapladığı alanın katları olarak artar. Bu kural çıkartma için de geçerlidir. Örnek 51: Şimdi yukarıdaki örnekte Z dizisinin tüm elemanlarını sıfıra eşitleyen bir program yazalım. int Z[10], i; for (i=0;i<10;i++) Z[i]=0; 15

16 Örnek 52: İşaretçilerle ilgili öğrendiğimiz son özellikler yardımıyla bu iş şöyle yapılabilir: int Z[10], *p; /* p int tipi bir işaretçi*/ for(p=&z[0];p<&z[10];p++) *p=0; Örnek 53: Bu program küçük bir değişiklikle şöyle de yazılabilir: int Z[10], *p; /* p int tipi bir işaretçi*/ for(p=z;p<&z[10];p++) *p=0; İşaretçiler yukarıda olduğu şekilde kıyaslanabilirler, ama farklı iki diziye işaret eden işaretçileri kıyaslamak makul bir iş olmayacaktır. Örnek 54: Şimdi aşağıdaki bir program parçasını inceleyelim. Bu programda p1 ve p2 nin tuttukları (işaret ettikleri) adresler arasındaki fark int cinsinden verilecektir. Yani çıktı 3 olacaktır. p1-p2 özel bir tipte üretileceğinden sonucu int tipine çevirmek için (int) cast işlemi yapılmıştır. int Z[10],*p1,*p2; p1=z[3]; p2=z[0]; printf( %d\n, int(p1-p2)); Örnek 55: Son olarak şöyle bir program parçasını inceleyelim: float B[20]; float *p; p=b; int i=7; Bu atamanın ardından şu ifadeler eşit olacaktır: p, &B[0] ve B Aynı zamanda şu ifade grupları da eşit olacaktır: p+i, &B[i] ve B+i, *(p+i), B[i], ve *(B+i) İşaretçilerde NULL İfadesi Bir işaretçi bir bellek alanına işaret etmiyorsa sıfır değerini alır. stdio.h dosyasında 16

17 #define NULL 0 (veya benzeri bir ifadeyle) NULL ifadesi sıfır olarak tanımlanmıştır. Dolayısıyla bir işaretçinin bir yere işaret etmemesi için örneğin p =NULL; komutu kullanılır. NULL her tip işaretçiyle kullanılabilir. (float, int, vs.) Char tipi Diziler Kelimeleri bellekte tutmak için C nin özel bir değişken tipi yoktur. Bunun yerine char tipinde bir boyutlu diziler kullanılır. Aşağıdaki programı parçasını inceleyelim. Örnek 56: char str[9]; int i; for(i=0;i<9;i++) str[i]= A +i; Yukarıdaki program çalışınca str dizisi şu şekli alır: A B C D E F G H str[i] = A +i; komutu şöyle çalışır. A char tipi ve i int tipi olduğuna göre, toplama işleminden önce char tipi değişken int tipine dönüştürülür (char tipi değişkenlerin ASCII karakter setinde bir sayısal karşılıkları vardır). Çıkan sonuç da str[i] ye atanır. Katarlar (String) C dilinde kelimeleri depolamak için katarlar (string) kullanılır. Katarlar için C de ayrıca bir değişken tanımlanmamıştır. Tanımı yukarıdaki örnekte yer alan str değişkenine benzer. Katarların ayırt edici özelliği, bir kelime bittikten sonraki elemana NULL adı verilen \0 işareti konmasıdır. Bu durumda 10 karakterli bir kelimeye depolamak için 11 büyüklüğünde bir katar tanımlamak gerekir: char ktr[11]; Örnek 57: Bir katara klavyeden bilgi girişinin en kolay yolu gets() fonksiyonunu kullanmaktır. Çıkış da benzer şekilde puts() fonksiyonu ile yapılır: 17

18 /* C programi: gets fonksiyonu */ char ktr[11]; printf( Bir kelime giriniz: ); gets(ktr); printf( \ngirdiginiz kelime: ); puts(ktr); Bu program çalıştığında ekrana yazılan 10 veya daha az haneli kelime ktr ye harf harf yazılır. Diyelim girilen kelime Ankara olsun. gets() fonksiyonu çalıştıktan sonra ktr nin son hali şöyle olacaktır: A n k a r a \0 Bu durumda ktr katarının sadece ilk 7 elemanı kullanılmış olur (0-6 indeksli elemanlar) arasında ne olduğu önemli değildir, boş olduğunu düşünebiliriz. C derleyicisi için NULL (\0) işareti kelimenin nerede bittiğini kesin olarak tayin eder. Girilecek kelimenin 10 haneden büyük olmaması kullanıcının sorumluluğundadır, C bu konuda bir kontrol yapmaz, eğer 15 harflik bir kelime ekranda okutulup ktr ye yazdırılırsa bu durumda daha önce diziler bahsinde anlatıldığı gibi istenmeyen sonuçlar doğacaktır. Katarlar üzerinde çalışan özel fonksiyonlar vardır; bunlar string.h başlık dosyasında yer alırlar. Aşağıda bunlardan önemli dört tanesi incelenecektir: strcpy(katar1,katar2) strcat(katar1,katar2) int strlen(katar1) int strcmp(katar1,katar2) katar2 yi katar1 e kopyalar. katar2 yi katar1 in sonuna ekler. katar1 in \0 hariç harf uzunluğunu verir. katar1 ve katar2 yi kıyaslar. Eğer bu iki katar aynıysa 0 değeri verir. Leksikografik olarak (Alfabetik sıraya göre) katar1 katar2 den önce gelirse negatif bir sayı, sonra gelirse pozitif bir sayı döndürür. Örnek 58: Şimdi bu katar fonksiyonlarını bir küçük programda değerlendirelim: /*C Programi: katar (string) fonksiyonlari */ #include <string.h> int k,m; char s1[10], s2[20],s3[30]; strcpy(s1, merhaba ); strcpy(s2, oradaki ); strcat(s1,s2); /*s1 in sonuna s3 eklenir. içerik merhabaoradaki\0 olur. */ 18

19 strcpy(s3,s1); /*s1 in yeni hali s3 e kopyalanır*/ k=strlen(s1); /* k 14 olur */ m=strlen(s2); /* m 7 olur */ printf(s3); printf( %s,s3); /*ikisi aynı işi yapar*/ printf( %s %s,s1,s3); Örnek 59: Şimdi de ekrandan bir kelime okuyup içinde kaç sesli ve kaç sessiz harf oduğunu hesaplayan bir programı ele alalım. Bu program programın içinde verilen bir harfin, ki bu a harfi olarak girili durumda, kullanıcının gireceği bir kelime içinde olup olmadığını kontrol eder. Programda kullanılan strchr() fonksiyonu iki parametre alır, ilki aramanın yapılacağı katar, ikincisi de aranacak karakterdir. Ancak aranacak karakterin önce int tipine dönüştürülmesi gereklidir. Fonksiyon eğer aranan karakter yoksa NULL, aksi taktirde aranan karakterin bulunduğu ilk yerin adresini döndürür. /* C programi: strchr() fonksiyonu */ #include <string.h> char secim='a'; char kelime[30]; puts("bir kelime giriniz: "); gets(kelime); if(kelime[0] == NULL) printf("bir kelime girmediniz"); else if(strchr(kelime,(int)secim)) printf("secilen harf kelimede var"); else printf("secilen harf kelimede yok"); Alıştırma olarak bu programı kullanıcının gireceği herhangi bir karakteri arayacak şekilde geliştiriniz. Daha da ileri bir aşama olarak girilen kelimede kaç sesli harf bulunduğunu hesaplatabilirsiniz. Dosyalar Buraya kadar ele alınan konularda sabit disk veya floppy disketten bir dosyanın okunması veya bir dosyaya veri kaydedilmesi bahsine hiç girilmedi. Ancak bu işlemleri yapmayan bir program gerçek hayatta düşünülemez. Teknik olarak dosyaya veri kaydına giriş (input), veri okunmasına da çıkış (output) işlemi adı verilir. Genel olarak bir disk üzerinde veriler iki şekilde saklanır, metin dosyaları (text files) ve ikili dosyalar (binary files). Metin dosyalarında herşey karakterler şeklinde ifade edilir. Örneğin kaydedeceğiniz sayıları karakterler şeklinde kaydetmek gerekir. Bu durumda sayısını kaydetmek için ondalık hane ayıracını da hesaba katarsak disk üzerinde 8 karakterlik yer gerekecektir. İkili dosyalarda ise sayılar bellekte nasıl korunmuşlarsa diske de öyle yazılırlar. Örneğin sayısı bir float tipi değişkense bellekte 4 byte da depolanacak diske de bu 4 byte olduğu gibi 19

20 kaydedilecektir. Elbette bu durumda ikili dosyayı örneğin Word gibi bir metin editörüyle açıp okumak mümkün değildir. Nasıl bir metin editöründe imleç yazma/silmenin metinin neresinde yapılacağını gösteriyorsa benzer bir imleç de dosyalar üzerinde işlem yapılan yeri gösterir. Bu imleç kayıt işaretçisi dir (Kİ). C de dosyalarla ilgili işlemler için şu fonksiyonlar mevcuttur: fopen() fclose() putc() getc() feof() fprintf() fscanf() fputs() fgets() fwrite() fread() fseek() Dosya oluşturmak ve açmak için Dosyayı kapatmak için. Dosyaya karakter yazmak için. Dosyadan karakter okumak için. Dosya sonuna gelinip gelinmediğini kontrol için. Dosyaya formatlı yazmak için. Dosyadan formatlı okumak için. Dosyaya katar yazmak için. Dosyadan katar okumak için. Dosyaya dizi yazmak için. Dosyadan dizi okumak için. Verilere ragele erişim için. Bir dosyaya veri giriş çıkışı yapabilmek için öncelikle o dosyanın açılması gerekir. Bu işlem için FILE işaretçisi (FILE dosya anlamındadır) tipinde özel bir işaretçiye gerek duyulur. Dosyanın açılması şu şekilde gerçekleştirilir: FILE *di; di = fopen(dosyaadı,modu); Dosya fopen() fonksiyonuyla açılırken adı ve ne amaçla açıldığı bildirilmelidir. Dosya adı bir katardır, ilkdosya.doc gibi doğrudan verilebilir. Turbo C, DOS işletim sistemi altında çalıştığından DOS taki kısıtlamalara uymak gerekir. Bunlar, adın en fazla 8 karakterden oluşması ve tipin de en fazla 3 karakterden oluşmasıdır. Örneğin ilkdosya1.abcd adı bu iki kuralı da ihlal etmektedir. Dosya modları dosyanın hangi amaçla açılacağını belirtir: Metin Dosyaları İçin: rt wt at r+t w+t a+t Yalnızca okuma için açar. Kİ dosya başına konumlanır. Yalnızca yazma için yazar. Eğer aynı adlı dosya varsa içeriği kaybolur, dosya yoksa onu oluşturur. Kİ dosyanın başına konumlanır. Ekleme yapmak için açar. Kİ dosyanın sonuna konumlanır.dosya yoksa onu oluşturur. Okuma ve yazma için açar, Kİ dosyanın başına konumlanır. w ile aynı, ancak okuma da yapabilir. Ekleme için açar. Kİ dosyanın sonuna konumlanır. Eğer dosya yoksa oluşturur. Okuma ve yazma yapabilir. 20

21 İkili Dosyalar İçin: rb wb ab r+b w+b a+b Yalnızca okuma için açar. Kİ dosya başına konumlanır. Yalnızca yazma için yazar. Eğer aynı adlı dosya varsa içeriği kaybolur, dosya yoksa onu oluşturur. Kİ dosyanın başına konumlanır. Ekleme yapmak için açar. Kİ dosyanın sonuna konumlanır.dosya yoksa onu oluşturur. Okuma ve yazma için açar, Kİ dosyanın başına konumlanır. w ile aynı, ancak okuma da yapabilir. Ekleme için açar. Kİ dosyanın sonuna konumlanır. Eğer dosya yoksa oluşturur. Okuma ve yazma yapabilir. fopen() fonksiyonu, bir adres döndürür; bu adres dosya açılmazsa NULL, açılırsa dosya bilgilerinin saklandığı yapının başlangıç adresidir. Bu adres daha sonra diğer dosya fonksiyonlarında kullanılacağı için bir işaretçiye (biz di adını verdik) atanır. Bir dosyanın açılmaması için pekçok neden olabilir. Okumak için açılan dosyanın varolmaması, üzerine yazılmak istenen dosyanın o anda başka bir program tarafından kullanılıyor olması, diskte alan yetersizliği, vs. Dolayısıyla fopen() kullanıldığında dönen adresin NULL olup olmadığı mutlaka kontrol edilmelidir. Örnek 60: Aşağıdaki program parçasında dosyanın fopen() ile açılıp açılmadığı kontrol edilmekte, açılmadıysa exit() fonksiyonuyla program sonlandırılmaktadır. Kıyaslama ilk bakışta uzun ve karışık gelecektir, ama dosya kullanımında kalıplaşmıştır. Dosyalar konusunu yeni öğrenen bir kimse önce di= fopen( ilkdosya.doc ), w ); satırını çalıştırıp ardından di nin NULL olup olmadığını kontrol etmek isterdi. FILE *di; if(di=fopen( ilkdosya.doc, wt ) == NULL puts( DOSYA ACILMASINDA HATA!\n ); exit(0); Örnek 61: Aşağıdaki program kullanıcının gireceği adla bir metin dosyası oluşturur, ardından kullanıcının gireceği ad ve soyadları sırayla bu metin dosyasına kaydeder. Kullanıcı ad soyad yerine enter tuşuna bastığında veri giriş işlemi son bulur. Bu programdan fputs() fonksiyonunun kullanımı rahatlıkla anlaşılmaktadır. Bir dosya ile ilgili işlemler bitirildikten sonra dosyanın kapatılması gerekir, bu fclose() fonksiyonu ike yapılır. Dosya hatasız kapatılmışşsa fclose(), 0 sayısal değerini döndürür. Bu metin dosyası daha sonra örneğin WordPad, veya MS Word ile açılabilir. 21

22 /*C programi: Bir metin belgesine veri girisi*/ FILE *di; char dosya[81],string[256],kr; printf( Dosya adini girin: ); gets(dosya); if (di= fopen(dosya, wt ) == NULL) printf( DOSYA ACILMASINDA HATA!\n ); exit(0); while(1) printf( Adi Soyadi: ); gets(string); if (string[0] == NULL) /* ad soyad girilmesi */ break; else fputs(string, di); fputs( \n,di); fclose(di); Örnek 62: Şimdi yukarıdaki programın tam ters işlemini yapan bir program ele alalım. Bu program yukarıdaki program veya benzer bir programla hazırlanmış bir metin belgesini açarak belgedeki her satırı ekrana yazdırır. Burada kullanılan fgets() fonksiyonunun kullanımı da fputs() a benzemektedir, tek fark programdan okumanın yeni satır işaretine (satır sonu işareti de denir) kadar yapılmasıdır. Bu işaret fputs() veya fprintf() foknsiyonundaki \n ile programa konur. /*C programi: Bir metin belgesinden veri okuma*/ FILE *di; char dosya[81],string[256],kr; printf( Dosya adini girin: ); gets(dosya); if (di= fopen(dosya, rt ) == NULL) printf( DOSYA ACILMASINDA HATA!\n ); exit(0); while(fgets(string, di)!= NULL) printf(string); fclose(di); Yukarıdaki örneklerde dosyaya giriş çıkış fgets() ve fputs() fonksiyonlarıyla gerçekleşti. Bunlar yerine dosyaya formatlı erişim için fprintf() ve fscanf() fonksiyonları kullanılabilir. Bu fonksiyonların kullanımı printf() ve scanf() ile hemen hemen aynıdır. Fark, dosya işaretçisi belirtmek suretiyle giriş çıkışın ekrandan değil bir dosyadan yapılıyor olmasıdır. 22

23 Örnek 63: Aşağıdaki örnekte fprintf() kullanılarak celcius sıcaklık derecesini fahrenhiet sıcaklık derecesine çeviren bir tablo bir dosya halinde üretilmektedir. /* C programi: metin dosyasina formatli giris */ FILE *di; int celcius; float fahrenheit; if((di=fopen("donusum.txt","wt")) == NULL) printf("dosya ACILMASINDA HATA!\n"); exit(0); printf("celcius fahrenheit"); for(celcius= -20; celcius<41; celcius+=2) fahrenheit=celcius*1.8+32; fprintf(di, "%d %f\n",celcius,fahrenheit); fclose(di); printf("islem TAMAM"); Örnek 64: Yukarıda hazırlanan dosyayı açıp ekrana yazdırmak için de fscanf() fonksiyonunu kullanan bir program yazmak gereklidir. Aşağıda verieln program bu işlemi yapar, programda while döngüsünde kullanılan feof() fonksiyonu dosyanın sonuna erişildiğinde doğru, yani sıfırdan farklı bir değer döndürür. Böylece dosya açıldığında kaç satır bulunduğunu önceden bilmeye gerek kalmaz. /* C programi: metin dosyasindan formatli çikis */ FILE *di; int celcius; float fahrenheit; if((di=fopen("donusum.txt","rt")) == NULL) printf("dosya ACILMASINDA HATA!\n"); exit(0); while(!feof(di)) fscanf(di, "%d %f",&celcius,&fahrenheit); printf("%d %f\n",celcius, fahrenheit); fclose(di); printf("islem TAMAM"); Şimdiye kadar metin dosyaları ele alındı. İkili dosyalarda veriler bellekte depolandıkları şekilde, yani o byteların aynen kopyaları alınarak sabit diske kaydedilirler. Örnek 65: Çok basit bir örnek üzerinde 3 değişkeni kaydeden bir program ele alalım. Bu programda değişkenleri kaydetmek için fwrite() fonksiyonu kullanılmaktadır. Fonksiyonun parametreleri sırasıyla kaydedilecek değişkenin adresi, bu değişkenin 23

24 byte cinsinden uzunluğu (bu sizeof() fonksiyonuyla hesaplanır), bu değişkenden kaç adet kaydedileceği ve dosya işaretçisidir. /* C programi: ikili dosyalara giris */ FILE *di; int i = 5; float f = 3.71 ; char c = 'e'; if((di=fopen("veriler.bin","wb")) == NULL) printf("dosya ACILMASINDA HATA!\n"); exit(0); fwrite(&i,sizeof(int),1,di); fwrite(&f,sizeof(float),1,di); fwrite(&c,sizeof(char),1,di); fclose(di); printf("islem TAMAM"); Örnek 66: Aşağıdaki program ise yukarıdaki programda üretilen dosyadan bu verileri okuyup ekrana yazdırır. (Yukarıda üretilen program MS Word gibi bir metin editörü tarafından açıldığında anlamsız semboller belirecektir.) /* C programi: ikili dosyalardan cikis */ FILE *di; int i ; float f ; char c = 'e'; if((di=fopen("veriler.bin","rb")) == NULL) printf("dosya ACILMASINDA HATA!\n"); exit(0); fread(&i,sizeof(int),1,di); fread(&f,sizeof(float),1,di); fread(&c,sizeof(char),1,di); fclose(di); printf("%d %f %c",i,f,c); Yukarıda gösterile fread() ve fwrite() fonksiyonlarının asıl faydası aynı tür çok sayıda verinin yazımı ve okunmasını sağlamasıdır. Bunların en tipik örneği bir dizinin okunması ve yazılmasıdır. Dizinin elemanları, int, float, char olabileceği gibi katarlar, hatta bir sonraki kısımda incelenecek yapılar (structs) olabilir. Örnek 67: Aşağıdaki programda içinde 10 eleman bulunan bir dizi bir ikili dosyaya yazılmaktadır. Programdaki fwrite() fonksiyonunda ilk parametre &a değil a dır. Çünkü a aynı zamanda dizinin ilk elemanının adresidir. fwrite() bu adresten başlayarak 10 adet int değişkeni dosyaya yazar. 24

25 /* C programi: ikili dosyalara dizi girisi */ FILE *di; int a[10]= 0,1,2,3,4,5,6,7,8,9; int tane,i; if((di=fopen("intdizi.abc","wb")) == NULL) printf("dosya ACILMASINDA HATA!\n"); exit(0); fwrite(a,sizeof(int),10,di); fclose(di); printf("islem TAMAM"); Örnek 68: Yukarıda yazılan matrisi dosyadan okutmak için de benzer bir program yazarız. /* C programi: ikili dosyalardan dizi cikisi */ FILE *di; int a[10]; int tane,i; if((di=fopen("intdizi.abc","rb")) == NULL) printf("dosya ACILMASINDA HATA!\n"); exit(0); fread(a,sizeof(int),10,di); fclose(di); printf("islem TAMAM"); /* okunan diziyi ekrana yazdir*/ for(i=0;i<10;i++) printf("%d ",a[i]); Yukarıdaki örneklerde fwrite() ve fread() fonksiyonları şu şekilde de yazılabilirdi: fwrite(a,sizeof(a),1,di); ve fread(a,sizeof(a),1,di); İlk komutu ele alırsak; a adresinden başlayarak a nın büyüklüğü kadar veri (bir tane) dosyaya yazılır. Benzer bir şekilde kullanıcının klavyeden gireceği üç adet 10 büyüklüğünde vektörü bir dosyaya nasıl kaydedersiniz? Bu programı alıştırma olarak yazınız. Ardından, bu dosyadan üç vektörü okutup bunların toplamını ekrana yazdıran bir program yazınız. 25

26 Yapılar (Struct) Bir yapıda farklı değişkenler bir araya getirilip gruplanır ve tek isim altında anılır. Bir yapı oluşturmak önce yapının şablonunu tanımlamak gerekir: struct tarih int gun; int ay; int yil; struct adres char ad_soyad[30]; char mahalle[15]; char cadde[15]; char sokak[15]; char ilce[15]; char sehir[15]; char ulke [15]; char kod[6]; struct telefon char ad[15]; char soyad[15]; int alan; unsigned long int tel; /* telefon numarası 7 haneli */ Bu şablonlar tanımlandıktan sonra bu şablonlar tipinde değişkenler şu şekilde tanımlanır: struct tarih dogum_gunum, annemin_dogum_gunu; struct adres adresim, hocamin_adresi; Şablonun hemen ardından değişkenleri tanımlamak ta mümkündür: struct tarih int gun; int ay; int yil; dogum_gunum,annemin_dogum_gunu; Yapılardan oluşan diziler de tanımlanabilir. Daha ileride ele alınacağı gibi yapılardan oluşan bir dizi, veri tabanı oluşturmak için elverişli bir altyapı oluşturur. Örneğin telefon defteri oluşturmak için şöyle bir dizi tanımlanabilir: struct telefon telefon_rehberi[200]; Burada telefon_rehberi bir dizidir ve her bir elemanı telefon yapısı tipinde olan 200 elemandan oluşur. 26

27 Bir Mini Veri Tabanı Programı Aşağıdaki program yapılardan oluşan bir dizi üzerine kurulu mini bir veri tabanı programıdır. Bu programda metin ve ikili dosyalar kullanılmaktadır. Program burada detaylı olarak açıklanmayacaktır, programın içinde bazı açıklamalara yer verilmiş olup programın detaylı incelenmesi bir alıştırma olarak okuyucuya bırakılmıştır. Ancak şu hususları belirtmekte yarar vardır. - case komutunun kullanıcı menüler için kullanımı fonksiyonunda gösterilmiştir. - en baştaki MAK tanımı artırılarak program daha büyük bir veri tabanı için adapte edilebilir. Yani böyle bir dönüşüm tek satır değiştirmekle halledilir. - Program şu haliyle en temel bazı işlemleri, yani klavyeden veri girişi, veri arama, dosyaya veri giriş çıkışı gibi işlemleri yerine getirmektedir. Ayrıca programın nasıl geliştirilebileceğine dair bazı fikirlerden programın sonunda bahsedilmiştir. #define MAK 250 #include <string.h> /*eletronik posta adreslerin ve web adreslerinin yazilmasi icin eadres adinda bir yapi olusturduk */ struct eadres char ad[15]; char soyad[15]; char eposta[25]; char web_adres[25]; int tip; /* tip=> 0: ev 1: is tip degiskenine yeni degerler atanmak suretiyle eadres tipi gelistirilebilir ornek: 3: okul */ ; /* ajanda eadreslerden MAK tanesinin yer aldigi bir vertabani dizisi*/ struct eadres ajanda[mak]; void kullanima_hazirla(); void veri_gir(); void menu_yaz(); char secim_oku(); int ilk_bos_kayit(); void veri_sil(); void veri_bul(); void dosya_kaydet(); void dosya_ac(); void metindosyasi_kaydet(); int veri_sayisi=0; /* ajandaya girilmis eadres sayisi */ char secim; int DEVAM=1; kullanima_hazirla(); menu_yaz(); while(devam) 27

28 menu_yaz(); secim=secim_oku(); switch(secim) case 'V': veri_gir(); break; case 'S': veri_sil(); break; case 'P': DEVAM=0; break; case 'B': veri_bul(); break; case 'K': dosya_kaydet(); break; case 'A': dosya_ac(); break; case 'M': metindosyasi_kaydet(); break; void kullanima_hazirla() int i; for(i=0;i<mak;i++) strcpy(ajanda[i].ad,"\0"); strcpy(ajanda[i].soyad,"\0"); strcpy(ajanda[i].eposta,"\0"); strcpy(ajanda[i].web_adres,"\0"); ajanda[i].tip=0; void veri_gir() int i=ilk_bos_kayit(); clrscr(); do printf("adi: "); gets(ajanda[i].ad); printf("soyadi: "); gets(ajanda[i].soyad); while(strlen(ajanda[i].soyad)==0 strlen(ajanda[i].ad)==0); /*mutlaka bir ad ve soyad girilmeli*/ printf("e-postasi: "); gets(ajanda[i].eposta); printf("web ADRES : "); gets(ajanda[i].web_adres); veri_sayisi++; /*girilen soyada gore veri siler*/ void veri_sil() int i,say=0; char soyad[15]; clrscr(); printf("soyadi:"); do 28

29 gets(soyad); while(!strlen(soyad)); /*mutlaka bir soyad girilmeli*/ for(i=0;i<mak;i++) if(strcmp(ajanda[i].soyad,soyad)==0) strcpy(ajanda[i].ad,'\0'); strcpy(ajanda[i].soyad,'\0'); say++; /* silme islemi isin ad ve soyadlari NULL yapmak yeterli*/ printf("girilen soyada sahip %d kayit silindi\n",say); printf("enter tusuna basip ana menuye donebilirsiniz"); getch(); veri_sayisi-=say; /*girilen soyada gore veri arar*/ void veri_bul() int i,no[mak],no_indeks=0; char soyad[15]; clrscr(); printf("soyadi: "); do gets(soyad); while(!strlen(soyad)); /*mutlaka bir soyad girilmeli*/ /* bu kiyas while(strlen(soyad)==0) seklinde de yazilabilirdi */ for(i=0;i<mak;i++) if(strcmp(ajanda[i].soyad,soyad)==0) no[no_indeks]=i; no_indeks++; printf("aradiginiz soyaddaki kayit(lar):\n"); for(i=0;i<no_indeks;i++) printf("adi: %15s", ajanda[no[i]].ad); printf("e-postasi: %25s\n", ajanda[no[i]].eposta); printf("soyadi: %15s", ajanda[no[i]].soyad); printf("web ADRESI: %25s\n", ajanda[no[i]].web_adres); printf("enter tusuna basip ana menuye donebilirsiniz"); getch(); int ilk_bos_kayit() int i; for(i=0;i<mak;i++) if(strlen(ajanda[i].ad)==0) return i; void menu_yaz() clrscr(); 29

30 printf(" ELEKTRONIK ADRES AJANDASI\n\n"); printf("asagidaki Seceneklerden birini parantezli harfi girerek"); printf(" seciniz\n\n"); printf("(v)eri Gir\n"); printf("veri (S)il\n"); printf("veri (B)ul\n"); printf("ajandayi (K)aydet\n"); printf("ajandayi (M)etin dosyasina yazdir\n"); printf("ajanda dosyasi (A)c\n"); printf("(p)rogrami Sonlandir\n"); char secim_oku() char secim; printf("seciminiz: \n"); do secim=getche(); while (strchr("vsbkmap",(int)secim)==null); /*strchr fonksiyonuna bakilirsa karakter int tipinde girilmeli kiyaslama soyle de yazilabilir: while (!strchr("vsbkmap",secim))*/ return secim; void dosya_kaydet() FILE *fp; int i; if((fp=fopen("ajanda.dat","wb"))==null) printf("ajanda dosyasi kaydedilemedi\n"); return; for(i=0;i<mak;i++) if(*ajanda[i].ad) fwrite(&ajanda[i],sizeof(struct eadres),1,fp); fclose(fp); clrscr(); printf("kayit islemi tamamlandi\n"); printf("enter tusuna basip ana menuye donebilirsiniz"); getch(); void metindosyasi_kaydet() FILE *fp; int i; if((fp=fopen("ajanda.txt","w"))==null) printf("metin dosyasi kaydedilemedi\n"); return; for(i=0;i<mak;i++) if(*ajanda[i].ad) fprintf(fp,"adi: %15s ", ajanda[i].ad); 30

31 fprintf(fp," E-POSTASI: %25s\n", ajanda[i].eposta); fprintf(fp,"soyadi: %15s", ajanda[i].soyad); fprintf(fp,"web ADRESI: %25s\n", ajanda[i].web_adres); fclose(fp); clrscr(); printf("kayit islemi tamamlandi\n"); printf("enter tusuna basip ana menuye donebilirsiniz"); getch(); void dosya_ac() FILE *fp; int i; if((fp=fopen("ajanda.dat","rb"))==null) printf("ajanda dosyasi acilamadi\n"); return; for(i=0;i<mak;i++) fread(&ajanda[i],sizeof(struct eadres),1,fp); if(feof(fp)) fclose(fp); clrscr(); printf("ajandadan bilgiler okundu\n"); printf("enter tusuna basip ana menuye donebilirsiniz"); getch(); return; /* BU PROGRAM NASIL GELISTIRILEBILIR (1) PROGRAM BU HALIYLE BUYUK HARF KABUL EDIYOR. ORNEGIN MENUYE k GIRILDIGINDE BU SECIM KABUL EDILMEYECEK. PROGRAM KUCUK HARFLERI DE KABUL EDECEK BICIMDE DEGISTIRILEBILIR (2) eadres YAPISINDAKI tip DEGISKENI KULLANILMIYOR. KULLANIMA SOKULABILIR. (3) KAYIT DOSYALARINA AD VERILEREK KAYIT YAPILABILIR. BOYLECE BIRDEN FAZLA AJANDA OLUSTURULABILIR. */ 31

32 Ek 1: Proje (2000 güz dönemi) /* Bu program ogrencilere proje olarak verilmistir. Odevin konusu: Bir gunun ilk 12 saatlik diliminde akrep ve yelkovanin kac kez ust uste geldigini gosteren bir program yazilmasi Program hassasiyeti gosterir bir parametreyi girdi olarak alip ust uste gelmenin gerceklestigi saat, dakika, saniye ve saliseyi bu parametreye bagli bir hassasiyette yazacak */ #include <math.h> main (void) double akrep= 0; double yelkovan = 0; double ak_epsilon = 0.001; double yel_epsilon; int saat, dakika, saniye, salise; printf("akrebi hangi aci farklariyla ilerleteceksiniz = "); scanf("%lf", &ak_epsilon); yel_epsilon = ak_epsilon * 12; printf("akrep ve Yelkovanin ust uste geldigi saatler:\n"); while (akrep < 360) if (fabs(akrep - yelkovan) < 0.005) saat= akrep/360*12; dakika = yelkovan/360*60; saniye = (yelkovan/360*60 - dakika)*60; salise = ((yelkovan/360*60 - dakika)*60 - saniye)*100; printf("%2d : %2d : %2d : % 2d\n", saat, dakika, saniye, salise); akrep += ak_epsilon; yelkovan += yel_epsilon; if (yelkovan >360) yelkovan -= 360; getchar(); getchar(); Projenin Çıktısı şöyle olacaktır: (Akrebin açı farkı için girildiğinde) 0 : 0 : 0 : 0 1 : 5 : 27 : 24 3 : 16 : 21 : 84 4 : 21 : 49 : 8 5 : 27 : 16 : 32 6 : 32 : 43 : 68 7 : 38 : 10 : 92 8 : 43 : 38 : 16 9 : 49 : 5 : : 54 : 32 : 76 32

33 Ek 2: Aşağıdaki program f(x,y)= x 2 + xy 2 + x 3 - y 3, x ve y tamsayı fonksiyonunun 1 x 10, 1 y 10 bögesindeki maksimum noktasını hesaplar. Dikkat edilecek olursa bu bögede fonksiyon 10x10 = 100 nokta için tanımlıdır. Program bu noktaları içiçe iki for döngüsü kullanarak üretir. Her noktada fonksiyonun değerini hesaplar, daha yüksek bir değer buldukça bunu yeni f değeri kabul eder. Programda kullanılan abs() fonksiyonu tamsayıların mutlak değerini hesaplar ve bir tamsayı olarak döndürür. Bu fonksiyon için stdlib.h başlık dosyasının programın başında eklenmesi (include) gerekir. Aşağıdaki programı inceleyiniz, çalıştırarak maksimum noktayı bulunuz, ve aşağıdaki soruları cevaplayınız. i) Programda aynı maksimum değeri veren birden çok nokta varsa bunların hepsini rapor edecek şekilde programda değişiklikler yapınız. ii) Fonksiyonda değişiklikler yaparak maksimum noktaları hesaplayınız. iii) Programda int tipi değişkenler yerine long int tipi değişkenler kullanmaya hangi durumlarda gerek olabilirdi? iv) Eğer fonksiyon sadece tamsayılar için değil tüm reel sayı düzleminde (R 2 ) tanımlansaydı, 1 x 10, 1 y 10 aralığındaki maksimum noktayı bulmak için programda ne tür değişiklikler gerekecekti? /* C Programi - for dongusu: maksimum bulma */ #include <stdlib.h> int f,fmak,x,y,xmak,ymak; fmak=-32000; for (x=1;x<=10;x++) for (y=1;y<=10;y++) f = x*x+ x*y*y + abs(x*x*x - y*y*y); if (f>fmak) fmak=f; xmak=x; ymak=y; printf("fonksiyonun maksimum noktalari:\n"); printf("x= %d, y=%d\n",xmak,ymak); printf("fonksiyonun aldigi maksimum deger:%d\n",fmak); 33

34 KAYNAKÇA (1) Herbert Schildt, C: The Complete Reference, 3rd edition, Osborne McGraw- Hill, Berkeley, CA, (2) Herbert Schildt, C++ Temel Öğrenim Kılavuzu - çeviri, Alfa yayınları, İstanbul, (3) Rifat Çölkesen, İşte C Programlama Dili, Beta yayınları, (4) Mithat Uysal, C ile Programlama, Beta yayınları,

mod ile açılacak olan dosyanın ne amaçla açılacağı belirlenir. Bunlar:

mod ile açılacak olan dosyanın ne amaçla açılacağı belirlenir. Bunlar: Dosyalama Çoğu programda, bazı verilerin disk üzerinde saklanmasına gerek duyulur. C programlama dilinde, disk dosyasına erişme (okuma ve yazma için) iki farklı yöntemle yapılır. Bunlar üst düzey ve alt

Detaylı

şeklinde tanımlanmıştır. O halde, dosyaları daha önceki bilgilerimizi kullanarak FILE *Dosya1, *Dosya2;

şeklinde tanımlanmıştır. O halde, dosyaları daha önceki bilgilerimizi kullanarak FILE *Dosya1, *Dosya2; Dosya İşlemleri Nedir? Programlarınızı girdi (input) olarak aldığı verileri bir text dosyasında yada word dosyasında vb. saklamasıdır. Artık C programınızın yaratıp içine veriler koyacağı text dosyasını

Detaylı

DOSYA İŞLEMLERİ Programlama dilleri hafta -

DOSYA İŞLEMLERİ Programlama dilleri hafta - BİLECİK ŞEYH EDEBALİ ÜNİVERSİTESİ MÜHENDİSLİK FAKÜLTESİ BİLGİSAYAR MÜHENDİSLİĞİ BÖLÜMÜ DOSYA İŞLEMLERİ Programlama dilleri 1-10. hafta - Araş. Gör. Nesibe YALÇIN Dosya İşlemleri Programın çalışma esnasında

Detaylı

Temel Bilgisayar Programlama

Temel Bilgisayar Programlama BÖLÜM 11: : Birçok programda, bazı verilerin disk üzerinde saklanmasına gerek duyulur. Bütün programlama dillerinde, sabit disk sürücüsü (Hard Disk Drive, HDD) üzerindeki verileri okumak veya diske veri

Detaylı

BMB1002 Bilgisayar Programlamaya Giriş. Dosyalar. Prof. Dr. Necmettin Kaya

BMB1002 Bilgisayar Programlamaya Giriş. Dosyalar. Prof. Dr. Necmettin Kaya BMB1002 Bilgisayar Programlamaya Giriş Dosyalar Prof. Dr. Necmettin Kaya Dosyalar, verilen saklanması ve daha sonra okunması için bilgi içeren ve kalıcı olarak saklanabilen ortamlardır. Dosya işlemleri,

Detaylı

ELN1002 BİLGİSAYAR PROGRAMLAMA 2

ELN1002 BİLGİSAYAR PROGRAMLAMA 2 ELN1002 BİLGİSAYAR PROGRAMLAMA 2 DOSYALAMA Sunu Planı Veri Hiyerarşisi Dosyalar ve Akımlar(streams) Sıralı Erişim (Sequential Access) dosyalarının oluşturulması Sıralı Erişim Dosyalarından Veri Okuma Rasgele

Detaylı

Eln 1002 Bilgisayar Programlama II

Eln 1002 Bilgisayar Programlama II Eln 1002 Bilgisayar Programlama II C»de Dosya ğşleme : S¹ral¹ EriŞim Ne ÖĆreneceĆiz? Dosyalar ve Streamler Sequential (sıralı) erişim dosyaların yaratılması Sıralı Erişim Dosyalarından Veri Okuma Sıralı

Detaylı

Fonksiyonlar (Altprogram)

Fonksiyonlar (Altprogram) Fonksiyonlar (Altprogram) C Programlama Dili fonksiyon olarak adlandırılan alt programların birleştirilmesi kavramına dayanır. Bir C programı bir ya da daha çok fonksiyonun bir araya gelmesi ile oluşur.

Detaylı

Temel Dosya İşlemleri. Kütük Organizasyonu 1

Temel Dosya İşlemleri. Kütük Organizasyonu 1 Temel Dosya İşlemleri Kütük Organizasyonu 1 Dosyaların Temel İşlemleri Bilgiler dosyada belirli bir düzen içerisinde yer alırlar Örn: ALAN THARP 100 100 100 JOHN BISHOP 70 80 75 PAUL AUSTER Bir satırda

Detaylı

BİL1001 Bilgisayar Bilimlerine Giriş 1

BİL1001 Bilgisayar Bilimlerine Giriş 1 DEÜ Bilgisayar Bilimleri Bölümü BİL1001 Bilgisayar Bilimlerine Giriş 1 Öğr. Gör. Dr. Alper VAHAPLAR 2017 Yaz Okulu Tekrarlı Yapılar Algoritmanın belirli bir kısmının, belirli kere ya da belirli durumlar

Detaylı

ALGORİTMA VE PROGRAMLAMA I

ALGORİTMA VE PROGRAMLAMA I ALGORİTMA VE PROGRAMLAMA I Yrd. Doç. Dr. Deniz KILINÇ deniz.kilinc@cbu.edu.tr YZM 1101 Celal Bayar Üniversitesi Hasan Ferdi Turgutlu Teknoloji Fakültesi Genel Bakış 2 Diziler Dizi Nedir? Dizilerin Bildirimi

Detaylı

DİZİLER-KATARLAR ALGORİTMA VE PROGRAMLAMA II

DİZİLER-KATARLAR ALGORİTMA VE PROGRAMLAMA II DİZİLER-KATARLAR ALGORİTMA VE PROGRAMLAMA II DİZİLER Dizi, aynı tipteki verilere tek bir isimle erişmek için kullanılan bir kümedir. Bir dizi bildirildikten sonra, dizinin bütün elemanları bellekte peşpeşe

Detaylı

Temel Bilgisayar Programlama Final Sınavı Çalışma Notları

Temel Bilgisayar Programlama Final Sınavı Çalışma Notları Diziler Temel Bilgisayar Programlama Final Sınavı Çalışma Notları (Dr. Övünç ÖZTÜRK, Dr. Tahir Emre KALAYCI) (İnşaat Mühendisliği ve Gıda Mühendisliği Grupları İçin) Diziler aynı türden bilgileri saklamak

Detaylı

Genel Programlama II

Genel Programlama II Genel Programlama II 18.04.2011 1 DİSK DOSYALARI İLE ÇALIŞMA DOSYALARIN AÇILMASI C programlama dilinde bir dosyayı kullanabilmek için, öncelikle o dosyanın açılması gerekmektedir. Hem okuma hem de yazma

Detaylı

C PROGRAMLAMA D İ L İ

C PROGRAMLAMA D İ L İ C PROGRAMLAMA DİLİ Diziler Dizi bir kümedir. Aynı tipteki verilere tek bir isimle erişmek için kullanılır. Bir dizi bildirildikten sonra, dizinin bütün elemanları bellekte peşpeşe saklanır. Bu yüzden dizilere

Detaylı

Fonksiyonlar. C++ ve NESNEYE DAYALI PROGRAMLAMA 51. /* Fonksiyon: kup Bir tamsayının küpünü hesaplar */ long int kup(int x) {

Fonksiyonlar. C++ ve NESNEYE DAYALI PROGRAMLAMA 51. /* Fonksiyon: kup Bir tamsayının küpünü hesaplar */ long int kup(int x) { Fonksiyonlar Kendi içinde bağımsız olarak çalışabilen ve belli bir işlevi yerine getiren program modülleridir. C programları bu modüllerden (fonksiyonlar) oluşurlar. Fonksiyonların yazılmasındaki temel

Detaylı

C Programlama Dilininin Basit Yapıları

C Programlama Dilininin Basit Yapıları Bölüm 2 C Programlama Dilininin Basit Yapıları İçindekiler 2.1 Sabitler ve Değişkenler......................... 13 2.2 Açıklamalar (Expresions)........................ 14 2.3 İfadeler (Statements) ve İfade

Detaylı

Diziler. Yrd.Doç.Dr.Bülent ÇOBANOĞLU

Diziler. Yrd.Doç.Dr.Bülent ÇOBANOĞLU Diziler Yrd.Doç.Dr.Bülent ÇOBANOĞLU Dizi (Array) Nedir? Bellekte sürekli yer kaplayan artarda sıralanmış aynı türden verilerin oluşturduğu kümeye dizi (array) denir. Dizi, çok fazla miktardaki tek tip

Detaylı

ALGORİTMA VE PROGRAMLAMA I DERS NOTU#8

ALGORİTMA VE PROGRAMLAMA I DERS NOTU#8 ALGORİTMA VE PROGRAMLAMA I DERS NOTU#8 YZM 1105 Celal Bayar Üniversitesi Hasan Ferdi Turgutlu Teknoloji Fakültesi 6. BÖLÜM 2 Çok Boyutlu Diziler Çok Boyutlu Dizi 3 Bir dizi aşağıdaki gibi bildirildiğinde

Detaylı

ALGORİTMA VE PROGRAMLAMA I

ALGORİTMA VE PROGRAMLAMA I ALGORİTMA VE PROGRAMLAMA I YZM 1101 Celal Bayar Üniversitesi Hasan Ferdi Turgutlu Teknoloji Fakültesi Genel Bakış 2 Diziler Dizi Nedir? Dizilerin Bildirimi Dizilere Başlangıç Değeri Verme Dizilerde Arama

Detaylı

PROGRAMLAMA. Dosyalama İşlemleri. Yrd. Doç. Dr. Bülent Çobanoğlu. Sakarya Üniversitesi Mekatronik Mühendisliği. Yrd.Doç.Dr.

PROGRAMLAMA. Dosyalama İşlemleri. Yrd. Doç. Dr. Bülent Çobanoğlu. Sakarya Üniversitesi Mekatronik Mühendisliği. Yrd.Doç.Dr. PROGRAMLAMA Dosyalama İşlemleri Yrd. Doç. Dr. Bülent Çobanoğlu Sakarya Üniversitesi Mekatronik Mühendisliği Yrd.Doç. Dosyalama İşlemleri Program ve verileri daha sonra kullanabilmek amacı ile kalıcı olarak

Detaylı

Sınav tarihi : Süre : 60 dak.

Sınav tarihi : Süre : 60 dak. Selçuk Üniversitesi, Mühendislik Fakültesi, Harita Mühendisliği Bölümü Final Sınavı Test Soruları Adı soyadı : Öğrenci no : Sınav tarihi : 31.05.2016 Süre : 60 dak. 1. Ekranda ne görüntülenir? int i =

Detaylı

Değişkenler, içerisinde tek bir değer tutabilen yapılardır. Örneğin haftanın günlerini değişkenlerde tutmak istersek, her bir gün adı için bir

Değişkenler, içerisinde tek bir değer tutabilen yapılardır. Örneğin haftanın günlerini değişkenlerde tutmak istersek, her bir gün adı için bir DİZİLER (ARRAYS) Değişkenler, içerisinde tek bir değer tutabilen yapılardır. Örneğin haftanın günlerini değişkenlerde tutmak istersek, her bir gün adı için bir değişken tanımlamak gereklidir. string gun1,

Detaylı

YAPILAR BİRLİKLER SAYMA SABİTLERİ/KÜMELERİ. 3. Hafta

YAPILAR BİRLİKLER SAYMA SABİTLERİ/KÜMELERİ. 3. Hafta YAPILAR BİRLİKLER SAYMA SABİTLERİ/KÜMELERİ 3. Hafta YAPILAR Farklı veri tipindeki bilgilerin bir araya gelerek oluşturdukları topluluklara yapı (structure) denir. Yani yapılar, birbiriyle ilişkili değişkenlerin

Detaylı

BLM-112 PROGRAMLAMA DİLLERİ II. Ders-8 Dosya İşlemleri-1. Yrd. Doç. Dr. Ümit ATİLA

BLM-112 PROGRAMLAMA DİLLERİ II. Ders-8 Dosya İşlemleri-1. Yrd. Doç. Dr. Ümit ATİLA BLM-112 PROGRAMLAMA DİLLERİ II Ders-8 Dosya İşlemleri-1 Yrd. Doç. Dr. Ümit ATİLA umitatila@karabuk.edu.tr http://web.karabuk.edu.tr/umitatilla/ Giriş Değişken ve dizilerde tutulan değerler programın çalışması

Detaylı

10. DOSYA GİRİŞ ÇIKIŞ FONKSİYONLARI

10. DOSYA GİRİŞ ÇIKIŞ FONKSİYONLARI 10. DOSYA GİRİŞ ÇIKIŞ FONKSİYONLARI İkincil bellekte tanımlanmış bölgelere dosya denir. Her dosyanın bir ismi vardır. Ancak dosyaların isimlendirme kuralları sistemden sisteme göre değişebilmektedir. Dosya

Detaylı

ALGORİTMA VE PROGRAMLAMA II

ALGORİTMA VE PROGRAMLAMA II ALGORİTMA VE PROGRAMLAMA II Yrd. Doç. Dr. Deniz KILINÇ deniz.kilinc@cbu.edu.tr YZM 1102 Celal Bayar Üniversitesi Hasan Ferdi Turgutlu Teknoloji Fakültesi Genel Bakış 2 Veri Hiyerarşisi Dosyalara Giriş

Detaylı

Sınav tarihi : Süre : 60 dak. a) strstr b) strchr c) strcat d) strcpy e) strlen. a) b) d) e) 0

Sınav tarihi : Süre : 60 dak. a) strstr b) strchr c) strcat d) strcpy e) strlen. a) b) d) e) 0 Selçuk Üniversitesi, Mühendislik Fakültesi, Harita Mühendisliği Bölümü Bitirme Sınavı Test Soruları Adı soyadı : Öğrenci no : Sınav tarihi : 01.06.2017 Süre : 60 dak. 1. t değişkeni hakkında aşağıdakilerden

Detaylı

ELN1002 BİLGİSAYAR PROGRAMLAMA 2

ELN1002 BİLGİSAYAR PROGRAMLAMA 2 ELN1002 BİLGİSAYAR PROGRAMLAMA 2 DOSYALAMA Sunu Planı Rasgele Erişim (Random Access) Dosyaları Rasgele Erişim Dosyalarına Veri Yazma Rasgele Erişim Dosyalarından Veri Okuma 1 Sıralı Erişim Dosyası Bir

Detaylı

Diziler (Arrays) Çok Boyutlu Diziler

Diziler (Arrays) Çok Boyutlu Diziler Diziler (Arrays) Çok Boyutlu Diziler ÇOK BOYUTLU DİZİLER Birden fazla indis numarası ile elemanlarına ulaşılan dizilere çok boyutlu diziler denir. Bunlardan en sık kullanılanı çift boyutlu dizilerdir.

Detaylı

BLM 111 ALGORİTMA VE PROGRAMLAMA I

BLM 111 ALGORİTMA VE PROGRAMLAMA I 1 BLM 111 ALGORİTMA VE PROGRAMLAMA I DİZİLER (ARRAYS) Kullanıcıdan N tane tamsayı, xi, alalım ve 1. Bu sayıların ortalamasını hesaplamak isteyelim ort = 0; for (i=0; i

Detaylı

Fen ve Mühendislik Uygulamalarında MATLAB

Fen ve Mühendislik Uygulamalarında MATLAB Fen ve Mühendislik Uygulamalarında MATLAB Dosya Yönetimi Fonksiyon Yapısı Doç. Dr. İrfan KAYMAZ MATLAB Ders Notları DOSYA YÖNETİMİ Şu ana kadar bir programda hesaplanan veya elde edilen veriler RAM de

Detaylı

Programlama Dilleri 1. Ders 4: Diziler

Programlama Dilleri 1. Ders 4: Diziler Programlama Dilleri 1 Ders 4: Diziler Genel Bakış Tanım Dizilerin tanımlanması Dizilere ilk değer verilmesi Yerel ve Global diziler Dizilerin birbirine atanması Diziler ile ilgili örnekler Çalışma soruları

Detaylı

Özyineleme (Recursion)

Özyineleme (Recursion) C PROGRAMLAMA Özyineleme (Recursion) Bir fonksiyonun kendisini çağırarak çözüme gitmesine özyineleme (recursion), böyle çalışan fonksiyonlara da özyinelemeli (recursive) fonksiyonlar denilir. Özyineleme,

Detaylı

PROGRAMLAMAYA GİRİŞ DERS 2

PROGRAMLAMAYA GİRİŞ DERS 2 PROGRAMLAMAYA GİRİŞ DERS 2 Program editörde oluşturulur ve diske kaydedilir Tipik Bir C Programı Geliştirme Ortamının Temelleri 1. Edit 2. Preprocess 3. Compile 4. Link 5. Load 6. Execute Önişlemci programı

Detaylı

MAK 1005 Bilgisayar Programlamaya Giriş. Fonksiyonlar. Prof. Dr. Necmettin Kaya

MAK 1005 Bilgisayar Programlamaya Giriş. Fonksiyonlar. Prof. Dr. Necmettin Kaya MAK 1005 Bilgisayar Programlamaya Giriş Fonksiyonlar Prof. Dr. Necmettin Kaya Gerçek hayattaki problemlerin çözümü için geliştirilen programlar çok büyük boyutlardadır. Daha büyük programlar yazmanın en

Detaylı

Değişkenler. Geçerli değişken isimleri : baslamazamani, ad_soyad, x5 Geçersiz değişken isimleri : 3x, while

Değişkenler. Geçerli değişken isimleri : baslamazamani, ad_soyad, x5 Geçersiz değişken isimleri : 3x, while Değişkenler Değişkenler bir bilginin bellekteki konumunu temsil eden sembolik isimlerdir. Bilgisayarda hemen hemen tüm işlemler bellekte yapılır. Program çalıştırıldığında değişken ve bu değişkenin türüne

Detaylı

Giriş. ENF102 Jeoloji

Giriş. ENF102 Jeoloji DİZİLER Arrays Giriş Aynı isim altında, aynı türde birden fazla değer tutmak için kullanılan veri yapılarıdır (Data Structure). Dizi bir kümedir; aynı türde verilere tek bir isimle erişmek için kullanılır.

Detaylı

Yrd. Doç. Dr. Caner ÖZCAN

Yrd. Doç. Dr. Caner ÖZCAN Yrd. Doç. Dr. Caner ÖZCAN GİRİŞ Değişken ve dizilerde tutulan değerler programın çalışması esnasında değerlerini korurlarken programın çalışması sona erdiğinde veri kaybolur. Dosyalar verinin kalıcı olarak

Detaylı

Dersin Sorumlusu: Yrd. Doç. Dr. Birol SOYSAL. Sunumları Hazırlayan: Doç. Dr. Bülent ÇAKMAK

Dersin Sorumlusu: Yrd. Doç. Dr. Birol SOYSAL. Sunumları Hazırlayan: Doç. Dr. Bülent ÇAKMAK MATLAB de Bilgisayar Programlama Dersin Sorumlusu: Yrd. Doç. Dr. Birol SOYSAL Sunumları Hazırlayan: Doç. Dr. Bülent ÇAKMAK ALT PROGRAMLAR:M-Fonksiyon Yapısı function cikis_ifadesi1, 2,, n =fonksiyon_adi

Detaylı

/ C Bilgisayar Programlama Final Sınavı Test Soruları. Adı soyadı :... Öğrenci no :... İmza :... Tarih, Süre : , 60 dak.

/ C Bilgisayar Programlama Final Sınavı Test Soruları. Adı soyadı :... Öğrenci no :... İmza :... Tarih, Süre : , 60 dak. Selçuk Üniversitesi Mühendislik Fakültesi Harita Mühendisliği Bölümü Final Sınavı Test Soruları dı soyadı :... Öğrenci no :... İmza :... Tarih, Süre :09.01.2013, 60 dak. Dikkat!!! Soru kitapçığında ve

Detaylı

Metin Dosyaları. Metin Dosyaları Dosya Açma ve Kapama Dosya Okuma ve Yazma Rastgele Erişim Standart Girdi/Çıktı Hata Kontrolü

Metin Dosyaları. Metin Dosyaları Dosya Açma ve Kapama Dosya Okuma ve Yazma Rastgele Erişim Standart Girdi/Çıktı Hata Kontrolü Metin Dosyaları Metin Dosyaları Dosya Açma ve Kapama Dosya Okuma ve Yazma Rastgele Erişim Standart Girdi/Çıktı Hata Kontrolü Metin Dosyaları Metin dosyaları, verileri bir kere hazırlayıp, ikincil saklama

Detaylı

BİLGİSAYAR TEMELLERİ VE PROGRAMLAMAYA GİRİŞ

BİLGİSAYAR TEMELLERİ VE PROGRAMLAMAYA GİRİŞ BİLGİSAYAR TEMELLERİ VE PROGRAMLAMAYA GİRİŞ Yrd.Doç.Dr. Emel ARSLAN earslan@istanbul.edu.tr C DİLİNDE FONKSİYONLAR C DİLİNDE FONKSİYONLAR C programlama dili fonksiyon olarak adlandırılan alt programların

Detaylı

Temel Giriş/Çıkış Fonksiyonları

Temel Giriş/Çıkış Fonksiyonları Temel Giriş/Çıkış Fonksiyonları Temel giriş/çıkış fonksiyonları, bütün programla dillerinde mevcuttur. Bu tür fonksiyonlar, kullanıcıya ekrana veya yazıcıya bilgi yazdırmasına, ve bilgisayara klavyeden

Detaylı

BÖLÜM 6: KARŞILAŞTIRMALI KONTROL YAPILARI

BÖLÜM 6: KARŞILAŞTIRMALI KONTROL YAPILARI BÖLÜM 6: KARŞILAŞTIRMALI KONTROL YAPILARI C programlama dilinde, diğer programlama dillerinde olduğu gibi, işlemler, ilk satırdan başlamak üzere sırayla çalışır. Program kontrol yapıları ise, programın

Detaylı

ALGORİTMA VE PROGRAMLAMA II

ALGORİTMA VE PROGRAMLAMA II ALGORİTMA VE PROGRAMLAMA II Yrd. Doç. Dr. Deniz KILINÇ deniz.kilinc@cbu.edu.tr YZM 1102 Celal Bayar Üniversitesi Hasan Ferdi Turgutlu Teknoloji Fakültesi Genel Bakış 2 Dosya İşlemleri (Rastgele Erişim)

Detaylı

Algoritma ve Programlama: Karar Yapıları ve Döngüler

Algoritma ve Programlama: Karar Yapıları ve Döngüler Algoritma ve Programlama: Karar Yapıları ve Döngüler Bir algoritma, herhangi bir programlama dili (C, C++, Pascal, Visual Basic, Java gibi) ile kodlandığında program haline gelir. Algoritmada yer alan

Detaylı

C PROGRAMLAMA D İ L İ

C PROGRAMLAMA D İ L İ C PROGRAMLAMA DİLİ C Programlama Dilinin Temelleri C Programlama Dili'ni popüler kılan önemli nedenler aşağıda listelenmiştir: C, güçlü ve esnek bir dildir. C ile işletim sistemi veya derleyici yazabilir,

Detaylı

HSancak Nesne Tabanlı Programlama I Ders Notları

HSancak Nesne Tabanlı Programlama I Ders Notları DİZİLER Bellekte ard arda yer alan aynı türden nesneler kümesine dizi (array) denilir. Bir dizi içerisindeki bütün elemanlara aynı isimle ulaşılır. Yani dizideki bütün elemanların isimleri ortaktır. Elemanlar

Detaylı

Eln 1001 Bilgisayar Programlama I

Eln 1001 Bilgisayar Programlama I Eln 1001 Bilgisayar Programlama I GiriŞ / ǹk¹Ş Fonksiyonlar¹ Ne ÖĆreneceĆiz? Temel Giriş/Çıkış Yapısı Giriş Fonksiyonları Karakterler için giriş fonksiyonları Scanf fonksiyonu Formatlı giriş Çıkış Fonksiyonları

Detaylı

C Konsol Giriş Çıkış Fonksiyonları

C Konsol Giriş Çıkış Fonksiyonları C Konsol Giriş Çıkış Fonksiyonları Öğr. Gör. M. Ozan AKI Rev 1.0 Stringlerde Özel Karakterler \n : Bir sonraki satırın ilk sütununa git \b : Backspace (önceki karakteri sil) \a : Bip sesi \\ : Ters bölü

Detaylı

Temel Giriş/Çıkış Fonksiyonları (Devam) Örnek :

Temel Giriş/Çıkış Fonksiyonları (Devam) Örnek : Temel Giriş/Çıkış Fonksiyonları (Devam) Örnek : scanf() Fonksiyonu Birçok programda ekrana verilerin yazdırılması yanısıra klavyeden veri okunması gerekebilir. scanf() fonksiyonu klavyeden veri okumak

Detaylı

BLM 111 ALGORİTMA VE PROGRAMLAMA I

BLM 111 ALGORİTMA VE PROGRAMLAMA I 1 BLM 111 ALGORİTMA VE PROGRAMLAMA I ÇOK BOYUTLU DİZİLER, YAPILAR [MULTIDIMENSIONAL ARRAYS, STRUCTURES] ÇOK BOYUTLU DİZİLER Çok boyutlu diziler tanımlayabiliriz. İki boyutta, çok boyutlu diziler bellek

Detaylı

Döngü Komutları. Komutu. while Komutu Diğer Operatörler Bileşik Komut for Komutu. İçiçe Döngüler break ve continue Komutları

Döngü Komutları. Komutu. while Komutu Diğer Operatörler Bileşik Komut for Komutu. İçiçe Döngüler break ve continue Komutları Döngüler Döngü Komutları while Komutu Diğer Operatörler Bileşik Komut for Komutu do-while Komutu İçiçe Döngüler break ve continue Komutları while Komutu Döngü komutları komutların bir çok kez yeniden yürülmesini

Detaylı

Temel Bilgisayar Bilimleri Ders Notu #4-2. kısım

Temel Bilgisayar Bilimleri Ders Notu #4-2. kısım Nisan 2009 9031150 - Temel Bilgisayar Bilimleri Ders Notu #4-2. kısım Referans: Bugün: 1. Ders Notları. Ders #4.1 Tekrar Dowhile ve for döngüleri Diziler Göstergeler 1. Tekrar for döngüleri Genel yazılımı

Detaylı

Adı soyadı :... Öğrenci no :... İmza :... Tarih, Süre : dak.

Adı soyadı :... Öğrenci no :... İmza :... Tarih, Süre : dak. Selçuk Üniversitesi Mühendislik Fakültesi Harita Mühendisliği Bölümü ra Sınavı Test Soruları dı soyadı :... Öğrenci no :... İmza :... Tarih, Süre :13.04.2017 60 dak. Dikkat!!! Soru kitapçığında ve cevap

Detaylı

STRİNG DİZİLER(KATARLAR)

STRİNG DİZİLER(KATARLAR) STRİNG DİZİLER(KATARLAR) Giriş Katar bir char tipinde bildirilen karakter dizisidir. Katarlar (strings), içeriği harfler, rakamlar, veya bazı semboller olan text bilgilerini tutmak(saklamak) için kullanılır.

Detaylı

ALGORİTMA VE PROGRAMLAMA II

ALGORİTMA VE PROGRAMLAMA II ALGORİTMA VE PROGRAMLAMA II Yrd. Doç. Dr. Deniz KILINÇ deniz.kilinc@cbu.edu.tr YZM 1102 Celal Bayar Üniversitesi Hasan Ferdi Turgutlu Teknoloji Fakültesi Genel Bakış 2 İşaretçiler ve Diziler Fonksiyon

Detaylı

Dizgiler. C dilinde karakter m şeklinde tek tırnak içerisinde yazılan ifadelerdir. Bu karakterlerin her biri aslında bir tamsayı ile ifade edilir.

Dizgiler. C dilinde karakter m şeklinde tek tırnak içerisinde yazılan ifadelerdir. Bu karakterlerin her biri aslında bir tamsayı ile ifade edilir. DİZGİLER (STRINGS) Dizgiler char tipli karakterlerin gruplanmş haline dizgi(string) denilir. Bazen katar ismide kullanılabilir. C dilinde karakter m şeklinde tek tırnak içerisinde yazılan ifadelerdir.

Detaylı

DİZİLER 5/4/2010. ENF-102 Jeoloji Giriş. Tek Boyutlu Diziler. Tek Boyutlu Diziler. Örnek. Örnek

DİZİLER 5/4/2010. ENF-102 Jeoloji Giriş. Tek Boyutlu Diziler. Tek Boyutlu Diziler. Örnek. Örnek Giriş DİZİLER Arrays Aynı isim altında, aynı türde birden fazla değer tutmak için kullanılan veri yapılarıdır (Data Structure). Dizi bir kümedir; aynı türde verilere tek bir isimle erişmek için kullanılır.

Detaylı

Uzaktan Eğitim Uygulama ve Araştırma Merkezi

Uzaktan Eğitim Uygulama ve Araştırma Merkezi JAVA PROGRAMLAMA Öğr. Gör. Utku SOBUTAY İÇERİK 2 Java da Fonksiyon Tanımlamak Java da Döngüler Java da Şart İfadeleri Uygulamalar Java da Fonksiyon Tanımlamak JAVA DA FONKSİYON TANIMLAMAK 4 Fonksiyonlar;

Detaylı

ESM-361 Mikroişlemciler. 3. Hafta Ders Öğretim Üyesi Dr.Öğr.Üyesi Ayşe DEMİRHAN

ESM-361 Mikroişlemciler. 3. Hafta Ders Öğretim Üyesi Dr.Öğr.Üyesi Ayşe DEMİRHAN ESM-361 Mikroişlemciler 3. Hafta Ders Öğretim Üyesi Dr.Öğr.Üyesi Ayşe DEMİRHAN Bit operatörleri Bit operatörleri bit düzeyinde işlem yapan operatörlerdir; yani sayıları bir bütün olarak değil, bit bit

Detaylı

BİLGİSAYAR PROGRAMLAMA DERSİ

BİLGİSAYAR PROGRAMLAMA DERSİ BİLGİSAYAR PROGRAMLAMA DERSİ 4. DERS NOTU Konu: M-dosya yapısı ve Kontrol Yapıları Hazırlayan: Yrd. Doç. Dr. Ahmet DUMLU 1 M-Dosya Yapısı Bir senaryo dosyası (script file) özel bir görevi yerine getirmek

Detaylı

12. Saat : Dosyalar I (Files)

12. Saat : Dosyalar I (Files) 12. Saat : Dosyalar I (Files) Dosyalar (Files) Programın çalışma esnasında her türlü değişken içinde tutulan ve işlenen bilgiler RAM (Read Access Memory) bellekte tutulur ve program sona erdiğinde RAM

Detaylı

Döngü komutları komutların bir çok kez yeniden yürülmesini. sağlayan, programlamada kullandığımız önemli yapılardan biridir.

Döngü komutları komutların bir çok kez yeniden yürülmesini. sağlayan, programlamada kullandığımız önemli yapılardan biridir. Bölüm 5 Döngü Komutları while Komutu Diğer Operatörler Bileşik Komut for Komutu do-while Komutu İçiçe Döngüler break ve continue Komutları while Komutu Döngü komutları komutların bir çok kez yeniden yürülmesini

Detaylı

Dizi nin Önemi. Telefon rehberindeki numaralar, haftanın günleri gibi v.b.

Dizi nin Önemi. Telefon rehberindeki numaralar, haftanın günleri gibi v.b. Diziler Dizi Nedir Ortak özelliğe sahip birden fazla bilginin oluşturduğu bütün bilgi kümelerine veya hafızada art arda sıralanmış aynı türden verilerin oluşturduğu yapıya dizi denir. Kısaca; Bellekte

Detaylı

ALFASAYISAL BİLGİLER KARAKTER DİZİLERİ (STRING)

ALFASAYISAL BİLGİLER KARAKTER DİZİLERİ (STRING) ALFASAYISAL BİLGİLER KARAKTER DİZİLERİ (STRING) 1. HAFTA KARAKTER Karakterler, programlarda kullanılan temel simgelerdir. Her karakterin ASCII kod tablosunda bir tamsayı değer karşılığı vardır ve C programlama

Detaylı

Göstericiler (Pointers)

Göstericiler (Pointers) C PROGRAMLAMA Göstericiler (Pointers) C programlama dilinin en güçlü özelliklerinden biridir. Göstericiler, işaretçiler yada pointer adı da verilmektedir. Gösterici (pointer); içerisinde bellek adresi

Detaylı

Dr. Fatih AY Tel: 0 388 225 22 55 fatihay@fatihay.net www.fatihay.net

Dr. Fatih AY Tel: 0 388 225 22 55 fatihay@fatihay.net www.fatihay.net Bilgisayar Programlama Ders 6 Dr. Fatih AY Tel: 0 388 225 22 55 fatihay@fatihay.net www.fatihay.net Fonksiyon Prototipleri Fonksiyon Prototipleri Derleyici, fonksiyonların ilk hallerini (prototiplerini)

Detaylı

Sınav tarihi : Süre : 60 dak. a) ABCDE b) BCDE c) ABCD d) kod hatalı e) BCD

Sınav tarihi : Süre : 60 dak. a) ABCDE b) BCDE c) ABCD d) kod hatalı e) BCD Selçuk Üniversitesi, Mühendislik Fakültesi, Harita Mühendisliği Bölümü Yıliçi Sınavı Test Soruları Adı soyadı : Öğrenci no : Sınav tarihi : 13.04.2015 Süre : 60 dak. 1. Hangisi gerçek sayı değişmezi değildir?

Detaylı

ÇOK BOYUTLU DİZİLER VE DİNAMİK BELLEK YÖNETİMİ İLE İLGİLİ ÖRNEKLER

ÇOK BOYUTLU DİZİLER VE DİNAMİK BELLEK YÖNETİMİ İLE İLGİLİ ÖRNEKLER ÇOK BOYUTLU DİZİLER VE DİNAMİK BELLEK YÖNETİMİ İLE İLGİLİ ÖRNEKLER // 5 adet ogrenci icin 8 adet sinavi // temsil etmesi icin bir ogrenci tablosu // olusturuyoruz. Bunun icin 5x8 bir matris // yaratilmasi

Detaylı

/ C Bilgisayar Programlama Yıliçi Sınavı Test Soruları. Adı soyadı :... Öğrenci no :... İmza :... Tarih, Süre : , 60 dak.

/ C Bilgisayar Programlama Yıliçi Sınavı Test Soruları. Adı soyadı :... Öğrenci no :... İmza :... Tarih, Süre : , 60 dak. Selçuk Üniversitesi Mühendislik-Mimarlık Fakültesi Harita Mühendisliği Bölümü Yıliçi Sınavı Test Soruları dı soyadı :... Öğrenci no :... İmza :... Tarih, Süre :26.11.2012, 60 dak. Dikkat!!! Soru kitapçığında

Detaylı

BİLGİSAYAR TEMELLERİ VE PROGRAMLAMAYA GİRİŞ

BİLGİSAYAR TEMELLERİ VE PROGRAMLAMAYA GİRİŞ BİLGİSAYAR TEMELLERİ VE PROGRAMLAMAYA GİRİŞ Yrd.Doç.Dr. Emel ARSLAN earslan@istanbul.edu.tr C Program Akış Kontrol Yapıları Kontrol Komutları Normal şartlarda C dilinde bir programın çalışması, komutların

Detaylı

BLM-111 PROGRAMLAMA DİLLERİ I. Ders-8 Değişken Tipleri ve Temel Giriş/Çıkış İşlemleri

BLM-111 PROGRAMLAMA DİLLERİ I. Ders-8 Değişken Tipleri ve Temel Giriş/Çıkış İşlemleri BLM-111 PROGRAMLAMA DİLLERİ I Ders-8 Değişken Tipleri ve Temel Giriş/Çıkış İşlemleri Yrd. Doç. Dr. Ümit ATİLA umitatila@karabuk.edu.tr http://web.karabuk.edu.tr/umitatilla/ Temel Veri Tipleri C dilinde

Detaylı

BİLGİSAYAR PROGRAMLAMA DERSİ

BİLGİSAYAR PROGRAMLAMA DERSİ BİLGİSAYAR PROGRAMLAMA DERSİ Yrd. Doç. Dr. Fatih TOSUNOĞLU Erzurum Teknik Üniversitesi Mühendislik Fakültesi İnşaat Mühendisliği Bölümü DERS NOTU 3 KONU: M-dosya yapısı ve Kontrol Yapıları M-Dosya Yapısı

Detaylı

Bölüm 2 - C ile Programlamaya Giriş

Bölüm 2 - C ile Programlamaya Giriş 1 Bölüm 2 - C ile Programlamaya Giriş Başlıklar 2.1 Giriş 2.2 Basit C Programları: Bir Metni Yazdırmak 2.3 Basit C Programları: İki Tam Sayıyı Toplamak 2.4 Hafıza Konuları 2.5 C de Aritmetik 2.6 Karar

Detaylı

Eastern Mediterranean University Faculty of Arts & Sciences -- Department Of Mathematics BİLG213 BİLGİSAYAR PROGRAMLAMAYA GİRİŞ

Eastern Mediterranean University Faculty of Arts & Sciences -- Department Of Mathematics BİLG213 BİLGİSAYAR PROGRAMLAMAYA GİRİŞ Eastern Mediterranean University Faculty of Arts & Sciences -- Department Of Mathematics BİLG213 BİLGİSAYAR PROGRAMLAMAYA GİRİŞ DÖNEM SONU SINAVI GÜZ 2009-2010 13 Ocak 2010, Sınav Süresi: 120 dakika. İsim

Detaylı

Hafta 12 Karakter Tutan Diziler

Hafta 12 Karakter Tutan Diziler BLM111 Programlama Dilleri I Hafta 12 Karakter Tutan Diziler Yrd. Doç. Dr. Caner ÖZCAN Katar (String) Tanımlama Dizileri ve çok boyutlu dizileri gördük. Katar dediğimiz şey de aslında bir dizidir. Değişken

Detaylı

Döngü (Loop) Deyimleri / Veri Belirleyicileri / Matematiksel Fonksiyonlar

Döngü (Loop) Deyimleri / Veri Belirleyicileri / Matematiksel Fonksiyonlar Bölüm 5 Döngü (Loop) Deyimleri / Veri Belirleyicileri / Matematiksel Fonksiyonlar İçindekiler 5.1 Formatlı Yazdırma............................ 34 5.2 Döngü Deyimleri............................. 34 5.2.1

Detaylı

PROGRAMLAMAYA GİRİŞ FONKSİYONLAR

PROGRAMLAMAYA GİRİŞ FONKSİYONLAR PROGRAMLAMAYA GİRİŞ FONKSİYONLAR Fonksiyonlar C programlama dili fonksiyon olarak adlandırılan alt programların birleştirilmesi kavramına dayanır. Bir C programı bir ya da daha çok fonksiyonun bir araya

Detaylı

Diziler. Dizi Tanımı Dizi Elemanlarına Değer Atama Diziler ve Göstergeler 2-Boyutlu Diziler

Diziler. Dizi Tanımı Dizi Elemanlarına Değer Atama Diziler ve Göstergeler 2-Boyutlu Diziler Diziler Dizi Tanımı Dizi Elemanlarına Değer Atama Diziler ve Göstergeler 2-Boyutlu Diziler Dizi Tanımı Değişkenler aynı anda tek bir değer tutabilen temel değişkenler ve birden fazla değer saklayabilen

Detaylı

C PROGRAMLAMA D İ L İ

C PROGRAMLAMA D İ L İ C PROGRAMLAMA DİLİ Fonksiyonlar (Alt programlar) Fonksiyon Kavramı Fonksiyon, belirli sayıda verileri kullanarak bunları işleyen ve bir sonuç üreten komut grubudur. Her fonksiyonun bir adı ve fonksiyona

Detaylı

BİLGİSAYAR BİLİMİ DERSİ (KUR 1) PYTHON PROGRAMLAMA DİLİ ÇALIŞMA KÂĞIDI - 1

BİLGİSAYAR BİLİMİ DERSİ (KUR 1) PYTHON PROGRAMLAMA DİLİ ÇALIŞMA KÂĞIDI - 1 BİLGİSAYAR BİLİMİ DERSİ (KUR 1) PYTHON PROGRAMLAMA DİLİ ÇALIŞMA KÂĞIDI - 1 Ekrana Metin Yazdırmak Ekranda metin yazdırmak istendiğinde print komutu kullanılır. Kullanımı aşağıda verilmiştir. Parantez içinde

Detaylı

BÖLÜM 11: YAPISAL VERİ TİPLERİ

BÖLÜM 11: YAPISAL VERİ TİPLERİ BÖLÜM 11: YAPISAL VERİ TİPLERİ I. STRUCTURE-YAPI (struct) TİPİ DEĞİŞKENLER Birbiriyle bağlantılı ve bir küme teşkil eden değerler bir tek değişkenin çatısı altında bu değişkenin alt alanları olarak tanımlanabilirler.

Detaylı

Ders 4: Temel Giriş/Çıkış Fonksiyonları

Ders 4: Temel Giriş/Çıkış Fonksiyonları Ders 4: Temel Giriş/Çıkış Fonksiyonları Giriş Temel giriş/çıkış fonksiyonları, bütün programla dillerinde mevcuttur. Bu tür fonksiyonlar, kullanıcıya ekrana veya yazıcıya bilgi yazdırmasına, ve bilgisayara

Detaylı

BASİT C PROGRAMLARI Öğr.Gör.Dr. Mahmut YALÇIN

BASİT C PROGRAMLARI Öğr.Gör.Dr. Mahmut YALÇIN BASİT C PROGRAMLARI Öğr.Gör.Dr. Mahmut YALÇIN Basit C Programları: Bir Metni Yazdırmak #include /* program çalışmaya main fonksiyonundan başlar*/ int main() { printf( "C diline hoşgeldiniz!\n"

Detaylı

Genel Programlama II

Genel Programlama II Genel Programlama II 22.03.2011 1 Yapılar ( Structures ) Yapılar ( structures ); tam sayı, karakter vb. veri tiplerini gruplayıp, tek bir çatı altında toplar. Bu gruplandırma içinde aynı ya da farklı veri

Detaylı

Programlamaya Giriş. Program : Belirli bir problemi çözmek için bir bilgisayar dili kullanılarak yazılmış deyimler dizisi.

Programlamaya Giriş. Program : Belirli bir problemi çözmek için bir bilgisayar dili kullanılarak yazılmış deyimler dizisi. Programlamaya Giriş Program : Belirli bir problemi çözmek için bir bilgisayar dili kullanılarak yazılmış deyimler dizisi. Programın Yazımında İzleyeceğimiz Adımlar Problemi anla. İhtiyaçları belirle. Problemin

Detaylı

Bölüm 8, Yrd. Doç. Dr. A. Kadir YALDIR PAÜ Bilgisayar Mühendisliği Bölümü BÖLÜM 8: DİZİLER

Bölüm 8, Yrd. Doç. Dr. A. Kadir YALDIR PAÜ Bilgisayar Mühendisliği Bölümü BÖLÜM 8: DİZİLER BÖLÜM 8: DİZİLER Dizi bir kümedir. Aynı tipte verilere tek bir isimle erişmek için kullanılır. Bir dizinin bütün elemanları bellekte peş peşe saklanır. Dizi Tipi Tek boyutlu İki boyutlu Çok boyutlu Genel

Detaylı

C++ Dersi: Nesne Tabanlı Programlama

C++ Dersi: Nesne Tabanlı Programlama C++ Dersi: Nesne Tabanlı Programlama Bölüm 6: Diziler İçerik Diziler Dizi Elemanlarına İlk Atama Diziler ve Fonksiyonlar İki Boyutlu Diziler İki Boyutlu Dizi Tanımı İki Boyutlu Dizi Elemanlarına Erişim

Detaylı

ELN1001 BİLGİSAYAR PROGRAMLAMA I

ELN1001 BİLGİSAYAR PROGRAMLAMA I ELN1001 BİLGİSAYAR PROGRAMLAMA I DİNAMİK BELLEK YÖNETİMİ TEMEL G/Ç FONKSİYONLARI Dinamik Bellek Tahsisi Tanımlanmış olan dizilere eleman sayısı ve elemanlarının tiplerine göre, sistem belleğinde bir yer

Detaylı

NESNE YÖNELİMLİ PROGRAMLAMA HAFTA # 2

NESNE YÖNELİMLİ PROGRAMLAMA HAFTA # 2 NESNE YÖNELİMLİ PROGRAMLAMA HAFTA # 2 JAVA DA PROGRAM DENETİMİ VE OPERATÖRLER Java programlama dilinde temel tipleri ve nesneleri yönlendirmek ve değiştirmek için operatörler kullanılır. Atamalar sağ taraftaki

Detaylı

EBG101 PROGRAMLAMA TEMELLERİ VE ALGORİTMA

EBG101 PROGRAMLAMA TEMELLERİ VE ALGORİTMA 6. HAFTA EBG101 PROGRAMLAMA TEMELLERİ VE ALGORİTMA Öğr. Gör. S. M. Fatih APAYDIN apaydin@beun.edu.tr EMYO Bülent Ecevit Üniversitesi Kdz. Ereğli Meslek Yüksekokulu ALGORİTMA ÖRNEK1: İki sayının toplamı

Detaylı

Algoritma ve Programlamaya Giriş

Algoritma ve Programlamaya Giriş Algoritma ve Programlamaya Giriş Algoritma Bir sorunu çözebilmek için gerekli olan sıralı ve mantıksal adımların tümüne Algoritma denir. Doğal dil ile yazılabilir. Fazlaca formal değildir. Bir algoritmada

Detaylı

1. 100 elemanlı bir dizide bir sinyalin 1 er saniye aralıklarla ölçülen gerilim değerleri tutulmaktadır. Bu sinyalin tepeden tepeye genliğini,

1. 100 elemanlı bir dizide bir sinyalin 1 er saniye aralıklarla ölçülen gerilim değerleri tutulmaktadır. Bu sinyalin tepeden tepeye genliğini, 1. 100 elemanlı bir dizide bir sinyalin 1 er saniye aralıklarla ölçülen gerilim değerleri tutulmaktadır. Bu sinyalin tepeden tepeye genliğini, pozitif tepe genliğini, negatif tepe genliğini ve ortalamasını

Detaylı

GENEL GĐRĐŞ-ÇIKIŞ FONKSĐYONLARI. ENF102 Jeoloji 1. #include <stdio.h> printf Fonksiyonu ÖRNEK. printf

GENEL GĐRĐŞ-ÇIKIŞ FONKSĐYONLARI. ENF102 Jeoloji 1. #include <stdio.h> printf Fonksiyonu ÖRNEK. printf Giriş GENEL GĐRĐŞ-ÇIKIŞ FONKSĐYONLARI printf Fonksiyonu scanf Fonksiyonu Verilerin kaybolmaması için hafızada değişkenler içine yerleştirilmeleri gerekir. Bu veriler iki şekilde yerleştirilebilir. Değişkene

Detaylı

KOCAELİ ÜNİVERSİTESİ BİLGİSAYAR MÜHENDİSLİĞİ. BİLGİSAYAR LABORATUVARI II FİNAL SINAVI SORU ve CEVAPLARI(I. ogr)

KOCAELİ ÜNİVERSİTESİ BİLGİSAYAR MÜHENDİSLİĞİ. BİLGİSAYAR LABORATUVARI II FİNAL SINAVI SORU ve CEVAPLARI(I. ogr) KOCAELİ ÜNİVERSİTESİ BİLGİSAYAR MÜHENDİSLİĞİ BİLGİSAYAR LABORATUVARI II FİNAL SINAVI SORU ve CEVAPLARI(I. ogr) 1. Kendisine gönderilen iki karakter dizisini birleştirip geriye tek bir dizi döndüren ve

Detaylı

İnternet Programcılığı Dersi 2.Dönem Ders Notu

İnternet Programcılığı Dersi 2.Dönem Ders Notu İnternet Programcılığı Dersi 2.Dönem Ders Notu DEĞİŞKEN TİPLERİ TAM SAYI (İNTEGER) VERİ TİPİ Negatif veya pozitif ondalık kısmı bulunmayan sayılardır. Örnek: $i=65; $x=345; ONDALIK(REAL)VERİ TİPİ Ondalıklı

Detaylı

B02.6 Karar Verme, Eşitlik ve Bağıntı Operatörleri

B02.6 Karar Verme, Eşitlik ve Bağıntı Operatörleri B02.6 Karar Verme, Eşitlik ve Bağıntı Operatörleri 49 Yrd. Doç. Dr. Yakup EMÜL, Bilgisayar Programlama Ders Notları (B02) Çalıştırılabilir C ifadeleri ya bir işlem gerçekleştirir ( girilen verilerin toplanması

Detaylı