Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Lom1
1 / 1 / 1
Регистрация: 09.05.2014
Сообщений: 79
#1

Операции с восьмеричными системами счисления - C++

31.05.2014, 11:11. Просмотров 638. Ответов 9
Метки нет (Все метки)

Создать класс Oct1, который будет содержать число в 8-ричной системе (в отдельном поле – целая часть, в другом поле – дробная часть).
Разработайте методы для ввода 8-ричных чисел (с дробной частью!), вывода 8-ричных чисел, методы для вычисления суммы и произведения 8-ричных чисел.

Помогите с реализацией суммы и произведения! Желательно с помощью массива.

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
#include <iostream>
using namespace std;
 
class Oct1
{
public:
    int per, per2;
    double vtor, vtor2, sum, sum2, proiz, proiz2;
void setDATA()
{
    cout <<"Введите целую часть первого восьмеричного числа: ";
    cin >>per;
    cout << "Введите дробную часть первого восьмеричного числа: ";
    cin >>vtor;
    cout <<endl<<"Введите целую часть второго восьмеричного числа: ";
    cin >>per2;
    cout << "Введите дробную часть второго восьмеричного числа: ";
    cin >>vtor2;
}
 
void Summa()
{
    sum=vtor+vtor2;
    sum2=per+per2;
}
 
void Proiz()
{
    proiz2=vtor*vtor2;
    proiz2=per*per2;
}
 
void showDATA()
{
    cout <<endl<< "Сумма восьмеричных чисел = " <<sum2<<","<<sum<<endl;
    cout << "Произведение восьмеричных чисел = " <<proiz2<<","<<proiz<<endl;
}
};
 
int main()
{
    int per, per2;
    double vtor, vtor2, sum, sum2, proiz, proiz2;
    setlocale (LC_ALL, ".1251");
    Oct1 Obj1, Obj2, Obj3, Obj4;
    Obj1.setDATA();
    Obj2.Summa();
    Obj3.Proiz();
    Obj4.showDATA();
    system("pause");
    return 0;
}

http://www.cyberforum.ru/cpp-beginners/thread896673.html
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
31.05.2014, 11:11
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Операции с восьмеричными системами счисления (C++):

Переводы между системами счисления
Доброго времени суток. Есть такой код, для перевода из одной системы счисления...

Алгоритм перевода между системами счисления
Привет. Есть две функции на Delphi которые позволяют переводить числа из любых...

Преобразование чисел между 2/8/16 системами счисления
Пишу код, который переводит любое натуральное число в 2-ную,8-ную,16-ную...

Арифмитические операции в различных системах счисления
Помогите решить задачу: Определить подпрограммы сложения и умножения целых...

Перевод из двоичной системы счисления в шестнадцатиричную, используя битовые операции
Формулировка задачи: &quot;Разработать программу, которая переводит число из...

9
zss
Модератор
Эксперт С++
6953 / 6515 / 4136
Регистрация: 18.12.2011
Сообщений: 17,184
Завершенные тесты: 1
31.05.2014, 11:47 #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
class Oct
{
private:
   char IntPart[20],FraqPart[20];
public:
    Oct(){IntPart[0]=0;FraqPart[0]=0;}
    Oct(char* a,char *b){strcpy(IntPart,a);strcpy(FraqPart,b);}// конструктор из текстовых строк. Желательно дописать проверку на допустимость символов.
    Oct(const Oct &t){strcpy(IntPart,t.IntPart);strcpy(FraqPart,t.FraqPart);}// копиконструктор
    Oct& operator=(const Oct &t)
   {
          strcpy(IntPart,t.IntPart);
          strcpy(FraqPart,t.FraqPart);
          return *this;
    }
    void setDATA(); // Ввод данных в целую и дробную часть
    Oct Summa(const Oct &t); // складываем *this с t. Результат типа Oct возвращаем
    Oct Proizv(const Oct &t); // умножаем *this на t. Результат типа Oct возвращаем
    void showDATA();
};
int main()
{
   Oct a("123","456"); // 123 - целая часть 456 - дробная
   Oct b(a); // и - копия a
   Oct c=a.Summa(b);
   c.Show();
   return 0; 
}

Вот примерный код суммирования целой части.
Дробную сделаете по аналогии
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Oct Oct::Summa(const Oct &t)
{
    Oct res;
    int perenos=0;
    for(int i=strlen(IntPar)-1;i>=0;i--)
    {
      res.IntPar[i]=(this->IntPat[i]-'0')+(t.IntPar[i]-'0')+perenos;
      if(res.IntPar[i]>7)
      {
          res.IntPar[i]%=8;
          perenos=res.IntPar[i]/8;
      }
      res.IntPar[i]+='0';
    }
    return res;
}
0
Lom1
1 / 1 / 1
Регистрация: 09.05.2014
Сообщений: 79
31.05.2014, 11:59  [ТС] #3
zss, А методы setDATA и showDATA самому описывать? Или так оставить?
Там не указано просто в этих методах что вводится и выводится. Ошибки выдает
0
zss
Модератор
Эксперт С++
6953 / 6515 / 4136
Регистрация: 18.12.2011
Сообщений: 17,184
Завершенные тесты: 1
31.05.2014, 12:01 #4
Цитата Сообщение от Lom1 Посмотреть сообщение
самому описывать?
Они похожи на то, что было. Только учтите, что вводятся и выводятся строки, а не числа.
0
Lom1
1 / 1 / 1
Регистрация: 09.05.2014
Сообщений: 79
31.05.2014, 12:23  [ТС] #5
zss, Вывод почему неправильный?

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
#include <iostream>
using namespace std;
 
class Oct
{
private:
   char IntPart[20],FraqPart[20];
public:
    Oct(){IntPart[0]=0;FraqPart[0]=0;}
    Oct(char* a,char *b){strcpy(IntPart,a);strcpy(FraqPart,b);}// конструктор из текстовых строк. Желательно дописать проверку на допустимость символов.
    Oct(const Oct &t){strcpy(IntPart,t.IntPart);strcpy(FraqPart,t.FraqPart);}// копиконструктор
    Oct& operator=(const Oct &t)
   {
          strcpy(IntPart,t.IntPart);
          strcpy(FraqPart,t.FraqPart);
          return *this;
    }
 
 
 
 
    void setDATA()
    {
    cout <<"Введите целую часть первого восьмеричного числа: ";
    cin >>IntPart;
    cout << "Введите дробную часть первого восьмеричного числа: ";
    cin >>FraqPart;
    cout <<endl<<"Введите целую часть второго восьмеричного числа: ";
    cin >>IntPart;
    cout << "Введите дробную часть второго восьмеричного числа: ";
    cin >>FraqPart;
}
    
    // Ввод данных в целую и дробную часть
    Oct Summa(const Oct &t); // складываем *this с t. Результат типа Oct возвращаем
    Oct Proizv(const Oct &t); // умножаем *this на t. Результат типа Oct возвращаем
 
 
 
    
 
 
    void showDATA();
};
int main()
{
    setlocale (LC_ALL, ".1251");
   Oct a("123","456"); // 123 - целая часть 456 - дробная
   Oct b(a); // и - копия a
   Oct Obj1, Obj2;
   Obj1.setDATA();
   Oct c=a.Summa(b);
   Obj2.showDATA();
   system("pause");
   return 0; 
}
 
Oct Oct::Summa(const Oct &t)
{
    Oct res;
    int perenos=0;
    for(int i=strlen(IntPart)-1;i>=0;i--)
    {
      res.IntPart[i]=(this->IntPart[i]-'0')+(t.IntPart[i]-'0')+perenos;
      if(res.IntPart[i]>7)
      {
          res.IntPart[i]%=8;
          perenos=res.IntPart[i]/8;
      }
      res.IntPart[i]+='0';
      cout <<""<<res.IntPart<<endl;
    }
    return res;
}
0
zss
Модератор
Эксперт С++
6953 / 6515 / 4136
Регистрация: 18.12.2011
Сообщений: 17,184
Завершенные тесты: 1
31.05.2014, 12:36 #6
C++
1
2
3
4
5
6
7
8
9
10
11
void Oct::setDATA()
    {
    cout <<"Введите целую часть восьмеричного числа: ";
    cin >>IntPart;
    cout << "Введите дробную часть восьмеричного числа: ";
    cin >>FraqPart;
}
void Oct::showDATA()
{
    cout <<IntPart<<'.'<<FraqPart;
}
0
Lom1
1 / 1 / 1
Регистрация: 09.05.2014
Сообщений: 79
31.05.2014, 12:58  [ТС] #7
zss, Почему результат выходит один и тот же? Ты написал что целые числа 123 складываются и ответ выводится 246. Зачем? Мы же свои вводим
0
zss
Модератор
Эксперт С++
6953 / 6515 / 4136
Регистрация: 18.12.2011
Сообщений: 17,184
Завершенные тесты: 1
31.05.2014, 13:20 #8
Цитата Сообщение от Lom1 Посмотреть сообщение
целые числа 123 складываются и ответ выводится 246
123+123=246. Что не так?
Может Вы имели ввиду
C++
1
2
3
4
5
6
7
8
9
10
11
int main()
{
    setlocale (LC_ALL, ".1251");
   Oct a("123","456"); // 123 - целая часть 456 - дробная
   Oct b;
   b.setDATA();
   Oct c=a.Summa(b);
   c.showDATA();
   system("pause");
   return 0; 
}
0
Lom1
1 / 1 / 1
Регистрация: 09.05.2014
Сообщений: 79
31.05.2014, 13:21  [ТС] #9
zss, А нужно самим вводить и считать.
0
zss
Модератор
Эксперт С++
6953 / 6515 / 4136
Регистрация: 18.12.2011
Сообщений: 17,184
Завершенные тесты: 1
31.05.2014, 13:25 #10
Можете вводить оба числа
C++
1
2
3
4
5
6
7
8
9
10
11
int main()
{
   setlocale (LC_ALL, ".1251");
   Oct a,b;
   a.setDATA();
   b.setDATA();
   Oct c=a.Summa(b);
   c.showDATA();
   system("pause");
   return 0; 
}
0
31.05.2014, 13:25
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
31.05.2014, 13:25
Привет! Вот еще темы с решениями:

Создать класс для работы с восьмеричными числами
Создать класс Octal для работы с беззнаковыми целыми восьмеричными числами,...

Класс Octal для работы с восьмеричными числами (через массив)
Есть ли у кого реализация класса Octal для работы с восьмеричными числами?...

Выполнение арифметические действи над двоичными, восьмеричными или шестнадцатеричными числами (по блок-схеме)
Написать программу, позволяющую выполнять арифметические действия над...

Программа с системами массового обслуживания
Здравствуйте. Нужна помощь с программой. Не хочет запускаться #include...


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

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

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