Перевод чисел из одной системы счисления в другую - 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++, может кому то поможет:
Листинг программы
- #include "stdafx.h"
- #include <iostream>
- #include <string>
- #include <cmath>
- #include <algorithm>
- using namespace std;
- char model[14] = {'0', '1','2','3','4','5','6','7','8','9','A', 'B', 'C', 'D'};
- int conversion_to_int (string s)
- {
- double result = 0;
- int digits = s.length();
- double razr;
- double osn = 13;
- for ( int i = digits; i>0; i--)
- {
- for (int b = 0; b <= 13; b++)
- {
- if (s[digits-i] == model [b])
- {
- razr = b;
- break;
- }
- if (b == 13)
- {
- cout << "ВВЕДЕНО НЕКОРРЕКТНОЕ ЗНАЧЕНИЕ!!!!" << endl;
- cout << "Расчёт ведется для значения 0" << endl;
- return 0;
- }
- }
- result = result + razr*pow(osn,i-1);
- }
- return (int) result;
- }
- string conversion_to_other (int digit, int num) // digit - основание, num - число
- {
- string number;
- int ostatok;
- while (num > digit)
- {
- ostatok = num%digit;
- number = number + model [ostatok];
- num = num/digit;
- }
- number = number + model [num];
- reverse(number.begin(),number.end());
- return number;
- }
- int _tmain(int argc, _TCHAR* argv[])
- {
- string s;
- int result;
- setlocale(LC_CTYPE, "rus");
- cout << "Введите число с основанием системы исчисления 13" << endl;
- cout << "Используйте только цифры и заглавные латинские буквы" << endl;
- for (int i = 0; i<13; i++)
- {
- cout << model [i] << " ";
- }
- cout << endl << endl;
- cin >> s;
- result = conversion_to_int (s);
- cout << endl<< "Ваше число:"<<endl<<endl;
- cout << "по основанию 8 " << '\t'<< '\t'<< conversion_to_other (8, result) << endl;
- cout << "по основанию 10 " << '\t'<< conversion_to_other (10, result) << endl;
- cout << "по основанию 14 " << '\t'<< conversion_to_other (14, result) << endl;
- getchar();
- getchar();
- }
Решение задачи: «Перевод чисел из одной системы счисления в другую»
textual
Листинг программы
- #include <stdio.h>
- #include <stdlib.h>
- #include <malloc.h>
- char *Scale="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
- int dig2int(char d)
- {
- int i;
- for (i=0; i<36; i++) if (Scale[i]==d) return i;
- }
- char *convert(char *n, int from, int to)
- {
- int i,j,l,p,k;
- char *buf;
- l=strlen(n);
- p=0;
- for (i=0; i<l; i++) p=p*from+dig2int(n[i]);
- buf=(char *) calloc(100,1);
- k=99;
- l=0;
- while (1)
- {
- j=p%to;
- buf[k--]=Scale[j];
- l++;
- p=p/to;
- if (p==0) break;
- }
- j=0;
- k++;
- while (1)
- {
- buf[j++]=buf[k++];
- if (k == 100) break;
- }
- buf=(char *) realloc(buf,(l+1));
- return buf;
- }
- int main(int argc, char *argv[])
- {
- char *P="20";
- char *Q;
- char *P1="12A";
- char *Q1;
- Q=convert(P,10,16);
- printf("%s \n",Q);
- Q1=convert(P1,13,2);
- printf("%s \n",Q1);
- free(Q);
- free(Q1);
- system("PAUSE");
- return 0;
- }
Объяснение кода листинга программы
- Включаются необходимые заголовочные файлы: stdio.h, stdlib.h, malloc.h
- Объявляется строка-масштаб Scale, которая содержит все возможные символы для представления чисел в каждой системе счисления.
- Определяется функция dig2int, которая принимает символ и возвращает его числовое представление в заданной системе счисления.
- Определяется функция convert, которая принимает строку n, исходную систему счисления from и целевую систему счисления to. Функция преобразует строку n из одной системы счисления в другую и возвращает новую строку, представляющую результат.
- В функции main определяются строки P и Q, которые представляют числа в исходной и целевой системах счисления соответственно.
- Вызывается функция convert с аргументами P, 10 (десятичная система счисления) и 16 (шестнадцатеричная система счисления). Результат выводится на экран.
- Аналогично пункту 6, только с другими аргументами для функции convert.
- Вызывается функция free для освобождения памяти, выделенной под Q и Q1.
- Вызывается функция system для приостановки выполнения программы до нажатия клавиши.
- Возвращается 0, что означает успешное завершение программы.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д