Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.57/46: Рейтинг темы: голосов - 46, средняя оценка - 4.57
0 / 0 / 0
Регистрация: 17.12.2011
Сообщений: 9
1

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

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

Author24 — интернет-сервис помощи студентам
Задание: дается число m в десятичной системе счисления, надо преобразовать в 8-ричную систему счисления и подсчитать количество четных чисел n в восьмеричной записи числа. И всё это написать на C++ ! Помогите пожалуйста написать код программы, уже не знаю к кому обратиться
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
17.12.2011, 20:14
Ответы с готовыми решениями:

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

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

Перевод списка арабских чисел в список соответствующих им римских чисел
Создайте предикат, переводящий список арабских чисел в список соответствующих им римских чисел

Перевод чисел в дополнительный код и сложение (вычитание) этих чисел в однобайтовом формате
Даны два числа Х и У в двоичной системе счисления. Нужно написать программу, которая переводила...

21
2554 / 1319 / 178
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
17.12.2011, 20:26 2
Лучший ответ Сообщение было отмечено как решение

Решение

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <iostream>
 
int main()
{
    for(int i = 0; i < 100; ++i)
    {
        int tmp = i, count = 0;
        while(tmp)
        {
            count += ~(tmp & 1) & 1;
            tmp >>= 3;
        }
        std::cout << std::dec << i << ' ';
        std::cout << std::oct << i << ' ' << count << std::endl;
    }
    return 0;
}
Пусть 0 - четное число.

Добавлено через 1 минуту
Цитата Сообщение от sparta4ok Посмотреть сообщение
количество четных чисел
Предположил, что имелось ввиду четных цифр
3
0 / 0 / 0
Регистрация: 17.12.2011
Сообщений: 9
17.12.2011, 20:31  [ТС] 3
Цитата Сообщение от soon Посмотреть сообщение
Предположил, что имелось ввиду четных цифр
да, правильно подметил, торопился когда писал!

Добавлено через 1 минуту
этот код, который ты написал для подсчета четных цифр как я понимаю да?!
0
2554 / 1319 / 178
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
17.12.2011, 20:34 4
Для вывода сначала десятеричного представления числа, затем восьмеричного, и подсчета четных цифр в восмеричном представлении числа.
1
0 / 0 / 0
Регистрация: 17.12.2011
Сообщений: 9
17.12.2011, 20:37  [ТС] 5
есои честно не понял совсем объясни пожалуйста, просто я тут не вижу где перевод введенного нами числа из 10 сс в 8 сс!
0
63 / 58 / 14
Регистрация: 14.12.2011
Сообщений: 193
17.12.2011, 20:40 6
Сначала думал магия - но оказалось очень красиво!
0
2554 / 1319 / 178
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
17.12.2011, 20:49 7
Цитата Сообщение от soon Посмотреть сообщение
std::cout << std::oct << i << ' ' << count << std::endl;
Выводит число в восьмеричном представлении.
Для непосредственного преобразования можно воспользоваться прмерно такой функцией
C++
1
2
3
4
5
6
7
8
9
10
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;
}
Добавлено через 4 минуты
Цитата Сообщение от Dr.Urban Посмотреть сообщение
Сначала думал магия - но оказалось очень красиво!
Спасибо, приятно =)
0
0 / 0 / 0
Регистрация: 17.12.2011
Сообщений: 9
17.12.2011, 20:59  [ТС] 8
в том то и дело, что мне нужно написать программу с вводом числа в 10 сс и непосредственным переводом его в 8 сс, ну и подсчет четных цифр. Или я ничего не понимаю, или ты меня не понимаешь
дуб дубом конечно я, но всё таки хотелось бы чтобы от начала до конца код был : ну, чтобы ввести число, потом функция перевода этого числа в 8 сс, далее уже подсчет четных цифр

Добавлено через 4 минуты
очень прошу помочь мне, уже в понедельник сдавать надо если же кто очень хорошо поможет и напишет программу, то вознаграждение от меня я гарантирую, на честном слове!
0
2554 / 1319 / 178
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
17.12.2011, 21:02 9
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
#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;
}
 
int countOfEvenNumberInOct(int num)
{
    int count = 0;
    while(num)
        {
            count += ~(num & 1) & 1;
            num >>= 3;
        }
    return count;
}
 
int main()
{
    int a;
    std::cin >> a;
    std::cout << dec2oct(a) << ' ' << countOfEvenNumberInOct(a) << std::endl;
    return 0;
}
Добавлено через 2 минуты
Цитата Сообщение от sparta4ok Посмотреть сообщение
Или я ничего не понимаю, или ты меня не понимаешь
Не, я прекрасно понял. Просто можно было попробовать выкрутится с помощью std::oct, так было бы элегантнее
0
Заблокирован
17.12.2011, 21:02 10
Цитата Сообщение от soon Посмотреть сообщение
ount += ~(tmp & 1) & 1;
Цитата Сообщение от soon Посмотреть сообщение
((num & 1) + (num & 2) + (num & 4) + '0')
это юмор?))
0
2554 / 1319 / 178
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
17.12.2011, 21:03 11
Цитата Сообщение от alkagolik Посмотреть сообщение
это юмор?))
А что не так?
1
Заблокирован
17.12.2011, 21:07 12
Цитата Сообщение от soon Посмотреть сообщение
А что не так?
да не, все так)) я тоже иногда "подсластить" коды люблю. Если чел как следует его не разберет, то преподу бедет потеха)). Например
C
1
((num & 1) + (num & 2) + (num & 4) + '0') == (num & 0x7 + '0')
1
soon
17.12.2011, 21:15
  #13

Не по теме:

Дык, такие задачки и нужны, для того, чтобы поразвлечься :) Помнится я как-то раз раздул задачку на амебы до ~30 строк, хотя там и 5 хватило бы. Зато было не очень скучно :)
Или же та тема про hello world.

1
0 / 0 / 0
Регистрация: 17.12.2011
Сообщений: 9
17.12.2011, 21:49  [ТС] 14
вроде как работает хорошо спасибо большое! если не затруднит сможешь пожалуйста засунуть туда проверку чтобы нельзя было вводить символы,буквы и т.д и т.п?

Добавлено через 9 минут
и еще как можно сделать чтобы он не считал нуль за четную цифру?!
0
Заблокирован
17.12.2011, 22:42 15
Цитата Сообщение от sparta4ok Посмотреть сообщение
и еще как можно сделать чтобы он не считал нуль за четную цифру?!
можно. делай
0
2554 / 1319 / 178
Регистрация: 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
0 / 0 / 0
Регистрация: 17.12.2011
Сообщений: 9
18.12.2011, 10:20  [ТС] 17
вот теперь ноль не считает за счетную! спасибо! а вот проверка на вводимость,чтобы кроме чисел нельзя было вводить больше ничего можешь сделать? ну к примеру если ввели там буквы и цифры вместе и он написал: ошибка!введите число правильно. ну и вводим всё заново правильно и он вычисляет! сделай пожалуйста! отблагодарю, закину на телефон тебе поощрение
0
Evg
Эксперт CАвтор FAQ
21280 / 8302 / 637
Регистрация: 30.03.2009
Сообщений: 22,659
Записей в блоге: 30
18.12.2011, 13:30 18
Прежде, чем сдавать программу из поста #9, определись, является ли твой преподаватель грамотным, или таким же бестолковым, как и в своей средней массе. Судя по постановке задачи я склоняюсь к тому, что он бестолковый. Но если всё-таки грамотный, то прочти раздел 8 по ссылке Неочевидные ответы на простые вопросы потому как приведённое решение не выполняет постановленной задачи (по крайней мере в части преобразования)
0
2554 / 1319 / 178
Регистрация: 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
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
18.12.2011, 14:20
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
18.12.2011, 14:20
Помогаю со студенческими работами здесь

ПЕРЕВОД дробных чисел из одной системы счисления в другую. СПОСОБЫ ВНУТРЕННЕГО представления чисел с фиксированной точк
2) Создать блок-схему алгоритма программы перевода правильных дробей из одной системы счисления в...

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

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

Перевод чисел в сс
Помогите пофиксить перевод чисел из 10сс в 16сс #include &lt;iostream&gt; using namespace std; int...

Перевод чисел
Доброго вечера! У меня к вам вопрос. На листе в определенной ячейке записано число (может быть не...

Перевод чисел
Сделать перевод чисел: +-3456+-11 и +-90+-11 из десятичной в двоичную систему исчисления. Получить...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru