C Programlama Dili'ne Giriş

  Dersler
* Ö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

  C/C++ Derleyicileri
* Dev-C++
* Salford (silversoft FTN95)
* GCC
* Turbo C
* Eclipse IDE
* NetBeans IDE

  Dış Bağlantılar
* programlama.com
* C Programcıları Derneği

* C (wikipedia)
* C++ (wikipedia)
* cplusplus.com
* koders.com
* Hot scripts

 

Ders 14: Gösterici Uygulamaları

###############----- (%75)

En son güncelleme: Wed, 30 Nov 2011 13:22:02 +0200

Giriş

Bu bölümde bazı gösterici uygulamaları gösterilmiştir.

14.1   Gösterici Uygulamarı

  1. Rastgele dizi
  2. Bir dizinin elemanlarını küçükten büyüğe doğru sıralama
  3. Bir dizinin kare kökünü hesaplayan fonksiyon
  4. Dinamik matris çarpımı

Program 14.1: Rastgele dizi
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: 
/* 14prg01.c: Rastgele Dizi  */

#include <stdio.h>
#include <stdlib.h>

/* dizinin ilk n elemanına [0,1] arasında rastgele sayı atar */
void rastgele(double *dizi, int n){
  int i;

  for(i=0; i<n; i++)
    *(dizi + i) = (double) rand()/RAND_MAX;
}

int main()
{
  int i;
  double x[5];

  /* rastgele sayı üretecini değiştir */
  srand(1234567);

  rastgele(x, 5);

  puts("Rastgele dizi elemanları:");
  for(i=0; i<4; i++)
    printf("%lf\n",x[i]);

  return 0;
}

ÇIKTI

0.742788
0.631704
0.118309
0.922271


Program 14.2: Bir dizinin elemanlarını küçükten büyüğe doğru sıralama
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: 
/* 14prg02.c: 
   Bir dizinin elemanlarını küçükten büyüğe doğru sıralama  */

#include <stdio.h>
#include <stdlib.h>

/* Bir dizinin elemanlarını küçükten büyüğe doğru sıralama */
void sirala(int *a, int n){
  int k, j, gecici;

   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;
      }
}

int main()
{
   int i, x[5] = {22, 44, 11, 55, 33};

   printf("Once : ");
   for(i=0; i<5; i++)
      printf("%5d",x[i]);

   printf("\n");

   sirala(x, 5);

   printf("Sonra: ");
   for(i=0; i<5; i++) 
      printf("%5d",x[i]);

   printf("\n");

   return 0;
}

ÇIKTI

Once :    22   44   11   55   33
Sonra:    11   22   33   44   55


Program 14.3: Bir dizinin kare kökünü hesaplayan fonksiyon
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: 
45: 
/* 14prg03.c: Bir dizinin kare kökünü hesaplayan fonksiyon */

#include <stdio.h>
#include <stdlib.h>
#include <math.h>

double *kare_kok(double *, int);

int main()
{
   double  A[5] = {1.0, 2.0, 4.0, 8.0, 16.0};
   double *B;
   int i;

   printf("A dizisi: ");
   for(i=0; i<5; i++)
      printf("%lf ",A[i]);
   printf("\n");

   B = kare_kok(A, 5);

   printf("B dizisi: ");
   for(i=0; i<5; i++)
      printf("%lf ",B[i]);
   printf("\n");

  return 0;
}

/* Bir dizinin bütün elemanlarının karekökünü gönderir */
double *kare_kok(double *dizi, int boyut)
{
   int i;
   static double *c;

   /* bellekten yer iste */
   c = (double *) calloc( boyut, sizeof(double));

   if( c==NULL ) return NULL;

   for(i=0; i<boyut; i++)
       c[i] = sqrt(dizi[i]);

   return c;
}

ÇIKTI

A dizisi: 1.000000 2.000000 4.000000 8.000000 16.000000
B dizisi: 1.000000 1.414214 2.000000 2.828427 4.000000


Program 14.4: Dinamik Matris Ç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: 
38: 
39: 
40: 
41: 
42: 
43: 
44: 
45: 
46: 
47: 
48: 
49: 
50: 
51: 
52: 
53: 
54: 
55: 
56: 
57: 
58: 
59: 
60: 
61: 
62: 
63: 
64: 
65: 
66: 
67: 
68: 
69: 
70: 
71: 
72: 
73: 
74: 
75: 
76: 
77: 
78: 
79: 
80: 
81: 
82: 
83: 
84: 
85: 
86: 
/* 14prg04.c: Dinamik Matris Çarpımı 

   Bu program A(mxn) matrisi ile B(pxq) matrisini çarpımını hesaplar.
   Çarpım matrisi C(mxq), C = AB dir. Çarpımın sonucu matris_carp()
   fonksiyonu ile hesaplanır.

   Örnek:
   ~~~~~~

       [ 1 0 2 ]     [ 3 1 ]               [ 1 0 2 ] [ 3 1 ]   [ 5 1 ]
   A = [-1 3 1 ]  B =[ 2 1 ]  ==> C = AB = [-1 3 1 ] [ 2 1 ] = [ 4 2 ]
                     [ 1 0 ]                         [ 1 0 ]
*/

#include <stdio.h>
#include <stdlib.h>

double **matris_carp(double **, int, int,
                     double **, int, int);

int main()
{
   double **A;
   double **B;
   double **C;
   int i, j;

   /* A matrisi için bellekten yer ayır */
   A = (double **) calloc( 2, sizeof(double));
   for(i = 0; i < 2; i++)
      A[i] = (double *) calloc(3, sizeof(double));

   /* B matrisi için bellekten yer ayır */
   B = (double **) calloc( 3, sizeof(double));
   for(i = 0; i < 3; i++)
      B[i] = (double *) calloc(2, sizeof(double));
      
   /* A matrisinin elemanları */
   A[0][0] = 1.0; A[0][1] = 0.0; A[0][2] = 2.0; 
   A[1][0] =-1.0; A[1][1] = 3.0; A[1][2] = 1.0;

   /* B matrisinin elemanları */
   B[0][0] = 3.0; B[0][1] = 1.0; 
   B[1][0] = 2.0; B[1][1] = 1.0; 
   B[2][0] = 1.0; B[2][1] = 0.0; 

   /* C = AB matrisi */
   C = matris_carp(A,2,3, B,3,2);

   for(i=0; i<2; i++){
      for(j=0; j<2; j++)
         printf("%lf  ",C[i][j]);
      printf("\n");
   }

  return 0;
}

double **matris_carp(double **a, int m, int n, 
                     double **b, int p, int q)
{
   int i, j, k;
   double **c, t;

   /* matrisler çarpılabilir mi ?*/
   if(n != p){
     puts("matrisler carpim icin uygun değil!");
     return NULL;
   }

   /* carpim matrisi icin bellekten yer iste */
   c = (double **) calloc( m, sizeof(double));

   for(i = 0; i < m; i++)
      c[i] = (double *) calloc(q, sizeof(double));

   for(i=0; i<m; i++){
      for(j=0; j<q; j++){
         for(t=0.0, k=0; k<n; k++)
            t += a[i][k] * b[k][j];
         c[i][j] = t;
      }
   }

   return c;
}

ÇIKTI

5.000000  1.000000
4.000000  2.000000



Powered by PHP