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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> (C++) Нужна помощь! Функция по переводу десятичного числа... 
V
    Опции темы
Panterka
Дата 10.12.2007, 11:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Необходимо было создать прогу (в виде функции) по переводу десятичного числа в двоичное. Вот собственно что получилась, проблема в том, что при вводе любого десятичного числа прога выдаёт ответ "0". Подскажите пожалуйста в чём проблема!  smile 

Код

//Vuchislenie fynkcii

#include <stdio.h>
#include <conio.h>
#include <math.h>

void dvoich(int x1)
{FILE*L5;
int i,b;
long c=0;
L5=fopen("C:\L5.txt","at");

for(i=0;x1<2;i++)
{b=fmod(x1,2);
x1/=2;
c+=b*pow(10,i);}
printf("\n Dvoichnoe chislo: %d",c);
fprintf(L5,"\n Dvoichnoe chislo: %d",c);
fclose(L5);}

void main()
{int a;
clrscr();
FILE*L5;
L5=fopen("C:\L5.txt","at");
printf("\n Vvedite desyatichnoe chislo:");
scanf("\n %d",&a);
fprintf(L5,"Desyatichnoe chislo a=%d",a);
dvoich(a);
fclose(L5);
getch();
}


Это сообщение отредактировал(а) Panterka - 10.12.2007, 14:39
PM MAIL   Вверх
bsa
Дата 10.12.2007, 12:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Код
const char * toBinary(unsigned x)
{
      unsigned t = 1 << (sizeof(t)*8 - 1); //результат операции - 1 в старшем двоичном разряде
      static char result[sizeof(t)*8 + 1];    //сюда помещается результат. Массив должен быть статическим, иначе могут быть проблемы.
      result[sizeof(t)*8] = '\0';           //конец строки
      char *p = result;         //указатель на начало строки
      for(; t; t >>= 1, ++p)  //на каждой итерации цикла сдвигаем единицу в t на один разряд вправо (делим на 2), и сдвигаем указатель p на один символ
         *p = (x & t) ? '1' : '0'; //если бит (в котором единица в t) переменной x установлен, то помещаем 1 по указателю p, иначе 0.
      return result;
}
Функция превращает беззнаковое целое в двоичное число и возвращает указатель на сроку, его содержащую.
PM   Вверх
Panterka
Дата 10.12.2007, 12:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата(bsa @ 10.12.2007,  12:11)
Функция превращает беззнаковое целое в двоичное число и возвращает указатель на сроку, его содержащую.

Не могли бы вы подсказать, что надо исправить в моей программе?

Это сообщение отредактировал(а) Panterka - 10.12.2007, 12:54
PM MAIL   Вверх
bsa
Дата 10.12.2007, 12:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Panterka, алгоритм. Вот этот код:
Код
for(i=0;x1<2;i++)
{
      b=fmod(x1,2);
      x1/=2;
      c+=b*pow(10,i);}
      printf("\n Dvoichnoe chislo: %d",c);
      fprintf(L5,"\n Dvoichnoe chislo: %d",c);
      fclose(L5);
}
Выполняет в цикле вывод c и закрытие файла. тебе надо закрывающую фигурную скобку перенести до первого printf. Затем надо заменить все "%d" на "%ld", так как переменная c типа long, а не int.
PM   Вверх
Panterka
Дата 10.12.2007, 13:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Спасибо большое! smile 

Это сообщение отредактировал(а) Panterka - 10.12.2007, 13:23
PM MAIL   Вверх
Panterka
Дата 10.12.2007, 14:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Прога получилась.  Но одно НО, подскажи пожалуйста как сделать вывод информации (результатов) в *.txt, что-то никак не получается.

Код

//Vuchislenie fynkcii      
     
#include <stdio.h>      
#include <conio.h>      
#include <math.h>      
     
void 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);  
    }   
  
    printf("\nDvoichnoe chislo: %d",c);      
}      
     
void main()      
{  
    int a;    
    printf("Vvedite desyatichnoe chislo:");    
    scanf("%d",&a);    
    dvoich(a);    
    getch();    
}   


Это сообщение отредактировал(а) Panterka - 10.12.2007, 14:38
PM MAIL   Вверх
bsa
Дата 10.12.2007, 15:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Panterka, у тебя же было в изначальной версии программы это сделано.
Для этого тебе нужны функции: fopen(), fprintf(), fclose().
PM   Вверх
Panterka
Дата 10.12.2007, 15:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата(bsa @ 10.12.2007,  15:08)
Panterka, у тебя же было в изначальной версии программы это сделано.
Для этого тебе нужны функции: fopen(), fprintf(), fclose().

Извиняюсь за настойчивость, просто с этими функциями: fopen(), fprintf(), fclose() не получается сделать.Если не трудно, выложите пожалуйсто, конечный вариант этой программы с выводом информации. smile 
PM MAIL   Вверх
bsa
Дата 10.12.2007, 18:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Код
//Vuchislenie fynkcii      
     
#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 *f;
    printf("Vvedite desyatichnoe chislo:");
    scanf("%d",&a);
    c = dvoich(a);
    printf("\nDvoichnoe chislo: %ld\n",c);
    f = fopen("result.txt", "wt");
    if (f != NULL) {
         fprintf(f, "result is: %ld\n", c);
         fclose(f);
    } else
         perror("Unable to open result file");
    getch();
    return 0;
}

PM   Вверх
Panterka
Дата 11.12.2007, 09:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Спасибки! smile 
PM MAIL   Вверх
JackYF
Дата 11.12.2007, 14:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


полуавантюрист
****


Профиль
Группа: Участник
Сообщений: 5814
Регистрация: 28.8.2004
Где: страна тысячи озё р

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



Panterka, закрывай тему.


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

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

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

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

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


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

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


 




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


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

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