Neler yeni
Türkiye'nin En Güncel Forum Sitesi

Forum içeriğine ve tüm hizmetlerimize erişim sağlamak için foruma kayıt olmalı yada giriş yapmalısınız. Forum üye olmak tamamen ücretsizdir.

C | İstenilen tabandaki istenilen sayıyı 10 luk tabana çevirme

ByOnur58

Kayıtlı Üye
MFC Üyesi
  • Üyelik Tarihi
    7 Ocak 2015
  • Mesajlar
    2,113
  • MFC Puanı
    10
  • MFC Seviyesi

Kod:
#include<conio.h>
#include<stdlib.h>
#include<math.h>
#include <stdio.h>
int main()
{
    int taban,sonuc,deger[50];
    char sayi[50];
    char karakterler[17]="0123456789ABCDEF";
    int i,j;
    int counter=0,kacust=50;
    int toplam=0,degeral,ust;
         
    system("color 3b");
     
    basadon:
    counter=0;
    kacust=50;
    toplam=0;
         
    printf("istediginiz tabandaki istediginiz sayiyi 10 luk tabana cevirir.\n\n");
     
    printf("hangi tabandan ceviri yapmak istiyorsunuz:");
    tabanadon:
    scanf("%d",&taban);
     
    if(taban>16 || taban<=0)
    {
        printf("\ntaban sayisi 16 dan buyuk olamaz lutfen tekrar girin:");
        goto tabanadon;
    }
     
    if(taban>10)
    {
        printf("\n10 veya daha buyuk bir taban kullandiniz.\n");
        for(i=10;i<taban;i++)
        {
            printf("%d=%c ",i,karakterler[i]);
        }
        printf("\nyukaridaki harfleride kullanabilirsiniz.\n");
    }
     
    printf("sayiyi girin:");
    tekrargir:
    for(i=0;i<50;i++)
    {
        deger[i] = (-1);
        sayi[i] = (0);
    }
    scanf("%s",&(sayi));
     
    for(i=0;i<50;i++) // kontrol ve değiştirme işlemleri
    {
        if(sayi[i]==97)
        sayi[i] = 'A';
        if(sayi[i]==98)
        sayi[i] = 'B';
        if(sayi[i]==99)
        sayi[i] = 'C';
        if(sayi[i]==100)
        sayi[i] = 'D';
        if(sayi[i]==101)
        sayi[i] = 'E';
        if(sayi[i]==102)
        sayi[i] = 'F';
    } // ---------------
     
    for(i=0;i<50;i++) // char karakteri int e alma
    {
        if((sayi[i]>=48 && sayi[i]<=57) || (sayi[i]>=65 && sayi[i]<=70)) // değer değişkenin başka bir karakter girip işlemi mahvetmesin diye kontrol
        {
            if(sayi[i]==48)
            deger[i] = 0;
            if(sayi[i]==49)
            deger[i] = 1;
            if(sayi[i]==50)
            deger[i] = 2;
            if(sayi[i]==51)
            deger[i] = 3;
            if(sayi[i]==52)
            deger[i] = 4;
            if(sayi[i]==53)
            deger[i] = 5;
            if(sayi[i]==54)
            deger[i] = 6;
            if(sayi[i]==55)
            deger[i] = 7;
            if(sayi[i]==56)
            deger[i] = 8;
            if(sayi[i]==57)
            deger[i] = 9;
            if(sayi[i]==65)
            deger[i] = 10;
            if(sayi[i]==66)
            deger[i] = 11;
            if(sayi[i]==67)
            deger[i] = 12;
            if(sayi[i]==68)
            deger[i] = 13;
            if(sayi[i]==69)
            deger[i] = 14;
            if(sayi[i]==70)
            deger[i] = 15;
        }
    }
     
    for(i=0;i<50;i++)
    {
        if(deger[i]==(-1))
        continue;
        if(deger[i]>=taban || deger[i]<(-1))
        {
            for(j=0;j<50;j++)
            deger[j] = -1;
            printf("\ngirmis oldugunuz sayilar icerisinde o tabanda tanimli olmayan sayi var.");
            printf("\nlutfen tekrar giriniz:");
            goto tekrargir;
        }   
    }
     
    for(i=0;i<50;i++)
    {
        if(deger[i]==(-1))
        counter++;
    }
     
    kacust -= counter;
     
    for(i=0;i<50;i++)
    {
        if(deger[i]!=(-1))
        {
            ust = pow(taban,(kacust-(i+1)));
            degeral = deger[i]*ust;
            toplam += degeral;
        }
        else
        break;
    }
     
    printf("\n(%s)%d sayisinin 10 luk sisteme donusmus hali: %d",sayi,taban,toplam);
     
    printf("\n\n\nBasa Donmek Icin Bir Tusa Basin....");
    getch();
     
    system("CLS");
    goto basadon;
     
    return 0;   
}
/*
97 = a  >> 65 = A >> 10
98 = b  >> 66 = B >> 11 
99 = c  >> 67 = C >> 12
100 = d >> 68 = D >> 13
101 = e >> 69 = E >> 14
102 = f >> 70 = F >> 15 // 16 lık taban sonu
*/
 
Üst Alt