Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 28, средняя оценка - 4.82
sparta4ok
0 / 0 / 0
Регистрация: 17.12.2011
Сообщений: 9
#1

Перевод чисел из 10 сс в 8 сс на С++ - C++

17.12.2011, 20:14. Просмотров 4193. Ответов 21
Метки нет (Все метки)

Задание: дается число m в десятичной системе счисления, надо преобразовать в 8-ричную систему счисления и подсчитать количество четных чисел n в восьмеричной записи числа. И всё это написать на C++ ! Помогите пожалуйста написать код программы, уже не знаю к кому обратиться
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.12.2011, 20:14
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Перевод чисел из 10 сс в 8 сс на С++ (C++):

Перевод массива вводимых чисел в массив чисел в другой системе счисления - C++ Builder
Доброго времени суток, предлагается оказать помощь студенту новичку) Есть пример реализации этого в ехе файле но как это запрограммировать...

Перевод чисел в двоичную систему счисления, сложение чисел в двоичной системе - Информатика
Задание 7 Задания к работе 1. Перевести данное число из десятичной системы счисления в двоичную, восьмеричную и шестнадцатеричную системы...

Перевод чисел из строки в массив чисел - C++
Задача: Ввод: Во входном файле содержится несколько (до 1000) строк, в каждой строке задается одно целое число от 6 до 1000000. Конец...

Чтение чисел через пробел из одного textbox'a и перевод чисел в другой textbox - C#
При выводе в textbox4 цикл for, все n раз, переводит из двоичной последовательности в десятичную только первую последовательность единиц и...

перевод чисел - C#
Напишите пожалуйста программу для перевода из 10-чной системы счисления в 2-чную

перевод чисел(с++) - C++
Здравствуйте!!! Наткнулся на интересну задачу, я ее решил, но ни как не пойму почему выходит не правильно!!! Суть задачи такая, вводим...

21
soon
2542 / 1307 / 81
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
17.12.2011, 23:40 #16
sparta4ok, да там все банально, нужно просто проверку сделать (num & 1) + (num & 2) + (num & 4) на равенство нулю. Подождешь немного - поправлю.

Добавлено через 53 минуты
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
#include <iostream>
#include <string>
 
std::string dec2oct(int num)
{
    std::string str;
    while(num)
    {
        str = static_cast<char>((num & 1) + (num & 2) + (num & 4) + '0') + str;
        num >>= 3;
    }
    return str;
}
 
template <class T> int eq(T a, T b) { return ((a == b) ? (1) : (0)); }
 
int countOfEvenNumberInOct(int num)
{
    int count = 0;
    while(num)
        {
            count += ~(num & 1) & ~eq(num & 0x7, 0) & 1;
            num >>= 3;
        }
    return count;
}
 
int main()
{
    int a;
    std::cin >> a;
    std::cout << dec2oct(a) << ' ' << countOfEvenNumberInOct(a) << std::endl;
    return 0;
}
Разбирайте
1
sparta4ok
0 / 0 / 0
Регистрация: 17.12.2011
Сообщений: 9
18.12.2011, 10:20  [ТС] #17
вот теперь ноль не считает за счетную! спасибо! а вот проверка на вводимость,чтобы кроме чисел нельзя было вводить больше ничего можешь сделать? ну к примеру если ввели там буквы и цифры вместе и он написал: ошибка!введите число правильно. ну и вводим всё заново правильно и он вычисляет! сделай пожалуйста! отблагодарю, закину на телефон тебе поощрение
0
Evg
Эксперт CАвтор FAQ
18449 / 6499 / 454
Регистрация: 30.03.2009
Сообщений: 18,132
Записей в блоге: 29
18.12.2011, 13:30 #18
Прежде, чем сдавать программу из поста #9, определись, является ли твой преподаватель грамотным, или таким же бестолковым, как и в своей средней массе. Судя по постановке задачи я склоняюсь к тому, что он бестолковый. Но если всё-таки грамотный, то прочти раздел 8 по ссылке Неочевидные ответы на простые вопросы потому как приведённое решение не выполняет постановленной задачи (по крайней мере в части преобразования)
0
soon
2542 / 1307 / 81
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
18.12.2011, 14:11 #19
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
#include <iostream>
#include <cstdlib>
#include <algorithm>
#include <string>
#include <cstring>
 
int dec2oct(int num)
{
    int out = 0, order = 1;
    while(num)
    {
        out += (num & 0x7) * order;
        num >>= 3;
        order *= 10;
    }
    return out;
}
 
template <class T> int eq(T a, T b) { return ((a == b) ? (1) : (0)); }
 
int countOfEvenNumberInOct(int num)
{
    int count = 0;
    while(num)
        {
            count += ~(num & 1) & ~eq(num & 0x7, 0) & 1;
            num >>= 3;
        }
    return count;
}
 
bool isNoDigit(char ch) { return (((ch >= '0') && (ch <= '9')) ? (false) : (true)); }
 
int main()
{
    std::string str;
    std::cin >> str;
    while(std::find_if(str.begin(), str.end(), isNoDigit) != str.end())
    {
        std::cout << "Error. Please re-enter data:" << std::endl;
        std::cin >> str;
    }
    char tmp[64];
    strcpy(tmp, str.c_str());
    std::cout << dec2oct(atoi(tmp)) << ' ' << countOfEvenNumberInOct(atoi(tmp)) << std::endl;
    return 0;
}
Корявая, но относительно верно работающая проверка на ввод числа.
Заменил функцию dec2oct, теперь она возвращает int.
0
sparta4ok
0 / 0 / 0
Регистрация: 17.12.2011
Сообщений: 9
18.12.2011, 14:20  [ТС] #20
в грамотности моего преподавателя я не сомневаюсь, так как он очень грамотный!
просто главная задача стоит не в написании этой программы, и поэтому он не сильно обращает внимание как она написана! а вообще вот постановка задачи:
1.Внимательно изучите теоретический материал по использованию GNU make.
2.Напишите программу на C (или C++, по желанию), которая удовлетворяет следующим требованиям:

- производит вычисление по одному из вариантов, указанных в задании;
в задании указано: Вводится m. Определить k - количество четных цифр в восьмеричной записи числа.
- процедура, производящее вычисления, должна быть выделена в отдельный модуль. Таким образом, программа должна состоять из двух модулей.

3.Напишите скрипт для команды make, удовлетворяющий следующим требованиям:

- по команде make производится компиляция программы;
- по команде make clean производится очистка объектных файлов, откомпилированного исполняемого файла и временных файлов редактора;
- по команде make install производится копирование исполняемого файла в подкаталог bin домашнего каталога пользователя. В случае отсутствия подкаталога bin его необходимо создать. Если исполняемый файл еще не откомпилирован - его необходимо откомпилировать.

Предоставьте в электронном виде отчет о проделанной работе с указанием темы работы, варианта задания, алгоритма и исходного кода программы с комментариями, скрипта Makefile, ответов на контрольные вопросы.
0
soon
2542 / 1307 / 81
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
18.12.2011, 14:36 #21
Цитата Сообщение от sparta4ok Посмотреть сообщение
Вводится m. Определить k - количество четных цифр в восьмеричной записи числа.
Т.е. даже переводить в восьмеричную не обязательно.
1
Evg
Эксперт CАвтор FAQ
18449 / 6499 / 454
Регистрация: 30.03.2009
Сообщений: 18,132
Записей в блоге: 29
19.12.2011, 00:10 #22
Цитата Сообщение от sparta4ok Посмотреть сообщение
а вообще вот постановка задачи:
<skip>
Понятно. Тогда действительно метод решения задачи тут не особенно важен, поскольку не говорится о том, что надо преобразовать, а говорится о том, что надо посчитать (т.е. пофиг, какими средствами преобразовывать). Тем более, что задача не столько на программирование, сколько на проектирование программы. Значит у нас в стране есть ещё один преподаватель, который пытается научить людей полезным практическим знаниям, а не решением искусственных теоретических задач

Добавлено через 3 минуты
Кстати, при таком раскладе я бы не стал изобретать велосипеды, а для преобразования в 8-ричную систему использовал бы sprintf:

C
1
2
3
4
5
6
7
8
9
10
void func (int val)
{
  char str[32];
 
  sprintf (str, "%o", val);
 
  /* В итоге в буфере str сформирована 8-ричная запись числа.
   * Далее обрабатываем этот строковой буфер */
  ...
}
Добавлено через 8 часов 2 минуты
Можно даже ещё проще. Нам не требуется перевод числа. Нам требуется только подсчёт. Поэтому число в 8-ричном представлении запоминать не надо. Нужно в цикле пройтись по разрядам 8-ричного представления и сразу же посчитать количество чётных

C
1
2
3
4
5
6
7
8
9
10
int func (int val)
{
  int count;
 
  for (count = 0; val != 0; val >>= 3)
    if ((val & 1) != 0)
      count++;
 
  return count;
}
2
19.12.2011, 00:10
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.12.2011, 00:10
Привет! Вот еще темы с ответами:

Перевод чисел из 10 СС в 2 СС - C++
Помогите пожалуйста написать программу,которая представляла бы введенное число типа unsigned char в двоичном виде с помощью битовых масок.

Перевод чисел в CC - Lazarus
Помогите нужно написать программу которая переводит десятичные числа в двоичною, восмеричную и шестнадцатиричную систему счисления. ...

Перевод чисел - Delphi
Нужно создать программу, которая сопоставляет десятичные цифры словам кода 01247. Вводится десятичное число. Выводится код 2 из 5 этого...

перевод чисел - Pascal
народ помогите пожалуста закончить 10 класс! нужно написать программу которая делает следущие: вводиш число указываеш систему...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
22
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.