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

Перевод из восьмиричной в десятиричную - C++

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 14, средняя оценка - 4.93
jock
2 / 2 / 0
Регистрация: 29.10.2011
Сообщений: 38
11.02.2012, 23:36     Перевод из восьмиричной в десятиричную #1
Помогите, пожалуйста, переписать программу, что бы она была без динамического массива:

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
#include <iostream>   
#include <math.h>
using namespace std;
 
int main()
{
    int temp, size=0,nVal;
    int S=0;
    cout <<"Enter number\n";
    cin >> nVal;
    temp=nVal;
    while(temp!=0) 
    {
        temp/=10;
        size++;
    }
    temp=nVal; 
    int* ar = new int[size];
    for(int i=0; i<size; i++)
    {
        ar[i]=temp%10;
        temp/=10;
    }
    for (int i=0; i<size; i++)
    {
        S+=ar[i]*pow(8.0,i);
    }
    delete ar;
    cout <<S;
}
Или напишите свой код. Заранее спасибо!
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.02.2012, 23:36     Перевод из восьмиричной в десятиричную
Посмотрите здесь:

C++ Перевод из 10 си в 11-16
C++ Перевод числа из восьмиричной в десятичную систему счисления
Перевод из 16 сс в 4 сс C++
C++ Перевод в 8-ю ЧС
C++ Перевод из восьмеричной системы исчисления в десятиричную
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
renald
35 / 35 / 2
Регистрация: 11.02.2012
Сообщений: 105
12.02.2012, 00:25     Перевод из восьмиричной в десятиричную #2
C++
1
2
3
4
5
6
7
8
9
#include <iostream>
using namespace std;
 
int main () {
  int nVal;
        cout <<"Enter number\n";
        cin >> oct >> nVal;
  cout << dec << nVal << endl;
}
-=ЮрА=-
Заблокирован
Автор FAQ
12.02.2012, 00:44     Перевод из восьмиричной в десятиричную #3
jock, твой код переводит из 10-ной в 8-ную. У меня к тебе вопрос: как вводим 8-чное - вручную либо оно в файле записано???Как ответишь - постараюсь помочь конкретным кодом...
Сtrl
 Аватар для Сtrl
138 / 128 / 3
Регистрация: 19.07.2011
Сообщений: 184
12.02.2012, 00:46     Перевод из восьмиричной в десятиричную #4
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
вручную либо оно в файле записано
А что это меняет? Велика ли разница между чтением из istream и ifstream?
jock
2 / 2 / 0
Регистрация: 29.10.2011
Сообщений: 38
12.02.2012, 00:59  [ТС]     Перевод из восьмиричной в десятиричную #5
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
jock, твой код переводит из 10-ной в 8-ную. У меня к тебе вопрос: как вводим 8-чное - вручную либо оно в файле записано???Как ответишь - постараюсь помочь конкретным кодом...
Вроде бы из 8 в 10. Насчет ввода - вручную.
renald
35 / 35 / 2
Регистрация: 11.02.2012
Сообщений: 105
12.02.2012, 01:10     Перевод из восьмиричной в десятиричную #6
А чем мой код не подходит?
-=ЮрА=-
Заблокирован
Автор FAQ
12.02.2012, 01:18     Перевод из восьмиричной в десятиричную #7
Цитата Сообщение от jock Посмотреть сообщение
Вроде бы из 8 в 10. Насчет ввода - вручную.
- тогда как то так
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
#include <iostream>
#include <cmath>
using namespace std;
 
int oct2dec(int oct_val)
{
    
    int ipower = 0;
    int buffer = oct_val;
    while(0 < (buffer /= 8))
        ipower = ipower + 1;
    int dec_val= (oct_val%10);
    for(int i = 1; i <= ipower; i++)
    {
        oct_val /= 10;
        dec_val += (oct_val%10)*pow(8,i);
    }
    return dec_val;
}
 
int main()
{
    
    int val;
    while(true)
    {
        cout<<"Enter oct value : "; cin>>val;
        cout<<"Decimal value   : "<<oct2dec(val)<<endl;
    }
    return 0;
}
Отработка в консоли
Enter oct value : 72
Decimal value : 58
Enter oct value : 200
Decimal value : 128
Enter oct value :

Добавлено через 1 минуту

Не по теме:

PS:jock, да твой код норм, я сначала не въехал, как то сложно сразу перестроить мозги на 8-ку

Сtrl
 Аватар для Сtrl
138 / 128 / 3
Регистрация: 19.07.2011
Сообщений: 184
12.02.2012, 01:21     Перевод из восьмиричной в десятиричную #8
Это чертовски неправильное решение. Почему - смотреть в главе 8 FAQ от Evg.
-=ЮрА=-
Заблокирован
Автор FAQ
12.02.2012, 01:24     Перевод из восьмиричной в десятиричную #9
jock, если компилятор сюда будет ругаться
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
pow(8,i);
- поставь pow(8,1.0*i);
Ниже рабочий проект в 9-й студии
Миниатюры
Перевод из восьмиричной в десятиричную  
Вложения
Тип файла: rar oct2dec_VS9_proj.rar (5.1 Кб, 8 просмотров)
-=ЮрА=-
12.02.2012, 01:26
  #10

Не по теме:

Цитата Сообщение от Сtrl Посмотреть сообщение
Это чертовски неправильное решение.
Сtrl, начинаешь утомлять, для тебя рабочий проект, попробуй найти ситуацию некорректного преобразования
PS:Я не в ответе за чьи-о кривые мозги...

Сtrl
12.02.2012, 01:43
  #11

Не по теме:

Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
Сtrl, начинаешь утомлять, для тебя рабочий проект, попробуй найти ситуацию некорректного преобразования
Найти? Да ее и искать не надо, преобразование INT_MAX приведет к переполнению гарантированно.

-=ЮрА=-
Заблокирован
Автор FAQ
12.02.2012, 01:52     Перевод из восьмиричной в десятиричную #12
Цитата Сообщение от Сtrl Посмотреть сообщение
Найти? Да ее и искать не надо, преобразование INT_MAX приведет к переполнению гарантированно.
- причём тут INT_MAX я заменю тип на ULONG и всё!Ті мне инкреминировал ошибку логики, ну так давай покажи, где неправильно преобразовалось 8-ое в 10-ое - давай будем оперерировать числами чуть меньшими чем INT_MAX, хорошо?!Сам код ТС под такую ситуацию тоже не расчитан
Цитата Сообщение от jock Посмотреть сообщение
int S=0;
Цитата Сообщение от jock Посмотреть сообщение
S+=ar[i]*pow(8.0,i);
Сtrl
 Аватар для Сtrl
138 / 128 / 3
Регистрация: 19.07.2011
Сообщений: 184
12.02.2012, 01:57     Перевод из восьмиричной в десятиричную #13
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
- причём тут INT_MAX я заменю тип на ULONG и всё!Ті мне инкреминировал ошибку логики, ну так давай покажи, где неправильно преобразовалось 8-ое в 10-ое - давай будем оперерировать числами чуть меньшими чем INT_MAX, хорошо?!
Я даже не знаю как вам объяснить, что вы путаете теплое с мягким. Есть число, а есть представление числа. Число неизменно, и если на столе лежит N яблок, то там N яблок. В то же время мы можем по-разному записать это число N. Если в десятичной записи оно будет выглядеть как 11, то в восьмеричной - как 13. Вы же изменяете не представление числа, а само число, да еще и таким образом, чтобы его представление в десятичной системе выглядело так, как должно выглядеть в восьмеричной. Здесь есть глубокая логическая ошибка.
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
Сам код ТС под такую ситуацию тоже не расчитан
ТС - новичок, или вы будете на дилетантов равняться?
-=ЮрА=-
Заблокирован
Автор FAQ
12.02.2012, 02:09     Перевод из восьмиричной в десятиричную #14
Сtrl, уважаемый в 8-ке 128(10) будет 200 58(10) будет 72, алгоритм так и считает!
Задание стоит преобразовать число (8-е) вводимое с клавиатуры в 10-е, ну так вот
Цитата Сообщение от Сtrl Посмотреть сообщение
11, то в восьмеричной - как 13
- посмотри скрин и перестрой свой мозг, чтобы не делать глупых замечаний

Цитата Сообщение от Сtrl Посмотреть сообщение
ТС - новичок, или вы будете на дилетантов равняться?
- причём тут это,
в 8-ке число будет больше чем в 10-ке
Вот тебе преобразование из калькулятора(чтобы сам убедился)
oct 777777777777777777777
dec 9223372036854775807
Таким образом вводи в 8-ке INT_MAX и получай нормальный 10-ный ответ.
Миниатюры
Перевод из восьмиричной в десятиричную  
-=ЮрА=-
Заблокирован
Автор FAQ
12.02.2012, 02:11     Перевод из восьмиричной в десятиричную #15
Цитата Сообщение от Сtrl Посмотреть сообщение
на дилетантов
- пока я вижу делитанство у тебя или может неспособность перестроить мозг!
Код С++
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 <climits>
#include <cmath>
using namespace std;
 
int oct2dec(int oct_val)
{
    
    int ipower = 0;
    int buffer = oct_val;
    while(0 < (buffer /= 8))
        ipower = ipower + 1;
    int dec_val= (oct_val%10);
    for(int i = 1; i <= ipower; i++)
    {
        oct_val /= 10;
        dec_val += (oct_val%10)*pow(8,1.0*i);
    }
    return dec_val;
}
 
int main()
{
    
    int val;
    while(true)
    {
        //cout<<"Enter oct value : "; cin>>val;
        cout<<"INT_MAX       : "<<(val = INT_MAX)<<endl;
        cout<<"Decimal value : "<<oct2dec(INT_MAX)<<endl;
        system("pause");
    }
    return 0;
}


PS:Хочу отметить, что INT_MAX даже не можем в oct вводить ибо надо вводить с разрядами меньше 8-ки, а ещё ведёшь речь о переполнении...
Миниатюры
Перевод из восьмиричной в десятиричную  
Сtrl
 Аватар для Сtrl
138 / 128 / 3
Регистрация: 19.07.2011
Сообщений: 184
12.02.2012, 02:14     Перевод из восьмиричной в десятиричную #16
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
в 8-ке число будет больше чем в 10-ке
Нет. Число не меняется от того, в какой системе счисления его записывать. Попробуйте осознать это и не называть мои замечания глупыми без весомых на то причин.
-=ЮрА=-
Заблокирован
Автор FAQ
12.02.2012, 02:21     Перевод из восьмиричной в десятиричную #17
Цитата Сообщение от Сtrl Посмотреть сообщение
Нет. Число не меняется от того, в какой системе счисления его записывать. Попробуйте осознать это и не называть мои замечания глупыми без весомых на то причин.
- да понятное дело, что 11 яблок это 11 яблок, только в бинарке это 1011 в oct 13 а в hex B.
Когда делаем ввод то только запись и можем ввести и получаем такую же запись в другой системе счисления, весь мозг мне выел
Сtrl
 Аватар для Сtrl
138 / 128 / 3
Регистрация: 19.07.2011
Сообщений: 184
12.02.2012, 02:23     Перевод из восьмиричной в десятиричную #18
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
Хочу отметить, что INT_MAX даже не можем в oct вводить ибо надо вводить с разрядами меньше 8-ки, а ещё ведёшь речь о переполнении...
Хочу отметить, что коль мы вводим восьмеричное число (хотя согласно вашему коду, мы вводим десятичное) - представление INT_MAX это 17777777777. Что-то я не вижу ни одного разряда больше восьмерки.
Когда делаем ввод то только запись и можем ввести и получаем такую же запись в другой системе счисления
Поток cin по умолчанию принимает как раз десятичную запись числа в виде строки, а затем преобразует во внутреннее представление (int). Это можно изменить. Правильное решение находится в сообщении #2 данной темы.
-=ЮрА=-
12.02.2012, 02:30
  #19

Не по теме:

Сtrl, прочти название топика

Цитата Сообщение от jock Посмотреть сообщение
перевод из восьмиричной в десятиричную
теперь посмотри на результат работы программы, потом ещё раз на тему топика, кстати можно было сделать преобразование из бинарки и вводить скажем 1011 т.е двоичную запись числа 11, и что дальше ты запрещаешь это делать?Многие бинарку строкой записывают а не работают с битами и???
PS:Хвати спорить не понятно о чём, надоело!

MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.02.2012, 12:01     Перевод из восьмиричной в десятиричную
Еще ссылки по теме:

C++ Перевод
C++ Перевод из C в С++
Перевод из восьмеричной системы в десятиричную C++

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

Или воспользуйтесь поиском по форуму:
vladislavchick
35 / 35 / 1
Регистрация: 22.05.2010
Сообщений: 107
12.02.2012, 12:01     Перевод из восьмиричной в десятиричную #20
По-моему, у renald самое нормальное решение.
Yandex
Объявления
12.02.2012, 12:01     Перевод из восьмиричной в десятиричную
Ответ Создать тему
Опции темы

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