Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.73/11: Рейтинг темы: голосов - 11, средняя оценка - 4.73
0 / 0 / 0
Регистрация: 19.01.2016
Сообщений: 8
1

Вывод unsigned char

06.12.2017, 15:49. Показов 1998. Ответов 4
Метки c, cout (Все метки)

Author24 — интернет-сервис помощи студентам
вот задание:
Создать абстрактный базовый класс Pair с виртуальными арифметическими операциями. Создать производные классы Money и Fraction .
вот код:
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
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
// пр2.cpp : Defines the entry point for the console application.
//
 
#include "stdafx.h"
#include <iostream>
 
using namespace std;
 
class Pair {
public:
    virtual void input() = 0;
    virtual void output() = 0;
    virtual void sum(Pair*, Pair*) = 0;
    virtual void sub(Pair*, Pair*) = 0;
//  virtual void mul(Pair*, Pair*) = 0;
//  virtual void del(Pair*, Pair*) = 0;
    virtual ~Pair() {};
};
 
class Money : public Pair {
private:
    long int rub;
    unsigned char cop;
    
    void checkOver()
    {
        rub += cop / 100 ;
        cop %= 100;
    }
public:
    void input()
    {
        cout << "Введите кол-во рублей : "; cin >> rub;
        cout << "Введите кол-во копеек : "; cin >> cop;
        this->checkOver();
        this->output();
    }
    void output()
    {
        cout << rub <<" руб. "<< cop << " коп.";
    }
 
    void sum(Pair *s, Pair *t) 
    {
        Money* summ = dynamic_cast<Money*>(s);
        Money* tmp = dynamic_cast<Money*>(t);
        tmp->rub = rub + summ->rub;
        tmp->cop = cop + summ->cop;
        tmp->checkOver();
    }
 
    void sub(Pair *s, Pair *t)
    {
        Money* subb = dynamic_cast<Money*>(s);
        Money* tmp = dynamic_cast<Money*>(t);
        tmp->rub = rub - subb->rub;
        tmp->cop = cop - subb->cop;
        tmp->checkOver();
    }
 
    /*void mul(Pair *m, Pair *t)
    {
        Money* mull = dynamic_cast<Money*>(m);
        Money* tmp = dynamic_cast<Money*>(t);
        float fc1, fc2, fc3;
        fc1 = (float)(rub * 100 + cop);
        fc2 = (float)(mull->rub * 100 + mull ->cop);
        fc3 = (float)fc1*fc2;
        tmp->rub = (int)fc2;
        tmp->cop = (int)((fc2 - (int)fc2) * 100);
    }*/
};
 
class Fraction : public Pair {
private:
    long num;
    unsigned short den;
public:
    void input() 
    {
        cout << "Введите числитель : "; cin >> num;
        do {
            cout << "Введите знаменатель : "; 
            cin >> den;
            if (den < 0)
                cout << "Знаменатель должен быть больше 0!!\n";
        } while (den < 0);
    }
 
    void output() 
    {
        cout << "Ваша дробь: " << num << "/" << den;
    }
 
    void sum(Pair *s, Pair *t)
    {
        Fraction* summ = dynamic_cast<Fraction*>(s);
        Fraction* tmp = dynamic_cast<Fraction*>(t);
        tmp->num = num*summ->den + den*summ->num;
        tmp->den = den*summ->den;
    }
 
    void sub(Pair *s, Pair *t)
    {
        Fraction* subb = dynamic_cast<Fraction*>(s);
        Fraction* tmp = dynamic_cast<Fraction*>(t);
        tmp->num = num*subb->den - den*subb->num;
        tmp->den = den*subb->den;
    }
 
    //void mul(Pair *m, Pair *t)
    //{
    //  Fraction* mull = dynamic_cast<Fraction*>(m);
    //  Fraction* tmp = dynamic_cast<Fraction*>(t);
    //  tmp->num = num*mull->num;
    //  tmp->den = den*mull->den;
    //}
 
    //void del(Pair *d, Pair *t)
    //{
    //  Fraction* dell = dynamic_cast<Fraction*>(d);
    //  Fraction* tmp = dynamic_cast<Fraction*>(t);
    //  tmp->num = num*dell->den;
    //  tmp->den = den*dell->num;
    //}
};
int main()
{
    setlocale(LC_ALL, "Russian");
    Pair *pr1, *pr2, *pr3;
    int i;
 
    cout << "С чем вы хотите работать?\n";
    cout << "1 - Money \n";
    cout << "2 - Fraction \n";
    cin >> i;
    if (i == 1) 
    {
        pr1 = new Money();
        pr3 = new Money();
        pr1->input();
        pr2 = new Money();
        pr2->input();
    }
    system("pause");
    return 0;
}
Конкретно проблема такая я ввожу
C++
1
2
3
4
5
6
7
void input()
    {
        cout << "Введите кол-во рублей : "; cin >> rub;
        cout << "Введите кол-во копеек : "; cin >> cop;
        this->checkOver();
        this->output();
    }
например rub=123, cop=456
но когда вывожу через
C++
1
this->output();
у меня выводит что rub =123, cop = 4
помогите найти ошибку сам уже час не могу найти
также происходит когда
C++
1
this->checkOver();
не используется
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
06.12.2017, 15:49
Ответы с готовыми решениями:

Ввод/вывод чисел посредством unsigned char
Здравствуйте.Столкнулся с проблемой. Как правильно вводить/выводить unsigned char? ...

Приведение типов unsigned char[2] to unsigned char [64]
Добрый день! Подскажите пожалуйста, как поступить. Есть простая функция main int main() { ...

Преобразование unsigned short в unsigned char
Как можно преобразовать unsigned short в unsigned char ?

Char unsigned char signed char длинна Кааак
Здравствуйте. char l = {0,0}; l = 0xff; Почему, меня, компилятор не посылает куда...

4
Модератор
Эксперт С++
13507 / 10757 / 6412
Регистрация: 18.12.2011
Сообщений: 28,712
06.12.2017, 16:35 2
Цитата Сообщение от MrHunfer Посмотреть сообщение
cout << "Введите кол-во копеек : "; cin >> cop;
Вы что, копейки собираетесь вводить буквой, а не числом?
C++
1
2
3
4
cout << "Введите кол-во копеек : "; 
unsigned int t;
cin >> t;
c=(unsigned char>t;
и при выводе тоже надо приводить к int.

А в целом, Вы неправильно построили базовый класс: какой же он пара, если не содержит двух чисел.
0
0 / 0 / 0
Регистрация: 19.01.2016
Сообщений: 8
07.12.2017, 14:58  [ТС] 3
я немного исправил код
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
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
// пр2.cpp : Defines the entry point for the console application.
//
 
#include "stdafx.h"
#include <iostream>
 
using namespace std;
 
class Pair {
protected:
    int first, second;
public:
    virtual void input() = 0;
    virtual void output() = 0;
    virtual void sum(Pair*, Pair*) = 0;
    virtual void sub(Pair*, Pair*) = 0;
//  virtual void mul(Pair*, Pair*) = 0;
//  virtual void del(Pair*, Pair*) = 0;
    virtual ~Pair() {};
};
 
class Money : public Pair {
private:
    int rub = first;
    int cop = second;   
    void checkOver()
    {
        rub += cop / 100 ;
        cop %= 100;
    }
public:
    void input()
    {
        cout << "Введите кол-во рублей : "; cin >> rub;
        cout << "Введите кол-во копеек : "; cin >> cop;
        this->checkOver();
    }
    void output()
    {
        cout << rub <<" руб. "<< cop << " коп.\n";
    }
 
    void sum(Pair *s, Pair *t) 
    {
        Money* summ = dynamic_cast<Money*>(s);
        Money* tmp = dynamic_cast<Money*>(t);
        tmp->rub = rub + summ->rub;
        tmp->cop = cop + summ->cop;
        tmp->checkOver();
    }
 
    void sub(Pair *s, Pair *t)
    {
        Money* subb = dynamic_cast<Money*>(s);
        Money* tmp = dynamic_cast<Money*>(t);
        tmp->rub = rub - subb->rub;
        tmp->cop = cop - subb->cop;
        tmp->checkOver();
    }
 
    /*void mul(Pair *m, Pair *t)
    {
        Money* mull = dynamic_cast<Money*>(m);
        Money* tmp = dynamic_cast<Money*>(t);
        float fc1, fc2, fc3;
        fc1 = (float)(rub * 100 + cop);
        fc2 = (float)(mull->rub * 100 + mull ->cop);
        fc3 = (float)fc1*fc2;
        tmp->rub = (int)fc2;
        tmp->cop = (int)((fc2 - (int)fc2) * 100);
    }*/
};
 
class Fraction : public Pair {
private:
    long num;
    unsigned short den;
public:
    void input() 
    {
        cout << "Введите числитель : "; cin >> num;
        do {
            cout << "Введите знаменатель : "; 
            cin >> den;
            if (den < 0)
                cout << "Знаменатель должен быть больше 0!!\n";
        } while (den < 0);
    }
 
    void output() 
    {
        cout << "Ваша дробь: " << num << "/" << den;
    }
 
    void sum(Pair *s, Pair *t)
    {
        Fraction* summ = dynamic_cast<Fraction*>(s);
        Fraction* tmp = dynamic_cast<Fraction*>(t);
        tmp->num = num*summ->den + den*summ->num;
        tmp->den = den*summ->den;
    }
 
    void sub(Pair *s, Pair *t)
    {
        Fraction* subb = dynamic_cast<Fraction*>(s);
        Fraction* tmp = dynamic_cast<Fraction*>(t);
        tmp->num = num*subb->den - den*subb->num;
        tmp->den = den*subb->den;
    }
 
    //void mul(Pair *m, Pair *t)
    //{
    //  Fraction* mull = dynamic_cast<Fraction*>(m);
    //  Fraction* tmp = dynamic_cast<Fraction*>(t);
    //  tmp->num = num*mull->num;
    //  tmp->den = den*mull->den;
    //}
 
    //void del(Pair *d, Pair *t)
    //{
    //  Fraction* dell = dynamic_cast<Fraction*>(d);
    //  Fraction* tmp = dynamic_cast<Fraction*>(t);
    //  tmp->num = num*dell->den;
    //  tmp->den = den*dell->num;
    //}
};
int main()
{
    setlocale(LC_ALL, "Russian");
    Pair *pr1, *pr2, *pr3;
    int i;
 
    cout << "С чем вы хотите работать?\n";
    cout << "1 - Money \n";
    cout << "2 - Fraction \n";
    cin >> i;
    if (i == 1) 
    {
        pr1 = new Money();
        pr2 = new Money();
        pr3 = new Money();
        pr1->input();       
        pr2->input();
    }
    cout << " 1 - Сложение;" << endl;
    cout << " 2 - Вычитание;" << endl;
    cout << " 3 - Умножение" << endl;
    cin >> i;
    switch (i)
    {
    case 1:
        cout << "Сложение: ";
        pr1->sum(pr2, pr3);
        pr3->output();
        break;
    case 2:
        cout << "Вычитание: ";
        pr1->sub(pr2, pr3);
        pr3->output();
        break;
    }
    system("pause");
    return 0;
}
но в строчке 158 пишет ошибку
Ошибка C4703 используется потенциально неинициализированная локальная переменная-указатель "pr1"
Ошибка C4703 используется потенциально неинициализированная локальная переменная-указатель "pr2"
Ошибка C4703 используется потенциально неинициализированная локальная переменная-указатель "pr3"
0
Модератор
Эксперт С++
13507 / 10757 / 6412
Регистрация: 18.12.2011
Сообщений: 28,712
07.12.2017, 16:42 4
Ну так строка 137
Цитата Сообщение от MrHunfer Посмотреть сообщение
C++
1
2
3
if (i == 1)
{
   pr1 = new Money();
т.е при i=1 указатели инициализируются,
а для остальных значений - нет
0
0 / 0 / 0
Регистрация: 19.01.2016
Сообщений: 8
08.12.2017, 10:30  [ТС] 5
При I=1 инициализируются класс Money а при 2 fraction при всех остальных значениях будет повторятся ввод
Я это еще не дописал просто
0
08.12.2017, 10:30
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
08.12.2017, 10:30
Помогаю со студенческими работами здесь

Сделать преобразование unsigned char в char, а затем типу int
Здраствуйте, есть вопрос: Число представлено двумя полями: типа long для рублей и unsigned char -...

Std::fstream почему функция write принимает параметр char* а не unsigned char* (аля byte*) ?
Ну собственно сабж... std::fstream fs; fs.write((char*)..) В случае бинарного потока я допустим...

Неверная конверсия из char* в unsigned char*
Здравствуйте. Почему-то ловлю ошибку, гласящую о том, что не удалась конверсия из char* в *unsigned...

const char и unsigned char
Всем привет. Такое дело. Это даже проблемой не назовешь, но суть такая. Мне нужно записать const...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru