Форум программистов, компьютерный форум CyberForum.ru

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

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

C++ перевод чисел(с++)
C++ Перевод чисел из 5->10 c.c
C++ Рекурсивный перевод чисел
перевод действительных чисел C++
Перевод чисел из 10 СС в 2 СС C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
soon
 Аватар для soon
2536 / 1301 / 81
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
17.12.2011, 20:26     Перевод чисел из 10 сс в 8 сс на С++ #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 Посмотреть сообщение
количество четных чисел
Предположил, что имелось ввиду четных цифр
sparta4ok
0 / 0 / 0
Регистрация: 17.12.2011
Сообщений: 9
17.12.2011, 20:31  [ТС]     Перевод чисел из 10 сс в 8 сс на С++ #3
Цитата Сообщение от soon Посмотреть сообщение
Предположил, что имелось ввиду четных цифр
да, правильно подметил, торопился когда писал!

Добавлено через 1 минуту
этот код, который ты написал для подсчета четных цифр как я понимаю да?!
soon
 Аватар для soon
2536 / 1301 / 81
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
17.12.2011, 20:34     Перевод чисел из 10 сс в 8 сс на С++ #4
Для вывода сначала десятеричного представления числа, затем восьмеричного, и подсчета четных цифр в восмеричном представлении числа.
sparta4ok
0 / 0 / 0
Регистрация: 17.12.2011
Сообщений: 9
17.12.2011, 20:37  [ТС]     Перевод чисел из 10 сс в 8 сс на С++ #5
есои честно не понял совсем объясни пожалуйста, просто я тут не вижу где перевод введенного нами числа из 10 сс в 8 сс!
Dr.Urban
63 / 58 / 7
Регистрация: 14.12.2011
Сообщений: 193
17.12.2011, 20:40     Перевод чисел из 10 сс в 8 сс на С++ #6
Сначала думал магия - но оказалось очень красиво!
soon
 Аватар для soon
2536 / 1301 / 81
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
17.12.2011, 20:49     Перевод чисел из 10 сс в 8 сс на С++ #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 Посмотреть сообщение
Сначала думал магия - но оказалось очень красиво!
Спасибо, приятно =)
sparta4ok
0 / 0 / 0
Регистрация: 17.12.2011
Сообщений: 9
17.12.2011, 20:59  [ТС]     Перевод чисел из 10 сс в 8 сс на С++ #8
в том то и дело, что мне нужно написать программу с вводом числа в 10 сс и непосредственным переводом его в 8 сс, ну и подсчет четных цифр. Или я ничего не понимаю, или ты меня не понимаешь
дуб дубом конечно я, но всё таки хотелось бы чтобы от начала до конца код был : ну, чтобы ввести число, потом функция перевода этого числа в 8 сс, далее уже подсчет четных цифр

Добавлено через 4 минуты
очень прошу помочь мне, уже в понедельник сдавать надо если же кто очень хорошо поможет и напишет программу, то вознаграждение от меня я гарантирую, на честном слове!
soon
 Аватар для soon
2536 / 1301 / 81
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
17.12.2011, 21:02     Перевод чисел из 10 сс в 8 сс на С++ #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, так было бы элегантнее
alkagolik
 Аватар для alkagolik
1510 / 616 / 79
Регистрация: 15.07.2011
Сообщений: 3,552
17.12.2011, 21:02     Перевод чисел из 10 сс в 8 сс на С++ #10
Цитата Сообщение от soon Посмотреть сообщение
ount += ~(tmp & 1) & 1;
Цитата Сообщение от soon Посмотреть сообщение
((num & 1) + (num & 2) + (num & 4) + '0')
это юмор?))
soon
 Аватар для soon
2536 / 1301 / 81
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
17.12.2011, 21:03     Перевод чисел из 10 сс в 8 сс на С++ #11
Цитата Сообщение от alkagolik Посмотреть сообщение
это юмор?))
А что не так?
alkagolik
 Аватар для alkagolik
1510 / 616 / 79
Регистрация: 15.07.2011
Сообщений: 3,552
17.12.2011, 21:07     Перевод чисел из 10 сс в 8 сс на С++ #12
Цитата Сообщение от soon Посмотреть сообщение
А что не так?
да не, все так)) я тоже иногда "подсластить" коды люблю. Если чел как следует его не разберет, то преподу бедет потеха)). Например
C
1
((num & 1) + (num & 2) + (num & 4) + '0') == (num & 0x7 + '0')
soon
17.12.2011, 21:15
  #13

Не по теме:

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

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

Добавлено через 9 минут
и еще как можно сделать чтобы он не считал нуль за четную цифру?!
alkagolik
 Аватар для alkagolik
1510 / 616 / 79
Регистрация: 15.07.2011
Сообщений: 3,552
17.12.2011, 22:42     Перевод чисел из 10 сс в 8 сс на С++ #15
Цитата Сообщение от sparta4ok Посмотреть сообщение
и еще как можно сделать чтобы он не считал нуль за четную цифру?!
можно. делай
soon
 Аватар для soon
2536 / 1301 / 81
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
17.12.2011, 23:40     Перевод чисел из 10 сс в 8 сс на С++ #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;
}
Разбирайте
sparta4ok
0 / 0 / 0
Регистрация: 17.12.2011
Сообщений: 9
18.12.2011, 10:20  [ТС]     Перевод чисел из 10 сс в 8 сс на С++ #17
вот теперь ноль не считает за счетную! спасибо! а вот проверка на вводимость,чтобы кроме чисел нельзя было вводить больше ничего можешь сделать? ну к примеру если ввели там буквы и цифры вместе и он написал: ошибка!введите число правильно. ну и вводим всё заново правильно и он вычисляет! сделай пожалуйста! отблагодарю, закину на телефон тебе поощрение
Evg
Эксперт С++Автор FAQ
 Аватар для Evg
16824 / 5245 / 319
Регистрация: 30.03.2009
Сообщений: 14,121
Записей в блоге: 26
18.12.2011, 13:30     Перевод чисел из 10 сс в 8 сс на С++ #18
Прежде, чем сдавать программу из поста #9, определись, является ли твой преподаватель грамотным, или таким же бестолковым, как и в своей средней массе. Судя по постановке задачи я склоняюсь к тому, что он бестолковый. Но если всё-таки грамотный, то прочти раздел 8 по ссылке Неочевидные ответы на простые вопросы потому как приведённое решение не выполняет постановленной задачи (по крайней мере в части преобразования)
soon
 Аватар для soon
2536 / 1301 / 81
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
18.12.2011, 14:11     Перевод чисел из 10 сс в 8 сс на С++ #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.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.12.2011, 14:20     Перевод чисел из 10 сс в 8 сс на С++
Еще ссылки по теме:

C++ Перевод чисел любой разрядности
C++ Перевод чисел
Перевод чисел из строки в массив чисел C++

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

Или воспользуйтесь поиском по форуму:
sparta4ok
0 / 0 / 0
Регистрация: 17.12.2011
Сообщений: 9
18.12.2011, 14:20  [ТС]     Перевод чисел из 10 сс в 8 сс на С++ #20
в грамотности моего преподавателя я не сомневаюсь, так как он очень грамотный!
просто главная задача стоит не в написании этой программы, и поэтому он не сильно обращает внимание как она написана! а вообще вот постановка задачи:
1.Внимательно изучите теоретический материал по использованию GNU make.
2.Напишите программу на C (или C++, по желанию), которая удовлетворяет следующим требованиям:

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

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

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

Предоставьте в электронном виде отчет о проделанной работе с указанием темы работы, варианта задания, алгоритма и исходного кода программы с комментариями, скрипта Makefile, ответов на контрольные вопросы.
Yandex
Объявления
18.12.2011, 14:20     Перевод чисел из 10 сс в 8 сс на С++
Ответ Создать тему
Опции темы

Текущее время: 07:41. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru