Перевод чисел из одной системы счисления в другую - 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, что означает успешное завершение программы.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д