Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Перевод десятичного числа в восьмеричное, Нужна помощь в доработке программы 
V
    Опции темы
Panterka
Дата 24.12.2007, 10:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 27
Регистрация: 10.12.2007

Репутация: нет
Всего: нет



Эта программа переводит любое десятичное число  в двоичное, необходимо добавить функцию, чтобы она десятичное число ещё переводило и в восьмеричное.
Код

#include <stdio.h>
#include <conio.h>
#include <math.h>      
     
long dvoich(int x1)      
{    
    int i, b;    
    long c = 0;    
    for(i=0;x1 > 0;i++)    
    {  
        b = x1 % 2;    
        x1 = (x1-b)/2;  
        c += b * pow(10,i);  
    }   
    return c;
}      
     
int main()      
{  
    int a;
    long c;
    FILE *L5;
    printf("Vvedite desyatichnoe chislo:");
    scanf("%d",&a);
    c = dvoich(a);
    printf("\nDvoichnoe chislo: %ld\n",c);
    L5 = fopen("result.txt", "wt");
    if (L5 != NULL) {
         fprintf(L5, "Dvoichnoe chislo: %ld\n", c);
         fclose(L5);
    } else
         perror("Unable to open result file");
    getch();
    return 0;

}

PM MAIL   Вверх
papam
Дата 24.12.2007, 12:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 104
Регистрация: 2.2.2006
Где: Украина::Запорожь е

Репутация: 2
Всего: 4



Вот программа преводит число  в любую систему счисления
Код

#include<iostream>
#include<list>
using namespace std;
list<char> insert_digit(list<char> syst_digit, int digit){
              switch(digit){
                      case 0: syst_digit.push_front('0'); break;
                  case 1: syst_digit.push_front('1'); break;
                  case 2: syst_digit.push_front('2'); break;
                  case 3: syst_digit.push_front('3'); break;
                  case 4: syst_digit.push_front('4'); break;
                  case 5: syst_digit.push_front('5'); break;
                  case 6: syst_digit.push_front('6'); break;
                  case 7: syst_digit.push_front('7'); break;
                  case 8: syst_digit.push_front('8'); break;
                  case 9: syst_digit.push_front('9'); break;
                  case 10: syst_digit.push_front('A'); break;
                  case 11: syst_digit.push_front('B'); break;
                  case 12: syst_digit.push_front('C'); break;
                  case 13: syst_digit.push_front('D'); break;
                  case 14: syst_digit.push_front('E'); break;
                  case 15: syst_digit.push_front('F'); break;
          }
        
    return syst_digit;
}
list<char> convert(int digit, int syst){
    list<char> syst_digit;

    int tmp_res=digit, tmp_ncl;
    while(1){
        if(tmp_res >= syst){ tmp_ncl = tmp_res % syst; 
                             syst_digit=insert_digit(syst_digit, tmp_ncl);
                     tmp_res=tmp_res / syst;
        }            
        else{                tmp_ncl = tmp_res;
                             syst_digit=insert_digit(syst_digit, tmp_ncl);
                     break;
        }            
    }
        return syst_digit;
}
void print(list<char> syst_digit){
    list<char>::iterator i; 
    
    for(i=syst_digit.begin(); i!=syst_digit.end(); ++i) cout<<*i;
}
main(){
    int digit=0, syst=0;
    list<char> syst_digit;

    cout<<"Input digit system(2..16): ";
    cin>>syst;
    cout<<"Input decimal digit to convert to "<<syst<<" digit system: ";
    cin>>digit;
    syst_digit=convert(digit, syst);
    cout<<"---------RESULTS-----------"<<endl;
    cout<<"Digit system: "<<syst<<endl;
    cout<<"Decimal digit: "<<digit<<endl;
    cout<<"Digit in "<<syst<<" digit system: ";
    print(syst_digit);
    cout<<endl;

    return 0;
}



Это сообщение отредактировал(а) papam - 24.12.2007, 12:53
--------------------
No Fucking Future
PM MAIL ICQ   Вверх
mrbrooks
Дата 24.12.2007, 13:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


трололомен
****


Профиль
Группа: Завсегдатай
Сообщений: 4259
Регистрация: 4.10.2006
Где: Дол Гулдур

Репутация: 19
Всего: 306



Не ребята я все понимаю - но почему бы не воспользоваться функцией itoa и получить все и сразу.

ЗЫ. Или вам это нужно для удовлетворения извращенных потребностей преподователей?
PM MAIL   Вверх
bsa
Дата 24.12.2007, 13:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 85
Всего: 196



если взять число типа unsigned int и вывести его с помощью формата %o функции printf(), то оно будет выведено в 8-миричной системе. Кстати, ключ %x выведет в 16-тиричной.
PM   Вверх
mrbrooks
Дата 24.12.2007, 13:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


трололомен
****


Профиль
Группа: Завсегдатай
Сообщений: 4259
Регистрация: 4.10.2006
Где: Дол Гулдур

Репутация: 19
Всего: 306



Код

char str[100];
int i = 100;
itoa(i,str,2) //двоичная система
itoa(i,str,8) //восьмеричная система
itoa(i,str,10) //десятичная система
itoa(i,str,16) //шестнадцатеричная система

PM MAIL   Вверх
bsa
Дата 24.12.2007, 13:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 85
Всего: 196



mrbrooks, я не знаю такой функции. какому стандарту она соответствует? в какую библиотеку входит?

Добавлено через 40 секунд
http://ru.wikipedia.org/wiki/Itoa
PM   Вверх
mrbrooks
Дата 24.12.2007, 13:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


трололомен
****


Профиль
Группа: Завсегдатай
Сообщений: 4259
Регистрация: 4.10.2006
Где: Дол Гулдур

Репутация: 19
Всего: 306



Код

#include <stdlib.h>

char *  itoa ( int value, char * str, int base );


Так мне ответила справка дядьки Борланда  smile

Добавлено через 59 секунд
ах пардон. уже есть ссылка на википедию. 
PM MAIL   Вверх
Panterka
Дата 24.12.2007, 13:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 27
Регистрация: 10.12.2007

Репутация: нет
Всего: нет



Всем спасибо  smile 
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0504 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.