IRCForumları - IRC ve mIRC Kullanıcılarının Buluşma Noktası

IRCForumları - IRC ve mIRC Kullanıcılarının Buluşma Noktası (https://www.ircforumlari.net/)
-   C ve C++ (https://www.ircforumlari.net/c-ve-c/)
-   -   Taban Aritmetiği (https://www.ircforumlari.net/c-ve-c/456490-taban-aritmetigi.html)

aSi 25 Şubat 2012 19:48

Taban Aritmetiği
 
[Üye Olmadan Linkleri Göremezsiniz. Üye Olmak için TIKLAYIN...]
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:

#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.
}





Tüm Zamanlar GMT +3 Olarak Ayarlanmış. Şuanki Zaman: 08:28.

Powered by vBulletin® Version 3.8.11
Copyright ©2000 - 2025, vBulletin Solutions, Inc.
Search Engine Friendly URLs by vBSEO
Copyright ©2004 - 2025 IRCForumlari.Net Sparhawk