Перевод чисел из одной системы счисления в другую - C (СИ) (69889)

Узнай цену своей работы

Формулировка задачи:

Задание: Написать программу на языке С для перевода числа, представленного в системе счисления с основанием S, в системы счисления с основаниями P, Q, R. Обеспечить корректность ввода числа в системе счисления с основанием S. Перевод чисел реализовать с применением функций. (Разработайте функцию для перевода числа из системы счисления с основанием S в систему счисления с основанием P, а затем, функции для перевода из P в Q и из P в R.) Не использовать стандартных возможностей по вводу/выводу чисел представленных в 2-ой, 8-ой, 16-ой системах счисления. Для представления цифр больших 9 использовать заглавные буквы латинского алфавита. S=13 P=10 Q=8 R=14 Помогите составить программу, я в программировании только начинающий. Есть код на C++, может кому то поможет:
Листинг программы
  1. #include "stdafx.h"
  2. #include <iostream>
  3. #include <string>
  4. #include <cmath>
  5. #include <algorithm>
  6. using namespace std;
  7. char model[14] = {'0', '1','2','3','4','5','6','7','8','9','A', 'B', 'C', 'D'};
  8. int conversion_to_int (string s)
  9. {
  10. double result = 0;
  11. int digits = s.length();
  12. double razr;
  13. double osn = 13;
  14. for ( int i = digits; i>0; i--)
  15. {
  16. for (int b = 0; b <= 13; b++)
  17. {
  18. if (s[digits-i] == model [b])
  19. {
  20. razr = b;
  21. break;
  22. }
  23. if (b == 13)
  24. {
  25. cout << "ВВЕДЕНО НЕКОРРЕКТНОЕ ЗНАЧЕНИЕ!!!!" << endl;
  26. cout << "Расчёт ведется для значения 0" << endl;
  27. return 0;
  28. }
  29. }
  30. result = result + razr*pow(osn,i-1);
  31. }
  32. return (int) result;
  33. }
  34. string conversion_to_other (int digit, int num) // digit - основание, num - число
  35. {
  36. string number;
  37. int ostatok;
  38. while (num > digit)
  39. {
  40. ostatok = num%digit;
  41. number = number + model [ostatok];
  42. num = num/digit;
  43. }
  44. number = number + model [num];
  45. reverse(number.begin(),number.end());
  46. return number;
  47. }
  48. int _tmain(int argc, _TCHAR* argv[])
  49. {
  50. string s;
  51. int result;
  52. setlocale(LC_CTYPE, "rus");
  53. cout << "Введите число с основанием системы исчисления 13" << endl;
  54. cout << "Используйте только цифры и заглавные латинские буквы" << endl;
  55. for (int i = 0; i<13; i++)
  56. {
  57. cout << model [i] << " ";
  58. }
  59. cout << endl << endl;
  60. cin >> s;
  61. result = conversion_to_int (s);
  62. cout << endl<< "Ваше число:"<<endl<<endl;
  63. cout << "по основанию 8 " << '\t'<< '\t'<< conversion_to_other (8, result) << endl;
  64. cout << "по основанию 10 " << '\t'<< conversion_to_other (10, result) << endl;
  65. cout << "по основанию 14 " << '\t'<< conversion_to_other (14, result) << endl;
  66. getchar();
  67. getchar();
  68. }

Решение задачи: «Перевод чисел из одной системы счисления в другую»

textual
Листинг программы
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <malloc.h>
  4.  
  5. char *Scale="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
  6.  
  7. int dig2int(char d)
  8. {
  9.     int i;
  10.     for (i=0; i<36; i++) if (Scale[i]==d) return i;
  11. }
  12.  
  13. char  *convert(char *n, int from, int to)
  14. {
  15.       int i,j,l,p,k;
  16.       char *buf;
  17.       l=strlen(n);
  18.       p=0;
  19.       for (i=0; i<l; i++) p=p*from+dig2int(n[i]);
  20.       buf=(char *) calloc(100,1);
  21.       k=99;
  22.       l=0;
  23.       while (1)
  24.       {
  25.          j=p%to;
  26.          buf[k--]=Scale[j];
  27.          l++;
  28.          p=p/to;
  29.          if (p==0) break;
  30.       }  
  31.       j=0;
  32.       k++;
  33.       while (1)
  34.       {
  35.          buf[j++]=buf[k++];
  36.          if (k == 100) break;
  37.       }          
  38.       buf=(char *) realloc(buf,(l+1));
  39.       return buf;
  40. }
  41. int main(int argc, char *argv[])
  42. {
  43.  
  44.   char *P="20";
  45.   char *Q;
  46.  
  47.   char *P1="12A";
  48.   char *Q1;
  49.  
  50.   Q=convert(P,10,16);
  51.   printf("%s \n",Q);
  52.  
  53.   Q1=convert(P1,13,2);
  54.   printf("%s \n",Q1);
  55.  
  56.   free(Q);
  57.   free(Q1);
  58.  
  59.   system("PAUSE"); 
  60.   return 0;
  61.  
  62. }

Объяснение кода листинга программы

  1. Включаются необходимые заголовочные файлы: stdio.h, stdlib.h, malloc.h
  2. Объявляется строка-масштаб Scale, которая содержит все возможные символы для представления чисел в каждой системе счисления.
  3. Определяется функция dig2int, которая принимает символ и возвращает его числовое представление в заданной системе счисления.
  4. Определяется функция convert, которая принимает строку n, исходную систему счисления from и целевую систему счисления to. Функция преобразует строку n из одной системы счисления в другую и возвращает новую строку, представляющую результат.
  5. В функции main определяются строки P и Q, которые представляют числа в исходной и целевой системах счисления соответственно.
  6. Вызывается функция convert с аргументами P, 10 (десятичная система счисления) и 16 (шестнадцатеричная система счисления). Результат выводится на экран.
  7. Аналогично пункту 6, только с другими аргументами для функции convert.
  8. Вызывается функция free для освобождения памяти, выделенной под Q и Q1.
  9. Вызывается функция system для приостановки выполнения программы до нажатия клавиши.
  10. Возвращается 0, что означает успешное завершение программы.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

14   голосов , оценка 4.071 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы