Форум программистов, компьютерный форум CyberForum.ru

калькулятор с++ Обыкновенные дроби в двух формах: - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Вычислить значение выражения . Число ввести с клавиатуры http://www.cyberforum.ru/cpp-beginners/thread769159.html
Вычислить значение выражения (9+(9+...+(9+9^(1/2))...)^(1/(m-1)))^(1/m) . Число ввести с клавиатуры.
C++ Перегрузка присваивания для стека Пытаюсь написать перегрузку присваивания для стека. Как видно из кода ниже, я сначала с помошью конструктора копирования создаю временный стек, идентичный исходному, затем возвращаю его. Вроде как всё остальное, в том числе конструктор копирования, написано правильно.В процессе работы программы делаю вот так: s2 = s1, где s2 - пустой, а s1 - непустой, после этой операции s2 так и остаётся пустым.... http://www.cyberforum.ru/cpp-beginners/thread769153.html
Написать программу на языке Си в которой C++
1. Описать логическую функцию, которая возвращает значение true, если между буквами ‘a’ и ‘z’ нет иных символов, кроме строчных латинских букв, и значение false иначе. помогите пожалуйста, на экзамен надо:)
Игра "Жизнь" и торообразный массив C++
Подскажите, как можно реализовать торообразный (круговой) массив для игры "Жизнь". есть только примитивный алгоритм, без учета перехода границ: проверка клетки: if(universe) count++; if(universe) count++; if(universe) count++; ifuniverse) count++; if(universe) count++;
C++ Программа запрашивает список чисел у пользователя... http://www.cyberforum.ru/cpp-beginners/thread769117.html
Программа запрашивает список чисел у пользователя. Если пользователь вводит некорректное значение - программа спрашивает завершить ввод или исправить ошибку и продолжить. Если пользователь выбирает завершить ввод, программа выводит на экран все простые числа из списка введенных чисел. Нужна помощь в написании..
C++ Помогите please cоставить программу, в которой описывается структура из полей: Название товара, Цена товара, Процентная ставка кредита. Помогите please cоставить программу, в которой описывается структура из полей: Название товара, Цена товара, Процентная ставка кредита. Организовать ввод двух структурных переменных, вывод каждой структуры на экран и вывести на экран названия и цены товаров, для которых процентная ставка кредита меньше заданной (если таких товаров нет, вывести сообщение об этом). подробнее

Показать сообщение отдельно
samich
1 / 1 / 0
Регистрация: 20.05.2012
Сообщений: 53
26.01.2013, 23:38  [ТС]     калькулятор с++ Обыкновенные дроби в двух формах:
помогите найти ошибку
в данном случае не работаем сумма, разность умножение и деление выдает всегда 1
вводить дробь нужно через пробел. получается к примеру 4 7 это 4/7
что странно запускали в другой студии в 12 там программа работает как и положенно, у меня в 10 вставляю без разницы пусть то просто код или срр файл программа не работает полностью где то ошибка. то ли у меня со студией что то не так. сохраняли проект в 12 и на том компе открывали просто файл ехе работает у меня пишет ошибку. не является приложение вин 32
вот сам код если у кого работает то скажите хотя бы что работает в какой студии запускали и какая у вас винда.
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
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
#include <iostream>
#include <cmath>
#include <fstream>
#include <string>
 
class Rational
{
   private:
      int a, b;
      void reduce();
   public:
      Rational();
      Rational( int a0, int b0 );
      explicit Rational( const Rational &r );
      Rational& operator= ( const Rational &r );
      void init( int a0, int b0 );
      friend std::ostream& operator<< ( std::ostream &os, const Rational &rat );
      friend std::istream& operator>> ( std::istream &is, Rational &rat );
      Rational& operator+ ( Rational &r );
      Rational& operator- ( Rational &r );
      Rational& operator* ( Rational &r );
      Rational& operator/ ( Rational &r );
      Rational& operator^ ( int );
      void swap();
      friend void toLog( std::ifstream &f, std::string &msg, Rational &rat );
      void exchangeSign();
};
 
void Rational::reduce()
{
   int min, sign = 1;
   if ( a < 0 && b < 0 )
   {
       a = -a;
       b = -b;
   }
   else if ( a < 0 )
   {
       sign = -1;
       a = -a;
   }
   else if ( b < 0 )
   {
       sign = -1;
       b = -b;
   }
   min = ( a < b ) ? ( a ) : ( b );
   for( int i = min; i >= 2; i-- )
      if ( a % i == 0 && b % i == 0 )
      {
         a /= i;
         b /= i;
      }
   a *= sign;
}
 
Rational::Rational( int a0, int b0 )
{
   a = a0;
   b = b0;
   reduce();
}
 
Rational::Rational()
{
   a = 0;
   b = 1;
}
 
Rational::Rational( const Rational &r )
{
   a = r.a;
    b = r.b;
   reduce();
}
 
void Rational::init( int a0, int b0 )
{
   a = a0;
   b = b0;
   reduce();
}
 
std::ostream& operator<< ( std::ostream &os, const Rational &rat )
{
    if ( rat.b == 1 || rat.a == 0 )
        os << rat.a;
    else os << rat.a << "/" << rat.b;
    return os;
}
 
std::istream& operator>> ( std::istream &is, Rational &rat )
{
    is >> rat.a >> rat.b;
    return is;
}
 
Rational& Rational::operator= ( const Rational &r )
{
    a = r.a;
    b = r.b;
    reduce();
    return *this;
}
 
Rational& Rational::operator+( Rational &r )
{
    Rational temp;
    temp.a = r.a * b + a * r.b;
    temp.b = r.b * b;
    temp.reduce();
    return temp;
}
 
Rational& Rational::operator- ( Rational &r )
{
    Rational temp;
    temp.a = a * r.b - b * r.a;
    temp.b = b * r.b;
    temp.reduce();
    return temp;
}
 
Rational& Rational::operator* ( Rational &r )
{
    Rational temp;
    temp.a = a * r.a;
    temp.b = b * r.b;
    temp.reduce();
    return temp;
}
 
Rational& Rational::operator/ ( Rational &r )
{
    Rational temp;
    temp.a = a * r.b;
    temp.b = b * r.a;
    temp.reduce();
    return temp;
}
 
Rational& Rational::operator^ ( int deg )
{
    Rational temp;
    temp.a = a;
    temp.b = b;
    for( int i = 1; i < deg; ++i )
    {
        temp.a *= a;
        temp.b *= b;
    }
    //temp.reduce();
    return temp;
}
 
void Rational::swap()
{
    int temp = a;
    a = b;
    b = temp;
}
 
void Rational::exchangeSign()
{
    if ( a * b < 0 )
    {
        a = abs( a ); b = abs( b );
    }
    else
    {
        a = -a;
    }
}
 
void toLog( std::fstream &f, std::string &msg, Rational &rat )
{
    f << "=====================================================" << std::endl;
    f << msg << " => " << rat << std::endl;
    f << "=====================================================" << std::endl;
}
 
void printLogFile( std::fstream &f )
{
    f.close();
    f.open( "log.txt" );
    std::string s;
    while ( std::getline( f, s ) )
        std::cout << s << std::endl;
    std::cout << std::endl;
    f.close();
}
 
void menu()
{
    std::cout << std::endl;
    std::cout << "1) Ввод двух дробей;" << std::endl;
    std::cout << "2) Сумма;" << std::endl;
    std::cout << "3) Разность;" << std::endl;
    std::cout << "4) Произведение;" << std::endl;
    std::cout << "5) Деление первой на вторую;" << std::endl;
    std::cout << "6) Возведение двух дробей в степень;" << std::endl;
    std::cout << "7) Обмен местами числителей и занменателей двух дробей;" << std::endl;
    std::cout << "8) Смена знака у двух дробей;" << std::endl;
    std::cout << "9) Просмотреть лог - файл;" << std::endl;
    std::cout << "0) Выход;" << std::endl;
    std::cout << std::endl;
}
 
int main()
{
    setlocale( 0, "" );
 
    std::fstream logFile( "log.txt", std::ios::app );
 
    Rational first, second, third( 0, 0 );
   
    int choice;
 
    do
    {
        menu();
        std::cout << "Ваш выбор : ";
        std::cin >> choice;
 
        switch ( choice )
        {
            case 1 : {
                        std::cout << "Введите первую дробь : "; std::cin >> first;
                        toLog( logFile, std::string( "Ввод первой дроби" ), first );
                        std::cout << "Введите вторую дробь : "; std::cin >> second;
                        toLog( logFile, std::string( "Ввод второй дроби" ), second );
                     } break;
            case 2 : {
                        third = first + second;
                        std::cout << "Сумма : " << third << std::endl;
                        toLog( logFile, std::string( "Сумма двух дробей" ), third );
                     } break;
            case 3 : {
                        third = first - second;
                        std::cout << "Разность : " << third << std::endl;
                        toLog( logFile, std::string( "Разность двух дробей" ), third );
                     } break;
            case 5 : {
                        third = first / second;
                        std::cout << "Деление : " << third << std::endl;
                        toLog( logFile, std::string( "Деление первой дроби на вторую" ), third );
                     } break;
            case 4 : {
                        third = first * second;
                        std::cout << "Произведение : " << third << std::endl;
                        toLog( logFile, std::string( "Произведение двух дробей" ), third );
                     } break;
            case 6 : {
                        int deg;
                        std::cout << "Введите степень : ";
                        std::cin >> deg;
                        first = first ^ deg;
                        second = second ^ deg;
 
                        std::cout << "Возведение первой в степень : " << first << std::endl;
                        std::cout << "Возведение второй в степень : " << second << std::endl;
                        toLog( logFile, std::string( "Возведение в степень первой дроби" ), first );
                        toLog( logFile, std::string( "Возведение в степень второй дроби" ), second );
                     } break;
            case 7 : {
                        first.swap();
                        second.swap();
                        std::cout << "Обмен местами числителя и знаменателя : " << first << " " << second << std::endl;
                        toLog( logFile, std::string( "Обмен первой дроби" ), first );
                        toLog( logFile, std::string( "Обмен второй дроби" ), second );
                     } break;
            case 8 : {
                        first.exchangeSign();
                        second.exchangeSign();
                        std::cout << "Обмен знаков : " << first << " " << second << std::endl;
                        toLog( logFile, std::string( "Обмен у первой дроби" ), first );
                        toLog( logFile, std::string( "Обмен у второй дроби" ), second );
                     } break;
            case 9 : {
                        printLogFile( logFile );
                        logFile.open( "log.txt", std::ios::app );
                     } break;
        }
    }
    while ( choice != 0 );
   
 
    return 0;
}
Добавлено через 1 минуту
и помогите с комментариями хотя бы для первой половины. во второй более менее все понятно
 
Текущее время: 12:06. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru