Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 20.04.2009, 14:20   #1
Olya90
Форумчанин
 
Аватар для Olya90
 
Регистрация: 16.03.2009
Сообщений: 125
Подмигивание Помогите доделать простую прогу на с++

Это прога которая переводит числа bin в oct(cпасибо Sazary))). Нужно доделать так, чтобы она выводила сообщение об ошибке если пользователь введет что-то не то... И еще если не сложно напишите пожалуйста принцип работы программы.

Код:
#include <iostream>
#include <string.h>
#include <conio.h>
using namespace std;

int main()
{
string mas[8];
string binNumber,octNumber,buf;
int i,k,n=0;

mas[0]="000";
mas[1]="001";
mas[2]="010";
mas[3]="011";
mas[4]="100";
mas[5]="101";
mas[6]="110";
mas[7]="111";

cout<<"Enter bin-number: ";
cin>>binNumber;

while(binNumber[0]=='0' && binNumber.length()>3)
 binNumber = binNumber.substr(1,binNumber.length());

buf="000";
for(i=binNumber.length()-1,k=2,n=0;i>=0;i--)
 {
  buf[k--] = binNumber[i];
  if(k==-1)
   {
    for(int j=0;j<8;j++)
      if(mas[j]==buf)
      {
       octNumber[n++] = (char)(j+48);
       break;
      }
    buf="000";
    k=2;
   }
 }

if(k!=2) //также вопрос... что делает k 
 for(int j=0;j<8;j++)
   if(mas[j]==buf)
      {
       octNumber[n++] = (char)(j+48);
       break;
      }

for(i=n-1;i>=0;i--)
 cout<<octNumber[i];

getch();
return 0;
}
Если помогла нажмите на весы
Olya90 вне форума Ответить с цитированием
Старый 20.04.2009, 15:07   #2
megachuhancer
Форумчанин
 
Регистрация: 16.04.2009
Сообщений: 247
По умолчанию

Код:
#include <iostream>
#include <string.h>
#include <string>//интересно, как это всё работало без <string>? Впрочем у меня - не работало
#include <conio.h>
using namespace std;

int main()
{
string mas[8];
string binNumber,octNumber,buf;
int i,k,n=0;

mas[0]="000";
mas[1]="001";
mas[2]="010";
mas[3]="011";
mas[4]="100";
mas[5]="101";
mas[6]="110";
mas[7]="111";

cout << "Enter bin-number: ";
cin >> binNumber;

//добавлено
for(int i = 0; i < binNumber.length() ; i++) if(binNumber[i] != '0' && binNumber[i] != '1'){
   puts("This isn't binary number");
   getch();
   return  0;
}

while(binNumber[0]=='0' && binNumber.length()>3)
 binNumber = binNumber.substr(1,binNumber.length());

buf="000";
for(i=binNumber.length()-1,k=2,n=0;i>=0;i--)
 {
  buf[k--] = binNumber[i];
  if(k==-1)
   {
    for(int j=0;j<8;j++)
      if(mas[j]==buf)
      {
       octNumber[n++] = (char)(j+48);
       break;
      }
    buf="000";
    k=2;
   }
 }

if(k!=2) //также вопрос... что делает k 
 for(int j=0;j<8;j++)
   if(mas[j]==buf)
      {
       octNumber[n++] = (char)(j+48);
       break;
      }

for(i=n-1;i>=0;i--)
 cout<<octNumber[i];

getch();
return 0;
}
Принцип действия прост - каждая двоичная триада заменяется на соответствующую восьмеричную цифру.
megachuhancer вне форума Ответить с цитированием
Старый 20.04.2009, 18:33   #3
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Цитата:
Сообщение от Olya90
Нужно доделать так, чтобы она выводила сообщение об ошибке если пользователь введет что-то не то..
Сразу после ввода
Код:
cin>>binNumber;
добавьте:
Код:
for(i=0;i<binNumber.length();i++)
 if(binNumber[i]!='0' && binNumber[i]!='1')
  {
   cout<<"Error! It is not binary number!\n";
   getch();
   return 1;
  }
Цитата:
также вопрос... что делает k
k - указывает, сколько цифр для текущей тройки еще не прочитано.
Когда k==-1, тройка прочитана и ее можно преобразовать.
Но если длина числа не кратна 3-м (например, 10010), то последняя тройка (начиная справа) не будет преобразована.
И вот
Код:
if(k!=2)
как раз для этого случая.

Цитата:
Сообщение от megachuhancer
#include <string>//интересно, как это всё работало без <string>? Впрочем у меня - не работало
У меня работает
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите доделать прогу Deis Паскаль, Turbo Pascal, PascalABC.NET 3 19.01.2009 22:24
Помогите написть простую прогу подсчета статистики слов, символов в тексте.. amigo90 Паскаль, Turbo Pascal, PascalABC.NET 14 07.11.2008 18:34