* Önsöz
* Giriş
* Veri Tipleri, Değişkenler
* Operatörler
* Temel G/Ç Fonksiyonları
* Temel Kütüphane Fonksiyonları
* Karşılaştırma Deyimleri
* Döngüler
* Fonksiyonlar I
* Fonksiyonlar II
* Diziler
* Gösterici (Pointer) Kavramı
* Katarlar (Stringler)
* Dinamik Bellek Yönetimi
* Gösterici Uygulamaları
* Yapılar ve Birlikler
* Dosya Yönetimi
* Bit Düzeyinde Çalışmak
* Port Denetimi
* Grafik Kullanımı
* C Makroları
* Kısaca C++
* Derleme Seçenekleri
* Tarih-Saat Fonksiyonları
* Monte-Carlo Yöntemleri
* Fortran ve C
* Yararlanılan Kaynaklar
* Dev-C++
* Salford (silversoft FTN95)
* GCC
* Turbo C
* Eclipse IDE
* NetBeans IDE
* programlama.com
* C Programcıları Derneği
* C (wikipedia)
* C++ (wikipedia)
* cplusplus.com
* koders.com
* Hot scripts
|
|
Ders 10: Diziler
###################- (%95)
|
En son güncelleme: Wed, 30 Nov 2011 13:22:02 +0200
Giriş
Dizi, aynı tipteki verilere tek bir isimle erişmek için kullanılan bir kümedir.
Bu küme matematikteki küme kavramından biraz farklıdır.
Bir dizi bildirildikten sonra, dizinin bütün elemanları bellekte peşpeşe saklanır
[1].
Bu yüzden dizilere tek bir isim altında çok sayıda değişken içeren bellek bölgesi
de denir. Buna göre, bir diziyi dizi yapan iki temel özellik vardır [2]:
- dizi elemanların bellekte (program çalıştığı sürece) sürekli biçimde bulunması
- dizi elemanların aynı türden değişkenler olması
10.1 Dizilerin Bildirimi
Bir dizi çok sayıda değişken barındırdığından, bunları birbirinden
ayırdetmek için indis adı verilen bir bilgiye ihtiyaç vardır.
C Programlama Dili'nde, bir dizi hangi tipte tanımlanmış
olursa olsun başlangıç indisi her zaman 0'dır.
Bir dizinin bildirim işleminin genel biçimi söyledir:
veriTipi dizi_adı[eleman_sayısı];
Örneğin, 5 elemanlı, kütle verilerini bellekte tutmak için, kutle dizisi şöyle tanımlanabilir:
float kutle[5];
Bu dizinin elemanlarına bir değer atama işlemi şöyle yapılabilir:
kutle[0] = 8.471
kutle[1] = 3.683
kutle[2] = 9.107
kutle[3] = 4.739
kutle[4] = 3.918
NOT
1. elemanın indisi 0,
5. elemanın indisinin 4 olduğuna dikkat edin.
|
Bildirim sırasında dizilerin eleman sayısı tamsayı türünden bir sabit
ifadesiyle belirtilmesi zorunludur. Örneğin:
int n = 100;
int a[n];
şeklindeki tanımlama, dizi uzunluğunun değişken (n) ile belirtilmesi
nedeniyle geçersizdir. Bunun yerine, dizilerin eleman sayısı aşağıdaki gibi sembolik sabitlerle
belirtmek mümkündür.
#define n 100
...
int a[n];
Bir dizinin bellekte kapladığı alanın bayt cinsinden karşılığı sizeof
operatörü ile öğrenilebilir.
int a[5], b, c;
...
b = sizeof(a); /* bellekte kapladığı alan: b = 4*5 = 20 bayt */
c = sizeof(a) / sizeof(int); /* Dizinin boyutu : c = 20/4 = 5 */
10.2 Dizilere Başlangıç Değeri Verme
Bir diziye başlangıç değerleri aşağıdaki gibi kısa formda atanabilir:
float kutle[5]= { 8.471, 3.683, 9.107, 4.739, 3.918 };
int maliyet[3] = { 25, 72, 94 };
double a[4] = { 10.0, 5.2, 7.5, 0.0};
Küme parantezlerinin sonlandırıcı ; karakteri ile bittiğine dikkat ediniz.
Bir dizinin uzunluğu belirtilmeden de başlangıç değeri atamak mümkündür.
int a[] = { 100, 200, 300, 400 };
float v[] = { 9.8, 11.0, 7.5, 0.0, 12.5};
Derleyici bu şekilde bir atama ile karşılaştığında, küme parantezi içindeki
eleman sayısını hesaplar ve dizinin o uzunlukta açıldığını varsayar.
Yukarıdaki örnekte, a dizisinin 4, v dizisinin
5 elemanlı olduğu varsayılır.
10.3 Dizileri Yazdırma/Okuma
printf ve scanf fonksiyonları bir dizinin okunması
ve yazdırılması için de kullanılır. Örneğin bir A dizisinin
aşağıdaki gibi bildirildiğini varsayalım:
int A[10];
Bu dizinin elemanlarını klavyeden okumak için:
for(i=0; i<10; i++)
scanf("%d",&A[i]);
daha sonra bu değerlerini ekrana yazmak için:
for(i=0;i<10;i++)
printf("%d\n",A[i]);
Program 10.1, klavyeden girilen N = 10 adet sayının ortalamasını
hesaplar. Ortalama
formülü ile hesaplanabilir.
Program 10.1: 10 sayının ortalamasını hesaplar
01:
02:
03:
04:
05:
06:
07:
08:
09:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
|
/* 10prg01.c: 10 tamsayının aritmetik ortalamasını hesaplar */
#include <stdio.h>
#define N 10
int main()
{
int i;
float x[N], ort, toplam = 0.0;
for(i=0; i<N; i++)
{
/* i. eleman okunuyor ... */
printf("%d. sayi : ",i+1);
scanf("%f",&x[i]);
toplam += x[i];
}
ort = toplam/N;
printf("Sayilarin ortalamasi = %f\n",ort);
return 0;
} |
ÇIKTI
1. sayi : 1
2. sayi : 0
3. sayi : 9
4. sayi : 7
5. sayi : 2
6. sayi : 10
7. sayi : 11
8. sayi : 4
9. sayi : 6
10. sayi : 5
Sayilarin ortalamasi = 5.500000
|
Bu programda, ortalaması alınacak sayılar adı x olan 10 elemanlı
tamsayı tipindeki bir dizide saklanmıştır.
Bu şekilde saklanan sayıların hepsi program çalıştığı sürece
bellekte kalacaktır. Bu sayede, program içinde daha sonra (gerektiğinde)
aynı sayılar tekrar kullanılabilir.
Bu program, dizi kullanmadan da yazılabilirdi. Fakat, bazı hallerde dizi kullanmak kaçınılmaz olur.
Porgram 10.2, n = 10 tane sayının ortalamasını ve standart sapmasını
hesaplar. Standart sapma,
formülü ile hesaplanabilir. Burada,
Program 10.2: 10 sayının ortalamasını ve standart sapmasını hesaplar
01:
02:
03:
04:
05:
06:
07:
08:
09:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
|
/* 10prg02.c
10 tane sayının aritmetik ortlamasını ve standart sapmasını hespalar. */
#include <stdio.h>
#include <math.h>
#define N 10
int main(void)
{
int i;
float x[N], toplam = 0.0, ort, std_sap = 0.0;
/* ortalama hesabı */
for(i=0; i<N; i++)
{
printf("%d. sayi : ",i+1);
scanf("%f",&x[i]);
toplam += x[i];
}
ort = toplam/N;
/* standart sapma hesabı */
for(toplam = 0.0, i=0; i<N; i++)
toplam += pow(x[i]-ort, 2.0);
std_sap = sqrt( toplam/(N-1) );
printf("Ortalama = %f\n",ort);
printf("Standart sapma = %f\n",std_sap);
return 0;
} |
ÇIKTI
1. sayi : 7
2. sayi : 8
3. sayi : 9
4. sayi : 6
5. sayi : 5
6. sayi : 8
7. sayi : 8
8. sayi : 10
9. sayi : 11
10. sayi : 6
Ortalama = 7.000000
Standart sapma = 2.054805
|
10.4 Sıralama (Sorting)
Bazı uygulamalarda bir grup sayının büyükten küçüğe,
veya küçükten büyüğe, doğru sıralanması gerekebilir.
Bu tip sıralama problemleri için çeşitli algoritmalar geliştirilmiştir.
Sıralama mantığını anlamadan önce bir dizinin en büyük (veya en küçük)
elemanının nasıl bulunduğunu inceleyelim.
Program 10.3, bir dizinin en büyük elemanını bulup ekrana yazar.
Program 10.3: Bir dizinin en büyük elemanının bulunuşu
01:
02:
03:
04:
05:
06:
07:
08:
09:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
|
/* 10prg03.c
Bir dizinin en büyük elemanını bulup ekrana yazar */
#include <stdio.h>
int main(void)
{
int a[10] = {100, -250, 400, 125 ,550, 900, 689, 450, 347, 700};
int k, eb;
/* ilk eleman en büyük kabul ediliyor */
eb = a[0];
for(k=1; k<10; k++)
if( a[k]>eb ) eb = a[k];
printf("En buyuk eleman = %d\n",eb);
return 0;
}
|
ÇIKTI
En büyük sayıyı bulan bu algoritma oldukça kolaydır.
12. satırda eb = a[0]; ataması ile dizinin ilk elemanının en büyük
olduğu varsayılır. Daha sonra büyüğe rastladıkça (15. satır)
eb = a[k]; ile eb değişmektedir.
Program 10.3 bir dizinin en büyük elemanını bulur.
En büyük elemanın kaçıncı indis (eleman) olduğu sorgulanmak istendiğinde:
programdaki koşul yapısını aşağıdaki gibi değiştirmek yeterlidir.
eb değiştikçe, i değişkeni en büyük elemanın indisini tutar.
for(k=0; k<10; k++){
if( a[k] > eb ){
eb = a[k];
i = k;
}
}
n elemanlı bir dizinin, elemanlarını büyükten küçüğe doğru
sıralamak için çok popüler iki algoritma aşağıda verilmiştir[2].
Seçerek Sıralama (Selection Sort):
En büyük elemanı bul başa koy biçimindeki sıramadır.
Algoritmanın uygulaması Program 10.4'de gösterilmiştir.
Bu algoritmada kullanılan kombinasyon sayısı (algoritmanın karmaşıklığı):
n*(n-1)/2 dir.
Program 10.4: Seçerek Sıralama (Selection Sort) Algoritması
01:
02:
03:
04:
05:
06:
07:
08:
09:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
|
/* 09prg04.c
Seçerek Sıralama (Selection Sort) Algoritması ile bir
dizinin elemanlarını büyükten küçüğe dogru sıralar */
#include <stdio.h>
#define n 10
int main(void)
{
int a[n] = {100, -250, 400, 125 ,550, 900, 689, 450, 347, 700};
int i, j, k, eb;
/* Dizinin kendisi */
printf("Once : ");
for(k=0;k<n;k++)
printf("%5d ",a[k]);
/* Sırala */
for(k=0; k<n-1; k++){
eb = a[k];
i = k;
for(j=k+1; j<n; j++)
if( a[j]>eb ){
eb = a[j];
i = j;
}
a[i] = a[k];
a[k] = eb;
}
/* Sıralama bitti */
printf("\nSonra: ");
for(k=0; k<n; k++)
printf("%5d ",a[k]);
printf("\n");
return 0;
}
|
ÇIKTI
Once : 100 -250 400 125 550 900 689 450 347 700
Sonra: 900 700 689 550 450 400 347 125 100 -250
|
Kabarcık Sıralama (Bubble Sort):
Yanyana elemanları karşılaştırarak yer değiştir biçimde sıralamadır.
Algoritmanın uygulaması Program 10.5'de gösterilmiştir.
Bu algoritmanın karmaşıklığı: (n-1)2 dir.
Program 10.5: Kabarcık Sıralama (Bubble Sort) Algoritması
01:
02:
03:
04:
05:
06:
07:
08:
09:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
|
/* 09prg05.c
Kabarcık Sıralama (Bubble Sort) Algoritması ile bir
dizinin elemanlarını büyükten küçüğe dogru sıralar */
#include <stdio.h>
#define n 10
int main(void)
{
int a[n] = {100, -250, 400, 125 ,550, 900, 689, 450, 347, 700};
int j,k,gecici;
/* Dizinin kendisi */
printf("Once : ");
for(k=0; k<n; k++)
printf("%5d ",a[k]);
/* Sırala */
for(k=0; k<n-1; k++)
for(j=0; j<n-1; j++)
if( a[j]<a[j+1] ){
gecici = a[j];
a[j] = a[j+1];
a[j+1] = gecici;
}
/* Sıralama bitti */
printf("\nSonra: ");
for(k=0; k<n; k++)
printf("%5d ",a[k]);
printf("\n");
return 0;
} |
ÇIKTI
Once : 100 -250 400 125 550 900 689 450 347 700
Sonra: 900 700 689 550 450 400 347 125 100 -250
|
10.5 Karakter Dizileri (Strings)
C dilinde, karakter dizileri oldukça sık kullanılır.
Sadece karakter dizilerine özel olarak, karakter dizilerinin sonuna sonlandırcı karakter
olarak adlandırılan bir simge eklenir. Sonlandırcı karakter, işlemlerin hızlı ve etkin
bir biçimde yapılabilmesine olanak sağlar[2].
Sonlandırıcı karakter:
- dizinin bittiği yeri gösterir,
- ASCII tablosunun sıfır numaralı ('\0') karakteridir.
Karakter dizilerine iki şekilde başlangıç değeri verilebilir.
char s[7] = {'d','e','n','e','m','e','\0'};
yada
char s[7] = "deneme";
Birinci tanımlamada sonlandırıcı karakter programcı tarafından konmalıdır.
Ikinci tanımlamada ise buna gerek yoktur. Çünkü, sonlandırıcı karakter bu atamayla,
derleyici tarafından eklenir.
NOT
char s[7] = "deneme";
ataması geçeli olmasına rağmen, aşağıdaki atama geçersizdir:
char s[7];
char s = "deneme";
|
Karakter dizileri gets() fonksiyonu ile klavyeden okunabilir.
char ad[20];
...
gets(ad);
Karakter dizleri veya katarlar Bölüm 12'de daha
ayrıntılı işlenecektir. Burada sadece iki basit örnek sunulmuştur.
Program 10.6'da bir karakter dizisinin uzunluğunun nasıl bulunduğu,
Program 10.7'de ise bir karakter dizisinin tersyüz edilişi
gösterilmiştir. İnceleyiniz.
Program 10.6: Bir karakter dizisinin uzunluğunu bulur
01:
02:
03:
04:
05:
06:
07:
08:
09:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
|
/* 09prg06.c: Bir karakter dizisinin uzunluğunu bulur */
#include <stdio.h>
int main(void)
{
char s[40];
int k = 0;
/* diziyi oku */
printf("Bir seyler yazin : ");
gets(s);
/* sonlandırıcı karaktere kadar karakterleri say */
while( s[k]!='\0' )
k++;
printf("Dizinin uzunlugu : %d\n",k);
return 0;
} |
ÇIKTI
Birseyler yazin : Gazintep Universitesi
Dizinin uzunlugu : 21
|
Program 10.7: Bir karakter dizisinin tersini bulur
01:
02:
03:
04:
05:
06:
07:
08:
09:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
|
/* 09prg07.c: Bir karakter dizisini tersyüz eder */
#include <stdio.h>
int main(void)
{
char s[40], gecici;
int i, n;
/* diziyi oku */
printf("Bir seyler yazin : ");
gets(s);
/* sonlandırıcı karaktere kadar */
for(n=0; s[n] != '\0'; n++)
;
for(i=0; i<n/2; i++){
gecici = s[n-i-1];
s[n-i-1] = s[i];
s[i] = gecici;
}
printf("Tersi : %s\n",s);
return 0;
} |
ÇIKTI
Bir seyler yazin : Deneme
Tersi : emeneD
|
10.6 Çok Boyutlu Diziler
Bir dizi aşağıdaki gibi bildirildiğinde bir boyutlu (tek indisli)
dizi olarak adlandırılır. Bu tip dizilere vektör denir.
float a[9];
Bir dizi birden çok boyuta sahip olabilir.
Örneğin iki boyutlu b dizisi şöyle tanımlanabilir:
float b[9][4];
İki boyutlu diziler matris olarak adlandırılır.
ilk boyuta satır, ikinci boyuta sütün denir.
Yukarıda b matrisinin eleman sayısı 9x4=36 dır.
Bu durumda, genel olarak bir dizi şöyle gösterilir:
Tablo 10.1: Dizlerin Bildirimi
Dizi Çeşiti |
Genel Bildirimi |
Örnek |
Tek boyutlu diziler (Vektörler) |
tip dizi_adı[eleman_sayısı] |
int veri[10]; |
İki boyutlu diziler (Matrisler) |
tip dizi_adı[satır_sayısı][sutun_sayısı] |
float mat[5][4]; |
Çok boyutlu diziler |
tip dizi_adı[boyut_1][boyut_2]...[boyut_n]; |
double x[2][4][2]; |
Çok boyutlu diziler tek boyuta indir generek bellekte tutulurlar.
Tek indisli dizilerde olduğu gibi, çok indisli dizilere de başlangıç
değeri vermek mümkün. Örneğin 3 satır ve 4 sütünlu (3x4=12 elemanlı) bir
x matrisinin elemanları şöyle tanımlanabilir:
int x[3][4] = {11,34,42,60, 72,99,10,50, 80,66,21,38};
yada
int x[3][4] = {11,34,42,60, /* 1. satır elemanları */
72,99,10,50, /* 2. satır elemanları */
80,66,21,38}; /* 3. satır elemanları */
Bu matris ekrana matris formunda yazılmak istendiğinde:
for(i=0; i<3; i++)
{
for(j=0; j<4; j++)
printf("%4d",x[i][j]);
printf("\n");
}
çıktısı:
11 34 42 60
72 99 10 50
80 66 21 38
şeklinde olacaktır.
Program 10.8, iki matrisin toplamını başka bir matrise aktarır.
Matris toplamı
formülü ile tanımlıdır. İnceleyiniz.
Program 10.8: İki matrisin toplamı
01:
02:
03:
04:
05:
06:
07:
08:
09:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
|
/* 09prg08.c: iki matrisin toplamı */
#include <stdio.h>
#define SAT 2
#define SUT 3
int main()
{
int a[SAT][SUT] = {5, 3, 7, 0, 1, 2};
int b[SAT][SUT] = {1, 2, 3, 4, 5, 6};
int c[SAT][SUT];
int i, j;
puts("A Matrisi:");
for(i=0; i<SAT; i++){
for(j=0; j<SUT; j++)
printf("%4d",a[i][j]);
printf("\n");
}
puts("B Matrisi:");
for(i=0; i<SAT; i++){
for(j=0; j<SUT; j++)
printf("%4d",b[i][j]);
printf("\n");
}
puts("\nC Matrisi:");
for(i=0; i<SAT; i++){
for(j=0; j<SUT; j++){
c[i][j] = a[i][j] + b[i][j];
printf("%4d",c[i][j]);
}
printf("\n");
}
return 0;
} |
ÇIKTI
A Matrisi:
5 3 7
0 1 2
B Matrisi:
1 2 3
4 5 6
C Matrisi:
6 5 10
4 6 8
|
Program 10.9, iki kare matrisin çarpımı başka bir matrise aktarır.
Matris çarpımı
formülü ile tanımlıdır.
Program 10.9: İki matrisin çarpımı
01:
02:
03:
04:
05:
06:
07:
08:
09:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
|
/* 10prg09.c: 3x3 boyutundaki iki kare matrisin çarpımı */
#include <stdio.h>
#define N 3
int main()
{
int a[N][N], b[N][N], c[N][N];
int i,j,k,toplam;
puts("A Matrisini girin:");
for(i=0; i<N; i++)
for(j=0; j<N; j++)
scanf("%d",&a[i][j]);
puts("B Matrisini girin:");
for(i=0; i<N; i++)
for(j=0; j<N; j++)
scanf("%d",&b[i][j]);
puts("\nC Matrisi:");
for(i=0; i<N; i++){
for(j=0; j<N; j++){
for(toplam=0, k=0; k<N; k++)
toplam += a[i][k]*b[k][j];
c[i][j] = toplam;
printf("%4d",c[i][j]);
}
printf("\n");
}
return 0;
} |
ÇIKTI
A Matrisini girin:
5 3 7
0 1 2
9 0 4
B Matrisini girin:
1 2 3
4 5 6
7 8 9
C Matrisi:
66 81 96
18 21 24
37 50 63
|
10.7 Dizilerin Fonksiyonlarda Kullanılması
Diziler de sıradan değişkenler gibi bir fonksiyona parametere olarak
akratılabilir. Fakat, aktarma kuralı biraz farklıdır. Her zaman
dizinin yanında boyutunun da bilinmesi gerekir.
Program 10.10'da, bir dizinin elemanlarının
yazdırılması işi bir fonksiyona yaptırılmıştır. Fonkisyona parametre
olarak dizinin yanında boyutu da ilave edilmiştir. İnceleyiniz.
Program 10.10: Bir dizinin yazdırılması
01:
02:
03:
04:
05:
06:
07:
08:
09:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
|
/* 10prg10.c: bir dizinin yazdırılması */
#include <stdio.h>
void dizi_yaz(float x[], int n);
int main(){
float kutle[5]= { 8.471, 3.683, 9.107, 4.739, 3.918 };
dizi_yaz(kutle, 5);
return 0;
}
void dizi_yaz(float x[], int n)
{
int i;
for(i=0; i<n; i++)
printf("%7.3f", x[i]);
printf("\n");
} |
ÇIKTI
8.471 3.683 9.107 4.739 3.918
|
Eğer dizi boyutu #define önişlemcisi ile belirtilirse
boyutun ayrıca parametre olarak kullanılmasına gerek youktur. Bu durumda
Program 10.10 şöyle değiştirlebilir:
...
#define BOYUT 5
void dizi_yaz(float x[]);
void main(void)
{
float kutle[BOYUT]= { 8.471, 3.683, 9.107, 4.739, 3.918 };
dizi_yaz(kutle);
}
...
Program 10.3'de bir dizinin en büyük elemanının
nasıl bulunduğu gösterilmişti. En büyük elemanı bulma işlemi bir
fonksiyona nasıl yaptırıldığı Program 10.11'de gösterilmiştir.
Program 10.11: Bir dizinin en büyük elemanının bulunması
01:
02:
03:
04:
05:
06:
07:
08:
09:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
|
/* 10prg11.c
Bir dizinin en büyük elemanının fonksiyonla bulunması */
#include <stdio.h>
/* n elemanlı bir dizinin enbüyük elemanını gönderir */
int enBuyuk(int a[], int n)
{
int k, en_buyuk_eleman;
/* ilk eleman en büyük kabul ediliyor */
en_buyuk_eleman = a[0];
for(k=1; k<n; k++)
if( a[k]>en_buyuk_eleman )
en_buyuk_eleman = a[k];
return en_buyuk_eleman;
}
int main()
{
int a[10] = {100, -250, 400, 125 ,550, 900, 689, 450, 347, 700};
int eb;
eb = enBuyuk(a,10);
printf("En buyuk eleman = %d\n",eb);
return 0;
} |
ÇIKTI
Son olarak, bir kare matrisin iz (trace) değerini bulup ekrana yazan bir fonksiyon Program 10.12'de verilmişitir.
Bir kare matrisin izi, matrisin asal köşegen üzerinde bulunan elemanların toplamı olarak tanımlıdır.
Bu tanıma göre, aşağıdaki matrisin izi 2 + 8 + 4 = 14 tür..
İz matematiksel olarak şöyle gösterilir:
Program 10.12: Bir matrisin izi
01:
02:
03:
04:
05:
06:
07:
08:
09:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
|
/* 10prg12.c
Bir 3x3 bir matrisin izinin fonksiyonla bulunması */
#include <stdio.h>
double iz(double a[][3], int);
int main()
{
double a[3][3], izA;
int i,j;
puts("matrisi girin:");
for(i=0; i<3; i++)
for(j=0; j<3; j++)
scanf("%lf",&a[i][j]);
izA = iz(a,3);
printf("matrisin izi = %lf\n",izA);
return 0;
}
double iz(double a[][3], int n)
{
int i;
double toplam = 0.0;
for(i=0; i<n; i++)
toplam += a[i][i];
return toplam;
}
|
ÇIKTI
matrisi girin:
2 1 -5
3 8 6
7 1 4
matrisin izi = 14.000000
|
Matrisler, fonksiyonlara parametre olarak geçirilirken ikinci boyununda verildiğine dikkat edin.
|