Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/5: Рейтинг темы: голосов - 5, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 13.05.2009
Сообщений: 5
1

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

15.06.2009, 11:13. Просмотров 1039. Ответов 5
Метки нет (Все метки)

Она должна переводить дробную часть десятичного числа в двоичную, она переводит но не правильно.

КоД:


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

#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;}
}
//---------------------------------------------------------------------------
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
15.06.2009, 11:13
Ответы с готовыми решениями:

Проверьте правильность программы
Задали задачу, но примеров входных и выходных данных не дали, поэтому не могу разобраться,...

Пожалуйста, проверьте правильность программы
Всем здравствуйте, для решения задачи, я написала программу на языке Си, однако в Visual Studio у...

Проверьте правильность текста программы проверки текста заклинаний.
на вход программе подается текст заклинания, состоящего не более, чем из 200 символов,...

проверьте на правильность
Нужно удвоить нечётные элементы (количество строк m - 4, а столбцов n - 3) #include...

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

Добавлено через 11 минут 28 секунд
все что меньше 1 в двоичной системе = 0!
0
3072 / 2393 / 255
Регистрация: 11.03.2009
Сообщений: 5,444
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 строки забыл убрать они там лишние
3
0 / 0 / 0
Регистрация: 13.05.2009
Сообщений: 5
18.06.2009, 01:30  [ТС] 6
2 kazak
спасибо большое
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
18.06.2009, 01:30

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

проверьте на правильность
Вычислить значения функции у=4х3-2х2+5 для значений х, изменяющихся от -3 до 1, с шагом 0.1....

Проверьте правильность
Структурная схема алгоритма (метод вставки) http://i032.***********/0912/0c/f5e0e7e1959c.jpg...

Проверьте правильность
Создайте условный оператор (if), который присваивал бы x значение x/y, если y не равно 0. ...

Проверьте правильность пожалуйста
Правильно ли я реализовал задание? Задание: В массиве Z(m) найти число чередований знака, то есть...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.