//İ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);
}
Yorumlar
çalışma mantığını çözdüm thanks