Файл: Системы исчисления чисел, реализация перевода из одной системы в другую на С++.pdf
Добавлен: 14.06.2023
Просмотров: 106
Скачиваний: 2
СОДЕРЖАНИЕ
Глава 1. Позиционные и непозиционные системы исчисления
Глава 2. Двоичная система исчисления
Глава 3. Восьмеричная система исчисления
Глава 4. Десятичная система исчисления
Глава 5. Шестнадцатеричная система
Глава 6. Представление чисел в разных системах исчисления
Глава 7. Как работает с числами ЭВМ?
Глава 8. Числа с фиксированным разделителем целой и дробной части
Глава 9. Числа с нефиксированным разделителем целой и дробной части
Глава 10. Прямой, обратный, дополнительный код
Глава 11. Модифицированный код
Глава 12. Перевод двоичных чисел в десятичные
Глава 13. Перевод десятичных чисел в двоичные
Глава 14. Перевод в другие системы исчисления
Глава 16. Среда выполнения и методика тестирования программы.
Существуют методы перевода между системами исчисления напрямую, например, из двоичной в шестнадцатеричную, но на практике чаще всего приходится переводить число в десятичную систему и только потом – в систему с желаемым основанием.
Однако, если вам приходится сталкиваться с задачей, например, перевода из двоичной системы в шестнадцатеричную, необходимо разбить исходное число в двоичной системе на группы по 4 цифры и потом, проведя перевод этих групп получить значащие разряды шестнадцатеричной системы. Например:
1001001011012=1001 0010 11012=92D16
Обратно это тоже работает:
EDA16=E D A16=111011011012
Глава 15. Постановка задачи
Теперь, когда мы достаточно хорошо усвоили теорию, мы можем использовать полученные знания на практике. Реализуем алгоритмы, о которых мы говорили, написав программу перевода чисел из одной из изученных систем – двоичной, восьмеричной, десятичной или шестнадцатеричной системы в систему с основаниями 2, 8, 10 или 16. Данная программа позволит в полной мере показать уровень усвоения материала, а также может служить калькулятором, позволяющим оперативно проводить такие вычисления.
Поскольку данная программа является учебной, то в ней позволительно по минимуму уделять внимание обработке ошибок, однако при заведомо рабочих условиях программа должна выдавать корректный результат.
Глава 16. Среда выполнения и методика тестирования программы.
Программа должна компилироваться компилятором gcc и выполняться в среде операционной системы Linux.
Необходимо проверить корректность работы программы на корректных значениях в соответствии с методикой позитивного тестирования. Кроме того, необходимо понять, как программа себя поведет на заведомо некорректных данных. Таблица ниже содержит тест-кейсы, ожидаемый и фактический результат:
Исходное число |
Основание результата |
Ожидаемый результат |
Фактический результат |
10D |
2 |
1010B |
1010B |
1001B |
16 |
9H |
9H |
137O |
10 |
95D |
95D |
EDAAH |
8 |
166625O |
166625O |
10.5D |
2 |
1010.1B |
111110011B |
123B |
10 |
Error |
11D |
TEST |
10 |
Error |
Error |
101B |
20 |
Error |
Error |
Таблица 3. Результат тестирования программы.
Как видите, программа нуждается в доработке – она не обрабатывает дробные числа, а так же не следит за корректностью вводимых пользователем значений – можно ввести десятичное число и выдать его за число с основанием 2. Однако ошибки, связанные с вводом нечисловых значений в качестве исходного числа, а также незаданного в условии основания проверяются и выдают запланированный результат. На основе данного отчета можно подготовить задание на модернизацию программы.
Заключительная часть
Несмотря на кажущуюся простоту, работа с числами в современных информационных системах требует внимания, проверки необходимых условий и так далее. Несмотря на то, что сама операция перевода чисел из одной системы в другую не является очень популярной операцией, компьютерные системы постоянно осуществляют ее – ведь все расчеты ведутся в двоичных кодах, хотя нам привычнее для представления десятичная система.
В рамках данной работы мы провели исследование, касающееся работы с современными системами счисления, их представления в компьютерных системах, операций над ними. Мы рассмотрели методы перевода из одной системы в другую, а потом реализовали один из рассмотренных методов на практике.
Мы составили спецификацию будущей программы, определили условия, при которых она должна выполняться, после чего реализовали алгоритм в виде кода на языке С++, скомпилировали и выполнили тесты. По результатам тестов сделаны выводы относительно уровня написанной программы.
Библиографический список
А.С. Грошев – Информатика: Учебник для вузов / А.С. Грошев. – Архангельск, Архангельский государственный технический университет, 2010. – 470 с.
С. Симонович – Информатика. Базовый курс. Учебник для вузов / С. Симонович. – Санкт-Петербург, Питер, 2015. – 640 с.
Приложение 1. Исходный код программы
#include <string>
#include <vector>
#include <iostream>
#include <cmath>
using namespace std;
size_t getnumber(const string& in, size_t base) {
string literals="0123456789ABCDEF";
size_t n=0;
for(size_t i=0;i<in.length();i++)
{
size_t j=in.length()-1-i;
size_t m=literals.find(in[j]);
n+=m*(size_t)pow((double)base, (double)i);
}
return n;
}
string convert(size_t in, size_t base) {
string literals="0123456789ABCDEF";
string out;
while(in) {
size_t n=in%base;