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    147 Görüntüleme
  • 0 Oy - 0 Yüzde

Paylaşım Tarihi: 01.02.2016, 12:13:09 #1
AlpBenjamins Cezalı Üye
Cezalı Üye
Status: Çevrimdışı Yorum Sayısı:270 Konu Sayısı:118 Üyelik 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:
#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ışı Yorum Sayısı:86 Konu Sayısı:25 Üyelik Tarihi:06.02.2016 Rep Puanı: 6

eyw denicem....

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









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

Konuyu görüntüleyenler:
1 Misafir