🔔 Çevrimdışı bildirim almak ister misiniz?
Bir konuya etiketlendiğinizde, özel mesaj aldığınızda, bir mesajınız alıntılandığında forumda olmasanız bile anlık bildirim almak için lütfen izni verin.
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.
}