C/C++ / Pointer ve String Örneği


Visual Basic ve .NET Framework    Visual Basic ve .NET Framework İle İlgili Paylaşım Kategorisi

Yazar: AlpBenjamins    1 Yorum    241 Görüntüleme
  • Derecelendirme: 0/5 - 0 oy

Paylaşım Tarihi: 01.02.2016, 12:13:09 #1
AlpBenjamins Cezalı Üye
Cezalı Üye
Status: Çevrimdışı Yorumları:269 Konuları:118 Kayıt Tarihi:28.11.2015

ALINTIDIR

Merhaba Arkadaşlar,

C/C++ dilinin önemli konularından Pointerlar ve Stringler ile ilgili bir örnek yapacağız. 

Program ilk girişte şifre isteyecek, şifre doğru ise kullanıcı işlem yapabilecek ve şifre için kullanıcıya 3 hak tanıyacağız.

Program kullanıcının belirlediği hane kadar dizi oluştucak ve elemanları kullanıcıdan alacak, karışık sıra ile girilen dizileri kücükten büyüğe sıralayacak, dizinin aritmetik ortalamasını bulacak, en büyük elemanı ve adresini verecek


Kod:

Kod:
1
2
3
4
5
6
7
8
9
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
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
#include <stdio.h>
#include <stdlib.h>
#include <string.h> /*string fonksiyonlarını kullanacağım için kütüphaneyi aktif ediyorum*/
int main()
{
        char sifre[5];
        /* 4 haneli sifremi tutacak bir string olusturdum ayrıca '\0' null karakteri için de 1 hane ayırıyorum*/

start:
        printf("Lutfen Sifreyi Giriniz: ");
        gets(sifre);

        /* scanf ile de alabilirdim fakat gets ile almayı tercih ettim, scanf kullanmak daha guvenlidir; gets kullandığınız zaman 4 haneli olan sifreyi 5 haneli olarak girdiğimizde gets() fonksiyonu string buyuklugunu dikkate almadıgı için programın kırılabilme riski var, gösterme amaçlı gets() kullandım*/

        if(strcmp(sifre,"1234") == 0) 
        { 
            puts("Tebrikler, Sifre Dogru.. Yonlendiriliyorsunuz..\n\n"); 
             /*puts() fonksiyonu printf ile aynı gorevi gorur */

            void diziSirala(int dizi[], int N);
            void Bul(int dizi[], int N);
            float Ortalama(int dizi[], int N);

/* program içinde yazdığım fonksiyonlar main fonksiyonunun altında kaldığı için main fonksiyonu yazdığım fonksiyonları tanımayacaktır fonksiyonları kullanabilmek için kendimiz tanıtıyoruz, fonksiyonları main fonksiyonunun üstüne aldıgınız zaman burada tanımlamanıza gerek kalmayacaktır.*/


            int N, temp, dizi[100];

            printf("Dizinin Eleman Sayisini Giriniz: ");
            scanf("%d",&N);
            printf("\n\n");

            for(int i=0; i<N; i++)
            {
                printf("Dizinin %d. elemanini giriniz: ",i+1);
                scanf("%d", &dizi[i]);
                printf("\n");
            }

            Bul(dizi,N);
            printf("\n");
            
            printf("Dizinin aritmetik ortalamasi: %.2f\n\n",Ortalama(dizi,N));

            diziSirala(dizi, N);
                
        }
        else
        {
            printf("Sifre Yanlis.. Tekrar Deneyin.\n");
            goto start;
        }

            system("pause");
}


void diziSirala(int dizi[], int N)
{
    void diziYazdir(int dizi[], int N);

    int *adres, temp;
    adres = dizi;

    for(int i=0; i<N-1; i++)
    {
        for(int j=i+1; j<N;j++)
        {
            if(*(adres + j) < *(adres + i))
            {
                temp = *(adres + i);
                *(adres + i) = *(adres + j);
                *(adres + j) = temp;
            }
        }
    }

    /* üst kısımda *(adres + j) ile dizi içeriğine pointer ile erişiyorum */

    diziYazdir(dizi,N);

}
void diziYazdir(int dizi[], int N)
{
    printf("Sirali Dizi: \n\n");

    for(int i=0; i<N;i++)
    {
        printf("%d. dizi elemani: %d\n",i+1,dizi[i]);
    }    
}

void Bul(int dizi[], int N)
{
    int eb = dizi[0];
    int *p = dizi;  /* pointer dizinin ilk elemanının adresini tutacak */
    
    for(int i = 1; i < N; i++)
    {
        if(eb < dizi[i])
        {
            eb = dizi[i];
            p = &dizi[i]; /* p dizinin i.elemanının adresini tutacak */
        }
    }

  printf("En buyuk eleman: %d\n", eb);
  printf("En buyuk elemanin adresi: %p\n",p);
}

float Ortalama(int dizi[], int N)
{
   int *k;
   float top=0, ort;
   int i;
  
   k = dizi;     /* veya k = &dizi[0]  işlemi de aynı görevi görecektir. */

   for(i=0; i<N; i++)
   {
      top += *(k+i);
   }
   ort = (top/N);
   return ort;
}


Paylaşım Tarihi: 14.02.2016, 18:51:28 #2
IHACKTEAMPRO Delikanlı
Onaylı Uye
Status: Çevrimdışı Yorumları:84 Konuları:25 Kayıt Tarihi:06.02.2016 Rep Puanı: 7

eyw denicem....

Kullanıcı İmzası
 #Bizde geri vites yok! gerekirse ilerden döneriz. '' IHACKTEAMPRO ''
d0B0a7.gif










Aradığınızı Bulamadınız Mı ?

Konuyu Okuyanlar:
1 Ziyaretçi