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

Формирование двоичного кода для целой и дробной части + вывод в файл - C++

Восстановить пароль Регистрация
 
bacujiuca1
0 / 0 / 0
Регистрация: 20.05.2013
Сообщений: 17
02.05.2014, 18:48     Формирование двоичного кода для целой и дробной части + вывод в файл #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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
#include <iostream>
#include <fstream.h>
#include <string>
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <iostream>
#include <iomanip>
#include <locale.h>
#include <windows.h>
using namespace std;
 
void Binary_integral(int j, char *Path){
FILE *f;
f=fopen(Path, "a");
int i;
for (i= 4-1; i >= 0; i--) {
if ((1 << i) & j){ cout << "1"; fputc('1', f);}
else{ cout << "0"; fputc('0', f);}}
fputc(' ', f);
cout << " ";
fclose(f);}
 
void Binary_fraction(int k, char *Path){
FILE *f;
f=fopen(Path, "a");
int i;
for (i = 10; i >= 0; i--) {
if ((1 << i) & k){ cout << "1"; fputc('1', f);}
else{ cout << "0"; fputc('0', f);}}
fputc('\n', f);
fclose(f);
return;}
 
 
int main(){
int n, bin;
double x, intpart, fractpart;
cout.setf(ios::fixed);
 
cout << "\n Please enter a file name: ";
char filename[15];
cin >> filename;
strcat(filename, ".txt");
ofstream outfile(filename, ios::app);
if(!outfile){ cout << " Can not open file: "<< filename<< "\n"; system("pause >> void"); exit(1);}
 
for (n= 1; n<= 10; n++){
    
x= (1.234*n);
cout.precision(3);
cout<< "\n"<< n<<") "<< x<< "   ";
cout.precision(0);
fractpart= modf(x, &intpart);
cout <<" intpart: "<< intpart <<"   ";
 
int y= (int)x;
fractpart=(x-y)*pow(10.0,3);
cout << "fractpart: "<< fractpart <<"   ";
 
int integral= (int)intpart;
Binary_integral(integral, filename);
 
int fraction= (int)fractpart;
Binary_fraction(fraction, filename);}
 
system("pause >> void");
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.05.2014, 18:48     Формирование двоичного кода для целой и дробной части + вывод в файл
Посмотрите здесь:

C++ Вывод дробной и целой части
C++ Вывод целой и дробной части
C++ Определения, равна сумма цифр целой части вещественного числа сумме такого же количества цифр в дробной части
C++ Вывести старшую цифру дробной части и младшую цифру целой части числа
В вещественном числе определить, равны ли суммы цифр целой и дробной части C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
alexey31415
 Аватар для alexey31415
59 / 59 / 3
Регистрация: 16.05.2010
Сообщений: 632
02.05.2014, 18:55     Формирование двоичного кода для целой и дробной части + вывод в файл #2
Форматирование ни к черту. Поправил для тех, кто может помочь
Кликните здесь для просмотра всего текста
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
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
using namespace std;
 
void Binary_integral(int j, char *Path){
    FILE *f;
    f=fopen(Path, "a");
 
    for (int i= 4-1; i >= 0; i--) {
        if ((1 << i) & j){
            cout << "1"; fputc('1', f);
        } else{
            cout << "0"; fputc('0', f);
        }
    }
    
    fputc(' ', f);
    cout << " ";
    fclose(f);
}
 
void Binary_fraction(int k, char *Path){
    FILE *f;
    f=fopen(Path, "a");
    
    for (int i = 10; i >= 0; i--) {
        if ((1 << i) & k){
            cout << "1"; fputc('1', f);
        } else{
            cout << "0"; fputc('0', f);
        }
    }
    
    fputc('\n', f);
    fclose(f);
    return;
}
 
 
int main(){
    int n, bin;
    double x, intpart, fractpart;
 
    cout.setf(ios::fixed);
    cout << "\n Please enter a file name: ";
    
    char filename[15];
    cin >> filename;
    strcat(filename, ".txt");
    
    ofstream outfile(filename, ios::app);
 
    if(!outfile){
        cout << " Can not open file: " << filename<< "\n";
        system("pause >> void");
        exit(1);
    }
 
    for (n= 1; n<= 10; n++){
    
        x= (1.234*n);
        
        cout.precision(3);
        cout<< "\n"<< n<<") "<< x<< "   ";
        cout.precision(0);
        
        fractpart= modf(x, &intpart);
        cout <<" intpart: "<< intpart <<"   ";
 
        int y= (int)x;
        fractpart=(x-y)*pow(10.0,3);
        cout << "fractpart: "<< fractpart <<"   ";
 
        int integral= (int)intpart;
        Binary_integral(integral, filename);
 
        int fraction= (int)fractpart;
        Binary_fraction(fraction, filename);
    }
 
    system("pause >> void");
}
bacujiuca1
0 / 0 / 0
Регистрация: 20.05.2013
Сообщений: 17
02.05.2014, 18:59  [ТС]     Формирование двоичного кода для целой и дробной части + вывод в файл #3
Спасибо за форматирование -)
stawerfar
 Аватар для stawerfar
141 / 55 / 4
Регистрация: 14.12.2010
Сообщений: 347
Записей в блоге: 1
03.05.2014, 01:43     Формирование двоичного кода для целой и дробной части + вывод в файл #4
Покажи что выводит и входные данные тоже
bacujiuca1
0 / 0 / 0
Регистрация: 20.05.2013
Сообщений: 17
03.05.2014, 14:57  [ТС]     Формирование двоичного кода для целой и дробной части + вывод в файл #5
C++
1
2
for (n= 1; n<= 10; n++){
x= (1.234*n);
Кликните здесь для просмотра всего текста
1) 1.234 intpart: 1 fractpart: 234 0001 00011101010
2) 2.468 intpart: 2 fractpart: 468 0010 00111010100
3) 3.702 intpart: 3 fractpart: 702 0011 01010111110
4) 4.936 intpart: 4 fractpart: 936 0100 01110101000
5) 6.170 intpart: 6 fractpart: 170 0110 00010101001
6) 7.404 intpart: 7 fractpart: 404 0111 00110010011
7) 8.638 intpart: 8 fractpart: 638 1000 01001111101
8) 9.872 intpart: 9 fractpart: 872 1001 01101100111
9) 11.106 intpart: 11 fractpart: 106 1011 00001101001
10) 12.340 intpart: 12 fractpart: 340 1100 00101010011

fractpart переводит неверно Уже не знаю что делать.

Добавлено через 3 часа 26 минут
В общем, я поняла в чем проблема: если здесь [ cout.precision(0) ] поменять 0 на, допустим, 2, то вместо целого числа, к примеру 5, он выведет 4.85, а как оказалось, двоичный код для 4 и 5 совсем разный : D

Может кто- нибудь знает как сделать переменную fraction целым числом? Что бы в функцию Binary_fraction() отправлось именно целое число.

C++
1
2
3
4
5
int y= (int)x;
fractpart=(x-y)*pow(10.0,3);
cout << "fractpart: "<< fractpart <<"   ";
int fraction= (int)fractpart;
Binary_fraction(fraction, filename);}
stawerfar
 Аватар для stawerfar
141 / 55 / 4
Регистрация: 14.12.2010
Сообщений: 347
Записей в блоге: 1
03.05.2014, 23:25     Формирование двоичного кода для целой и дробной части + вывод в файл #6
Так эта переменная у тебя и так есть целое число. Используйте привидение типов.
Yandex
Объявления
03.05.2014, 23:25     Формирование двоичного кода для целой и дробной части + вывод в файл
Ответ Создать тему
Опции темы

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