algorytm.org

Implementacja w C/C++

Baza Wiedzy
wersja offline serwisu przeznaczona na urządzenia z systemem Android
Darowizny
darowiznaWspomóż rozwój serwisu
Nagłówki RSS
Artykuły
Implementacje
Komentarze
Forum
Bookmarki






Sonda
Implementacji w jakim języku programowania poszukujesz?

Zamiana z i na system dziesiętny - Implementacja w C/C++
Ocena użytkownikóww: *****  / 9
SłabyŚwietny
Nadesłany przez Tomasz Lubiński, 23 listopada 2006 01:00
Kod przedstawiony poniżej przedstawia główną część rozwiązania problemu.
Pobierz pełne rozwiązanie.

Jeżeli nie odpowiada Ci sposób formatowania kodu przez autora skorzystaj z pretty printer'a i dostosuj go automatycznie do siebie.

systemy.c:
//
// Konwersja z i na system dziesietny
//
// www.algorytm.org
// (c)2006 by Tomasz Lubinski
//

#include "stdio.h"
#include "stdlib.h"

#define MAX_BASE 36
char pattern[MAX_BASE + 1] = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";


//returns converted n or NULL if an error occurs
char *convertTo(char *dst, unsigned int n, int base)
{
   int i = 0;
   int j;
   char tmp[100];

   //base is too big or too small
   if ((base > MAX_BASE) || (base < 2))
      return NULL;

   //n is equal to 0, do not process, return "0"
   if (n == 0)
   {
      dst[0] = '0';
      dst[1] = 0;
   }

   //process until n > 0
   while (n>0)
   {
      tmp[i] = pattern[n % base];
      n /= base;
      i++;
   }

   //revert tmp to result
   for (j=0; j<i; j++)
   {
      dst[j] = tmp[i-j-1];
   }

   dst[i] = 0;
   return dst;
}

//return value of x or -1 if an error occurs
int valueOf(char x, int base)
{
   int i;
   for (i=0; i<base; i++)
   {
      if (x == pattern[i])
      {
         return i;
      }
   }
   return -1;
}

//returns converted n or 0 if an error occurs
unsigned int convertFrom(char *n, int base)
{
   int i, x;
   int p = 1;
   int result = 0;

   //base is too big or too small
   if ((base > MAX_BASE) || (base < 2))
      return 0;

   strupr(n);

   for (i=strlen(n)-1; i>=0; i--)
   {
      x = valueOf(n[i], base);
      if (x < 0)
      {
         return 0;
      }
      result += (x * p);
      p *= base;
   }

   return result;
}

int main(void)
{
   char result[100];

   convertTo(result, 3568, 2);
   printf("3568 w systemie dwojkowym = %s\n", result);

   convertTo(result, 3568, 3);
   printf("3568 w systemie trojkowym = %s\n", result);

   convertTo(result, 3568, 8);
   printf("3568 w systemie osemkowym = %s\n", result);

   convertTo(result, 3568, 16);
   printf("3568 w systemie szesnastkowym = %s\n", result);

   convertTo(result, 3568, 20);
   printf("3568 w systemie dwudziestkowym = %s\n", result);

   printf("100010010 w systemie dwojkowym to %d w systemie dziesietnym\n", convertFrom("100010010", 2));

   printf("7542 w systemie ósemkowym to %d w systemie dziesietnym\n", convertFrom("7542", 8));

   printf("E854 w systemie szesnastkowym to %d w systemie dziesietnym\n", convertFrom("E854", 16));

   return 0;
}
Komentarze
photo
0 # cx3 2013-10-17 09:53
Nie wiem kto da tak niska ocene. Ten kod ratuje mi zycie. 5 gwiazdek ;)
Odpowiedz | Odpowiedz z cytatem | Cytować
Dodaj komentarz