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

Школьная алгебра - C++

Восстановить пароль Регистрация
 
Melvil
 Аватар для Melvil
47 / 46 / 13
Регистрация: 20.05.2015
Сообщений: 246
06.07.2015, 12:04     Школьная алгебра #1
Добрый день, столкнулся с такой задачей:

Трёхчлен a + bx + сy от двух переменных x и y однозначно определяется коэффициентами a, b и c. Написать программу, которая по заданным a, b и c выводит соответствующий трёхчлен, записанный с использованием алгебраических соглашений:

коэффициент при члене, содержащем переменную, опускается, если его модуль равен единице;
член, коэффициент при котором равен нулю, опускается (кроме случая, когда все коэффициенты равны нулю, тогда трехчлен состоит из одной цифры 0);
знак "+" опускается, если он предшествует отрицательному коэффициенту;
знак "+" опускается, если он стоит в начале выражения (так называемый унарный плюс);
знак умножения между коэффициентом и переменной опускается.
При этом запрещено менять местами члены.

Входные данные

Во входном файле INPUT.TXT через пробел записаны целые коэффициенты a, b и с, каждое из которых не превосходит 30000 по абсолютной величине.

Выходные данные

Выходной файл OUTPUT.TXT должен содержать трехчлен, записанный с использованием алгебраических соглашений.

Можно, конечно, решить используя огромное число операторов if, однако, мне кажется существует более простой способ. К примеру, возможно ли сделать переменную невидимой при выводе ?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.07.2015, 12:04     Школьная алгебра
Посмотрите здесь:

C++ Школьная олимпиада по информатике
С++ и линейная алгебра C++
линейная алгебра C++
C++ Школьная олимпиада
C++ Школьная олимпиада. Задача с кубиками (самая сложная из всех задач)
Экономичное хранение матриц. Матричная алгебра C++
Школьная задача C++
C++ Алгебра логики

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Mr.X
Эксперт С++
 Аватар для Mr.X
2807 / 1583 / 248
Регистрация: 03.05.2010
Сообщений: 3,686
06.07.2015, 15:16     Школьная алгебра #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
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
/////////////////////////////////////////////////////////////////////////////////////////
//Трёхчлен a + bx + сy от двух переменных x и y однозначно определяется коэффициентами a, b и c. 
//Написать программу, которая по заданным a, b и c выводит соответствующий трёхчлен, 
//записанный с использованием алгебраических соглашений:
//
//коэффициент при члене, содержащем переменную, опускается, если его модуль равен единице;
//член, коэффициент при котором равен нулю, опускается (кроме случая, когда все коэффициенты 
//равны нулю, тогда трехчлен состоит из одной цифры 0);
//знак "+" опускается, если он предшествует отрицательному коэффициенту;
//знак "+" опускается, если он стоит в начале выражения (так называемый унарный плюс);
//знак умножения между коэффициентом и переменной опускается.
//При этом запрещено менять местами члены.
//
//Входные данные
//
//Во входном файле INPUT.TXT через пробел записаны целые коэффициенты a, b и с, каждое 
//из которых не превосходит 30000 по абсолютной величине.
//
//Выходные данные
//
//Выходной файл OUTPUT.TXT должен содержать трехчлен, записанный с использованием алгебраических соглашений.
/////////////////////////////////////////////////////////////////////////////////////////
#include <cmath>
#include <cctype>
#include <cstdlib>
#include <ctime>
#include <iostream>
#include <sstream>
#include <string>
/////////////////////////////////////////////////////////////////////////////////////////
typedef long long       T_int;
typedef std::string     T_str;
/////////////////////////////////////////////////////////////////////////////////////////
T_str   const_to_str( T_int     val )
{
    return  val
                ?   std::to_string( val )
                :   "";
}
/////////////////////////////////////////////////////////////////////////////////////////
T_str   term_with_coef_and_var_symb_to_str
    (
        T_int   coef,
        char    var_symb
    )
{
    std::ostringstream  sout;
 
    if( coef )
    {
        sout    <<  (
                        coef > 0
                            ?   " + "
                            :   " - "
                    )
 
                <<  (
                        abs( coef )     ==  1
                            ?   ""
                            :   std::to_string  (
                                                    abs( coef )
                                                )
                    )
 
                <<  var_symb;
    }//if
 
    return  sout.str();
}
/////////////////////////////////////////////////////////////////////////////////////////
T_str   polynom_to_string
    (
        T_int   constant,
        T_int   coef_X,
        T_int   coef_Y
    )
{
    if  (
                constant    ==  0
            &&  coef_X      ==  0
            &&  coef_Y      ==  0
        )
    {
        return  "0";
    }
 
    T_str   res     =       const_to_str                        ( constant          )
                        +   term_with_coef_and_var_symb_to_str  ( coef_X,     'x'   )
                        +   term_with_coef_and_var_symb_to_str  ( coef_Y,     'y'   );
 
    while   (
                isspace
                    (
                        res.front()
                    )
            )
    {
        res.erase( 0, 1 );
    }
 
    if  (
            res.front() ==  '+'
        )
    {
        res.erase( 0, 1 );
    }
 
    return  res;
}
/////////////////////////////////////////////////////////////////////////////////////////
int     get_rand_coef()
{
    return  rand() % 2
                ?   0
                :   rand() % 5 - 2;
}
/////////////////////////////////////////////////////////////////////////////////////////
int     main()
{
    srand(unsigned(time(0)));
 
    for(;;)
    {
        T_int   a   =   get_rand_coef();
        T_int   b   =   get_rand_coef();
        T_int   c   =   get_rand_coef();
 
 
        std::cout   <<  a
                    <<  '\t'
                    <<  b
                    <<  '\t'
                    <<  c
                    <<  std::endl;
 
        std::cout   <<  polynom_to_string
                            (
                                a,
                                b,
                                c
                            )
 
                    <<  std::endl;
 
        system("pause");
    }//for
}
Yandex
Объявления
06.07.2015, 15:16     Школьная алгебра
Ответ Создать тему
Опции темы

Текущее время: 00:29. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru