Файл: Системы исчисления чисел, реализация перевода из одной системы в другую на С++.pdf

ВУЗ: Не указан

Категория: Курсовая работа

Дисциплина: Не указана

Добавлен: 14.06.2023

Просмотров: 102

Скачиваний: 2

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

Существуют методы перевода между системами исчисления напрямую, например, из двоичной в шестнадцатеричную, но на практике чаще всего приходится переводить число в десятичную систему и только потом – в систему с желаемым основанием.

Однако, если вам приходится сталкиваться с задачей, например, перевода из двоичной системы в шестнадцатеричную, необходимо разбить исходное число в двоичной системе на группы по 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;