C programlama Pointer(işaretçi) mantığı

//İlhan BAHAR

//17.11.2008

//Pointer Genel


//Bu program sayesinde pointerların çalışma mantığını iyice kavramış olacaksınız.Programda kelimeleri tersten yazdırma,uzunluk bulma,karşılaştırma,ascii koduna göre sıralama

//Türkçe karakterleri atarak,yerine ingilizce karakterleri yerleştirmek gibi bir çok ufak programdan oluşmaktadır.


#include <stdio.h>

#include <conio.h>

#include <stdlib.h>//system çalışsın diye ekledim

int Uzunluk_Bul(char);

void Tersten_Yazdir(char *,char);

void Karsilastir(char *,char *);

void Sirala(char);

void Turkce_At(char);

//Uzunluk buluyoruz

int Uzunluk_Bul(char *adres)

{

int uzunluk=0;

while (*adres)

{

uzunluk++;

adres++;

}

return uzunluk;

}

//Kelimeleri tersten yazdırıyoruz

void Tersten_Yazdir(char *adres,char kelime1[])

{

char *ilkadres,*sonadres;

char temp;

int i=0,uzunluk=0;

uzunluk=Uzunluk_Bul(adres);

ilkadres=&kelime1[0];

sonadres=&kelime1[uzunluk-1];

//Ortadan itibaren sondakini başa,baştakini sona alıyoruz

while (i<uzunluk/2)

{

temp=*ilkadres;

*ilkadres=*sonadres;

*sonadres=temp;

ilkadres++;

sonadres–;

i++;

}

printf (“%s”,kelime1);

getch();

}


//Pointer yardımıyla kelimeleri karşılaştırıyoruz


void Karsilastir(char *ilkadres,char *sonadres)

{

if (*ilkadres == *sonadres)

printf (“nKelimeler esit”);

else

printf (“nKelimeler esit degil”);

getch();

}


//Ascii kodu ile sıralama

void Sirala(char *adres)

{

int temp=0,i=0;

int karakter[100];

while (*adres)//Ascii sayı değerlerini bir diziye aktarıyoruz

{

karakter[i]=*adres;

i++;

adres++;      //Adresi bir artırarak her bir karaktere ulaşıyoruz

}

for (int j=0;j<i-1;j++)//Sıralama birinci for

{

for (int n=0;n<i-1;n++)//Sıralama ikinci for

{

if (karakter[n]<karakter[n+1])

{

temp=karakter[n];

karakter[n]=karakter[n+1];

karakter[n+1]=temp;

}

}

}

printf (“n”);//Karışmaması için bir alt satıra iniliyor.

for (int z=0;z<i;z++)//Ekrana büyükten küçüğe sıralanmış olarak yazılır

{

printf (“%c”,karakter[z]);

}

getch();

}


//Türkçe karakterleri atıp düzeltelim

void Turkce_At(char kelime1[])

{

char *adres;

int karakterler []={-121,-115,-108,-97,-127,-89};

int duzelt []={99,105,111,115,117,103};

int deger=0,i=0;

adres=kelime1;//Kelimemizin adresini alıyoruz

while (*adres)

{

deger=kelime1[i];//Kelimemizin değerini sayısal ascii değerine çeviriyoruz

for (int j=0;j<6;j++)

{

if (deger==karakterler[j])

*adres=duzelt[j];//Direk kelime adresinden değiştiriyoruz

}

adres++;

i++;

}

printf (“n”);

for (int j=0;j<i;j++)

printf (“%c”,kelime1[j]);

getch();

}

main(int)

{

int cikis=1;

char kelime1[50],kelime2[50];

char *adres,*ilkadres,*sonadres;


do

{

//Programın görüntü ekranı

system (“cls”);

printf (“nnnn t t t 1.Kelime boyut belirle”);

printf (“n t t t 2.Kelime birlestir”);

printf (“n t t t 3.Turkce karakterleri at”);

printf (“n t t t 4.Kelime karakterlerini karsilastir”);

printf (“n t t t 5.Tersten yazdir”);

printf (“n t t t 6.Kelime ascii sirasini belirle”);

printf (“n t t t 0.Cikis”);

printf (“n n  t t t Seciminiz (0-6) =>”);

scanf (“%d”,&cikis);

adres=&kelime1[0];//Programda her yerde kullanmak üzere pointer işaretini alıyoruz.

//Programda bir kere almak adına kontroller yapıyoruz

if (cikis !=0)

{

printf (“n nKelimeyi giriniz=”);

scanf (“%s”,&kelime1);

}

if (cikis == 2)

{

printf (“nikinci kelimeyi giriniz=”);

scanf (“%s”,&kelime2);

printf (“nKelimelerin birlesimi=%s%s”,kelime1,kelime2);

getch();

}

if (cikis==1)

{

printf (“nUzunluk=%d”,Uzunluk_Bul(adres));

getch();

}

if (cikis==5)

Tersten_Yazdir(adres,kelime1);

if (cikis==4)

{

printf (“nikinci kelimeyi giriniz=”);

scanf (“%s”,&kelime2);

ilkadres=&kelime1[0];

sonadres=&kelime2[0];

Karsilastir(ilkadres,sonadres);

}

if (cikis==6)

Sirala(adres);

if (cikis==3)

Turkce_At(kelime1);

}while (cikis!=0);

}

Benzer Yazılar

Yorumlar

Yorum Yazın

Su elementleri kullanabilirsiniz : <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

Arama
RSS
Beni yukari isinla