Ararım seni her yerde...

Gösterici Uygulamaları (Pointer)

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

14.1 Gösterici Uygulamarı

    *Rastgele dizi
    *Bir dizinin elemanlarını küçükten büyüğe doğru sıralama
    *Bir dizinin kare kökünü hesaplayan fonksiyon
    *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


Hiç yorum yok:

Yorum Gönder