1 Востаннє редагувалося Johny_Hacker (27.02.2016 15:46:49)

Тема: Не вистачає одиниці в числі)

Програма, яка переводить двійково-десятквоий код в десятковий. Ніби все працює вірно, але при видачі результату десь губиться одиниця, тобто якщо я ввів дв.-десятковим кодом число 4956, то виводить 4955.

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

int main() {
    char numb[30],*temp=numb;
   int n=0,m=0,tempnumb=0,tn=0;
   gets(numb);
   while(*(temp+1)!='\0') //шукаємо останній символ рядка
   {
       temp++;
   }
   for(char* i=temp;i>=numb;i--) 
   {
    while(*i!=' ') // проходимо циклом по кожній тетраді
    {
       if(*i=='1') 
         tempnumb+=pow(2,m);// тут формуємо десяткове представлення тетради
       i--;
       m++;
    }
       tn+=tempnumb*pow(10,n);//тут додаємо розряд тетради
       n++;
       m=0;
       tempnumb=0;
   }
   cout<<tn;
   cin.ignore();
   cin.get();
   return 0;
}

2

Re: Не вистачає одиниці в числі)

За рядки 18-19 вбивав би на місці. Відступи ставте!
А який це компілятор, просто цікаво?

3

Re: Не вистачає одиниці в числі)

koala написав:

За рядки 18-19 вбивав би на місці. Відступи ставте!
А який це компілятор, просто цікаво?

Упс) Поставив, поспішав просто. Компілятор - Dev C++

4

Re: Не вистачає одиниці в числі)

Johny_Hacker написав:
koala написав:

За рядки 18-19 вбивав би на місці. Відступи ставте!
А який це компілятор, просто цікаво?

Упс) Поставив, поспішав просто. Компілятор - Dev C++

щось не видно
http://не-дійсний-домен/nnia4/8d89fc3644.png

5

Re: Не вистачає одиниці в числі)

Зауваження:
0. У мене якимось дивом воно працює: http://ideone.com/H8KuGS
1. Відступи треба ставити систематично, назви змінних давати зрозумілі. Чому temp, якщо end_numb чи аналогічне буде значно краще? Те саме стосується m (pow2) і n (pow10).
2. Тут не потрібна pow. Зробіть pow2=1, pow10=1 і домножуйте їх на кожній ітерації на 2 і 10 відповідно. Можливо, 1 зникає саме через округлення при переведенні з double до int.
3. Умову тут бажано розписати детальніше. Зазвичай двійково-десятична форма (BCD) - це коли в байт записують дві десяткові цифри по 4 біт на кожну; у вас же є рядок з 0, 1 та пробілів, причому 0 та 1 утворюють групи не більш ніж по 4 знаки, а пробіли завжди йдуть по одному. Жодного контролю цієї умови не проводиться. Так, а ще ви перетворюєте не в десяткове число, а у внутрішнє представлення (двійкове), яке потім стандартними засобами перетворюється в десяткове.
4. i у вас є параметром двох циклів. Це небезпечно, краще робіть один цикл по i і розгалуження залежно від того, пробіл зустріли чи ні.
5. Якщо робите два цикли, то занулюйте змінні для сум на початку циклу.

Подякували: leofun011

6

Re: Не вистачає одиниці в числі)

koala,дякую за такий детальний розпис моїх помилок. Візьму до уваги і писатиму в наступний раз коректніше. Але все-таки я мушу скомпілювати її на Dev C++. Але оскільки у Вас вона працює, то виходить, що проблема в компіляторі. а не в програмі?