Bu forumdaki linkleri ve resimleri görebilmek için en az 25 mesajınız olması gerekir.
sayi_tabani(int simdiki_taban,int istenen_taban, int donusturulecek_sayi) Belirli tabanda girilen sayıyı istenilen tabana dönüştüren fonksiyonu yazınız. Girilen sayının belirtilen tabanda olup olmadığının kontrolü yapılmalı eğer değilse tekrar sayı girişi istenilmelidir.
Kod: Kodu kopyalamak için üzerine çift tıklayın!
#include<stdio.h>
#include<conio.h>
#include<windows.h>
int sayi_tabani(int,int,int);
main()
{
int a,b,sayi;
do
{
system("cls");//ekrani sil
printf("Simdiki Taban : ");
scanf("%d",&a);
printf("Donusturulecek Taban : ");
scanf("%d",&b);
printf("Sayi girisi yapiniz : ");
scanf("%d",&sayi);
}
while(sayi_tabani(a,b,sayi)==0);//0 dönerse kural dışı birşey olmuş olacak ve işlem tekrar yapılacak.
system("cls");//ekrani sil
sayi_tabani(a,b,sayi);//fonksiyona gönderelim.
getch();
}
int sayi_tabani(int simdiki_taban,int istenen_taban, int donusturulecek_sayi)
{
int toplam=0,carp=1;
int kalan=0,basamak=1,i;
int yedek=donusturulecek_sayi;//sadece ekrana yazdirmak için yedeğini tutarız.
do
{
if(donusturulecek_sayi%10>=simdiki_taban)//sayinin 10'a göre modunu alarak sırayla hep en sağdaki sayiyi kontrol ederiz..
//..xxxx işaretlediğim satırda da 10 a bolerek en sagdaki sayinin değişmesini sağlarız.
return 0;//koşul sağlanmazsa fonksiyon 0 döndürür ve tekrar değer girilmesi istenir.
else
{
toplam+=simdiki_taban*(donusturulecek_sayi%10)*carp;//10'luk tabana dönüştürürüz.
carp*=10;
donusturulecek_sayi/=10;//xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
}
}
while(donusturulecek_sayi>0);//sayi 0'dan buyuk olana kadar bu ıslem devam eder.
printf("\n%d Tabaninda Cevirilen deger : %d",simdiki_taban,yedek);
int toplamyedek=toplam;//toplam degerini kaybetmemek için yedeğini alırız.
do//taban aritmetiğinde değerler sondan başa doğru yazıldıgı ıcın once basamak sayısını bulup..
{//..basamak ilerledikçe 10 ile çarparız.bu yüzden burada basamak sayısını buluyoruz.
toplamyedek/=istenen_taban;//toplamyedek değerini istenen tabana bölerek her defasında yeni bölen elde ederiz.
basamak++;
}
while(toplamyedek>istenen_taban);//bölen istenen tabandan küçükse bu döngüden çıkar.
carp=1;//basamak işlemlerini yaparız.
for(i=1;i<basamak;i++)
carp*=10;
int son=carp;//döngünün bitişini kontrol etmek için son değerini tutarız..
carp=1;//yeni bi değişken atayacağımıza boşta duran çarp değerini 1'e eşitleyerek bellekten yer kazanalım.
int sonuc=0;//bizden istenen cevap.
do
{
sonuc+=(toplam%istenen_taban) * carp;//herseferinde nuldugum sayiyi carp degiskenıyle carpıyoruz.
toplam/=istenen_taban;//bölenimiz her seferinde değişiyor
carp*=10;//basamak ilerledikçe basamak değerini 10'la çarparız.
}
while(carp<=son);
printf("\n%d Tabanina Donusen sayi : %d",istenen_taban,sonuc);//sonucu ekrana yazdırıp programdan çıkılır.
}