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

Проверьте правильность программы - C++

Восстановить пароль Регистрация
 
pashkevich
0 / 0 / 0
Регистрация: 13.05.2009
Сообщений: 5
15.06.2009, 11:13     Проверьте правильность программы #1
Она должна переводить дробную часть десятичного числа в двоичную, она переводит но не правильно.

КоД:


Код
//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop

//---------------------------------------------------------------------------

#pragma argsused
#include <iostream>
#include <math.h>
#include <stdlib.h>
#define nn 16
using namespace::std;
  
int main ()
{
    int n, i=0, d, num_int, c;// 
    double num, x;          // Variables (IIepeMeHHbIe)
    char response;          //
    int a[nn];              //
    cout << "This program will convert your decimal number to binary number (16 bits)" << endl;
    begin: cout << "Enter the number: ";
    cin >> num;             // Reading from keybord the value of our number
    num_int = (int)num;     // Convert our number into integer and make it new variable (num_int)
    x = num - num_int;      // Doing from our number ?.xxx something like 0.xxx
    for(;(x-(int)x)!=0;)    // Till x!= integer part of x
    { x = 10*(x);}          // we will do x=10*x
    n=x; d=n;               // Making copy of x value
	if (n==1)               // Cycle
    {i=0;
    a[i]=1;                 // Cycle
    for (i=1; i!=16; i++) {a[i]=0;}
    }
    if (n==0)               // Cycle
    {for (i=0; i!=16; i++) {a[i]=0;}
    }
    else
    for (i=0; i!=16; i++)   // Save our binary into massive
    {a[i]=n%2;
    n=n/2;
    }
    cout << "Binary value of " << d << " is: ";
    for(i=15; i!=-1;i--) {
    if(a[i]==1){c=1;}
    if(c==1){
    cout << a[i];}}
    cout << endl << "Want to retry ? (y/n)" << endl;    // Restart function
    cin >> response;
    if (response == 'y') {         // If 'y' do Clear Screen and go to begin
    system("CLS");
    goto begin;}
}
//---------------------------------------------------------------------------
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.06.2009, 11:13     Проверьте правильность программы
Посмотрите здесь:

Проверьте правильность C++
Пожалуйста, проверьте правильность C++
Проверьте код на правильность. C++
C++ Проверьте правильность работы в С++
C++ проверьте правильность программ
C++ Проверьте пожалуйста код на правильность !
Проверьте правильность кода C++
C++ Проверьте правильность пожалуйста
C++ проверьте на правильность
Проверьте правильность C++
C++ проверьте на правильность
Проверьте правильность кода C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Patch
2276 / 491 / 11
Регистрация: 01.04.2009
Сообщений: 2,178
15.06.2009, 13:10     Проверьте правильность программы #2
вообще не понял, что ты делаешь...
в C/C++ числа и так хранятся в двоичном виде.
процессор по-другому делать не позволяет.
C
1
cin >> num
дает тебе ДВОИЧНОЕ число.
ты пытаешься перевести из двоичного в двоичный?
pashkevich
0 / 0 / 0
Регистрация: 13.05.2009
Сообщений: 5
16.06.2009, 11:00  [ТС]     Проверьте правильность программы #3
ввожу 3.125
нужно перевести 0.125 в двоичную систему
AltPeople
 Аватар для AltPeople
10 / 10 / 1
Регистрация: 25.09.2008
Сообщений: 73
16.06.2009, 11:16     Проверьте правильность программы #4
А разве в двоичной системе есть дробные числа???????
на сколько мне извесно, там только целые!
это я к тому, что у тебя есть 0,125
125 в двоичной = 111 1101
тогда получается, что 0,125 в двоичной ну что-то типа 0,111 1101 ?????? О_о
бред получается

Добавлено через 11 минут 28 секунд
все что меньше 1 в двоичной системе = 0!
kazak
 Аватар для kazak
3029 / 2350 / 155
Регистрация: 11.03.2009
Сообщений: 5,401
16.06.2009, 13:59     Проверьте правильность программы #5
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от AltPeople Посмотреть сообщение
все что меньше 1 в двоичной системе = 0!
маленькая поправка - в компьютере и для целых чисел
В математике дроби переводяться в двоичный формат следующим образом:
1)Умножается дробь на 2;
2)Запоминается целая часть;
3)Обнуляем целую часть;
4)Повторяем пункты с 1 по 3, пока дробная часть не станет равной нулю или не получим двоичное число нужной точности.

Пример:
Число 0.125
1)0.125 х 2 = 0.250 (запомнили 0)
2)0.250 х 2 = 0.5 (запомнили 0)
3)0.5 х 2 = 1.0 (запомнили 1)
4)Дробная часть равна нулю - прекратили цикл. Выписываем полученные числа 001,
в итоге результат 0.001b
Обратный перевод: 0 х (1/2^1) + 0 x (1/2^2) + 0 x (1/2^3) = 0.125
Пример2
Число 0.3
1)0.3 х 2 = 0.6 (0)
2)0.6 х 2 = 1.2 (1, обнуляем целую часть)
3)0.2 х 2 = 0.4 (0)
4)0.4 х 2 = 0.8 (0)
5)0.8 х 2 = 1.6 (1)
6)0.6 х 2 = 1.2 (1)
7)0.2 х 2 = 0.4 (0)
8)0.4 х 2 = 0.8 (0)
9)0.8 х 2 = 1.6 (1)
Дальше видим, что цикл будет повторяться, поэтому прекратим дальнейшие вычисления, получили 0.010011001b
Проверка:
0 x (1/2^1) + 1 x (1/2^2) + 0 x (1/2^3) + 0 x (1/2^4) + 1 x (1/2^5) + 1 x (1/2^6) + 0 x (1/2^7) + 0 x (1/2^8) + 1 x (1/2^9) =
= 0.25 + 0.03125 + 0.015625 + 0.001953125 = 0.298828125(в принципе более менее точно)

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
//---------------------------------------------------------------------------
#include <iostream.h>
#pragma hdrstop
 
//---------------------------------------------------------------------------
 
#pragma argsused
int main(int argc, char* argv[])
{
   double d = 0, num = 0;
   int bin[16] = {0};
   char ack;
 
 cout << "This program will convert your decimal number to binary number (16 bits)" << endl;
 while (true)
 {
   cout << "Enter the number: ";
   cin >> d;
   num =d - (int)d;
 
   for (int i = 0; i < 16; i++)
   {
      num *= 2;
      bin[i] = (int)num;
      num -= (int)num;
      if (num == 0)
      {
         bin[i+1] = '\0';
         break;
      }
      bin[i+1] = '\0';
   }
   cout << "Binary value of " << d << " is: 0,";
   for (int i = 0; i < 16; i++)
        cout << bin[i];\
   cout << "b" << endl;
   cout << endl << "Want to retry ? (y/n)";
   cin >> ack;
   if (ack != 'y')
      break;
 }
    system("pause");
   return 0;
}
//---------------------------------------------------------------------------
Добавлено через 57 минут 50 секунд
Ээ.. только что заметил, 28 и 31 строки забыл убрать они там лишние
pashkevich
0 / 0 / 0
Регистрация: 13.05.2009
Сообщений: 5
18.06.2009, 01:30  [ТС]     Проверьте правильность программы #6
2 kazak
спасибо большое
Yandex
Объявления
18.06.2009, 01:30     Проверьте правильность программы
Ответ Создать тему
Опции темы

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