Тема: Функції перетворення чисел в різних системах числення
Написати програму яка буде виконувати перетворення чисел з різних систем числення ( двійкової, вісімкової, шістнадцяткової) С++. Допоможіть будь ласка
Ви не увійшли. Будь ласка, увійдіть або зареєструйтесь.
Ласкаво просимо вас на україномовний форум з програмування, веб-дизайну, SEO та всього пов'язаного з інтернетом та комп'ютерами.
Будемо вдячні, якщо ви поділитись посиланням на Replace.org.ua на інших ресурсах.
Для того щоб створювати теми та надсилати повідомлення вам потрібно Зареєструватись.
Український форум програмістів → C++ → Функції перетворення чисел в різних системах числення
Сторінки 1
Для відправлення відповіді ви повинні увійти або зареєструватися
Написати програму яка буде виконувати перетворення чисел з різних систем числення ( двійкової, вісімкової, шістнадцяткової) С++. Допоможіть будь ласка
Можна, наприклад, якось так:
#include <iostream>
#include <string>
#include <cctype>
int conv_digit(char digit) {
  if (std::isalpha(digit)) {
    return std::toupper(digit) - 'A' + 10;
  } else if (std::isdigit(digit)) {
    return digit - '0';
  }
  return -1;
}
int main() {
  int base;
  std::string numstr;
  std::cout << "Введіть основу системи числення (2, 8, 16, тощо):\n";
  std::cin >> base;
  std::cout << "Введіть число у вказаній системі числення:\n";
  std::cin >> numstr;
  int abs_result = 0;
  int sign = 1;
  bool number_started = false;
  std::string::iterator it;
  for (it = numstr.begin(); it != numstr.end(); it++) {
    if (std::isspace(*it)) continue;
    if ((*it == '-') && number_started) {
      std::cout << "Мінус не на початку числа!\n";
      return -1;
    }
    if (*it == '-') {
      sign = -1;
      number_started = true;
      continue;
    }
    int digit = conv_digit(*it);
    if (digit < 0 || digit >= base) {
      std::cout << "Неправильна цифра: " << *it << "\n";
      return -1;
    }
    abs_result = abs_result * base + digit;
    number_started = true;
  }
  int result = sign * abs_result;
  std::cout << "Результат: " << result << "\n";
  return 0;
}Я не використовую C++ професійно, тому код може бути неідеальний (хай поправлять ті, хто знає C++ краще за мене). Але він принаймні працює. 
Якщо треба щось пояснити в цьому коді, кажіть.
Ітератор використовуєте, могли просто через foreach.
for(auto& it : numstr)і прибрати вказівники
Ітератор використовуєте, могли просто через foreach.
for(auto& it : numstr)і прибрати вказівники
Щиро дякую! Буду знати про foreach
#include <iostream>
#include <string>
#include <cctype>
int conv_digit(char digit) {
  if (std::isalpha(digit)) {
    return std::toupper(digit) - 'A' + 10;
  } else if (std::isdigit(digit)) {
    return digit - '0';
  }
  return -1;
}
int main() {
  int base;
  std::string numstr;
  std::cout << "Введіть основу системи числення (2, 8, 16, тощо):\n";
  std::cin >> base;
  std::cout << "Введіть число у вказаній системі числення:\n";
  std::cin >> numstr;
  int abs_result = 0;
  int sign = 1;
  bool number_started = false;
  for (auto &it : numstr) {
    if (std::isspace(it)) continue;
    if ((it == '-') && number_started) {
      std::cout << "Мінус не на початку числа!\n";
      return -1;
    }
    if (it == '-') {
      sign = -1;
      number_started = true;
      continue;
    }
    int digit = conv_digit(it);
    if (digit < 0 || digit >= base) {
      std::cout << "Неправильна цифра: " << it << "\n";
      return -1;
    }
    abs_result = abs_result * base + digit;
    number_started = true;
  }
  int result = sign * abs_result;
  std::cout << "Результат: " << result << "\n";
  return 0;
}Сторінки 1
Для відправлення відповіді ви повинні увійти або зареєструватися