М3

Big Summa. Заданы две текстовые строки, состоящие исключительно из цифр и не более чем одной точки.
Предполагается, что строки задают представление чисел в q-ричной системе счисления. Построить строку, являющуюся их суммой.

q A B A+B Комментарий.
10 126740 546.967 127286.967 Тест пройден.
8 2360 7521 12101 Тест пройден.
2 1011001 1101 100110 Тест пройден.
3 1210.012 1112.1 10022.112 Тест пройден.
10 4356.98 67.975 4424.955 Тест пройден.

Код программы (string):

Программа выполнена с помощью методов класса <string>. Для работы мне понадобилось написать несколько вспомогательных функций, задачей которых является дополнить числа нулями таким образом, чтобы точки чисел оказались на одинаковых позициях.

Функция dot_position. Эта функция находит места точек в обеих строках, а если таковых нет, то им присваивается значение длины строки. Возвращает функция наибольшую по значению позицию точки.

Функции length_before_dot и length_after_dot возвращают количество цифр до и после точки соответственно.

Затем начинается тело основной функции программы. Изначально пользователю предоставляется ввести систему счисления и 2 числа, которые программа считывает в виде строк. Для удобства вычислений программа дополняем строку, которая не содержит точку, ещё одним ранее названным символом. Затем мы выравниваем оба наших числа по точкам.

После этого  программа готова вычислить сумму двух чисел. Сложность реализации алгоритма сложения состояла лишь в том, что записать в строку элемент типа int — невозможно, а следовательно, его нужно было преобразовать в  строку. Для этого потребовалась функция to_string() из класса <string>. Но при этом элементы a[i] и b[i] воспринимались как коды символов, поэтому каждый из них нужно было уменьшить на ‘0’.

Ещё одна сложность — это десятки, которые мы держим «в уме», а в моём случае — во вспомогательной переменной p.

Код можно посмотреть здесь.

Код программы (cstring):

Из-за отсутствия функции insert() в классе <cstring> я была вынуждена написать её самостоятельно. В остальном работа заключалась лишь в «переводе» кода из одного класса в другой.

Код можно посмотреть здесь.

Related Images:

6 thoughts on “М3

  1. Если Вы описываете функции — значит они выполняют какую-то важную роль — т.е. нужно описать в отчете что каждая из них конкретно делает.
    И вообще комментариев мало: например выражение if (a[i]+b[i]-d+p-q

    • Описала функцию в отчёте, пояснила момент с числом 48.
      Также строки в функцию теперь передаются по указанной вами схеме.
      Спасибо за замечание.

  2. То, что программа работает действительно очень хорошо.
    Только она «перетяжелена» избыточными сущностями. Мы ведь не складываем отдельно до точки, отдельно после. После того как числа выравнены по точке они складываются справа налево, а точка остаётся на своём месте. Дописывание незначащих нулей для выравнивания тоже излишний шаг. Мы ведь этого не делаем когда складываем числа столбиком? Кстати, insert() умеет вставлять много одинаковых символов сразу.

    • Заменила «магическое» число.
      Добавила код программы с использованием методов класса cstring.
      Исправила момент с функцией insert(), теперь она действительно использует все свои возможности.
      Также теперь нули не дописываются в конце чисел.

Добавить комментарий