Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <cstdlib>
- #include <vector>
- #include <cmath>
- using namespace std;
- // task1
- void findRoot(double val, double &res1, double &res2, double &res3) {
- if (val < 0) {
- res1 = res2 = res3 = -1;
- return;
- }
- res1 = pow(val, 1.0/2);
- res2 = pow(val, 1.0/3);
- res3 = pow(val, 1.0/4);
- }
- void task1()
- {
- double val;
- double res1, res2, res3;
- cout << "Input val:" << endl;
- cin >> val;
- findRoot(val, res1, res2, res3);
- cout << val << " " << res1 << " " << res2 << " " << res3 << endl;
- }
- // task2
- int power(int n, int k) {
- if (k == 0)
- return 1;
- else if (k % 2)
- return n * power(n, k - 1);
- else
- return power(n * n, k / 2);
- }
- void task2() {
- int n, k;
- cout << "Input n: "; cin >> n;
- cout << "Input k: "; cin >> k;
- if (k < 0)
- cout << "k < 0";
- else
- cout << "n^k = " << power(n, k);
- cout << endl;
- }
- // task4
- double eval(const string &str, const vector<double> &args) {
- double acc = 0, x;
- int arg = 0;
- enum { ADD, SUB, MUL, DIV, NOP, ERR } op = NOP;
- for (int i = 0; i < str.size(); i++) {
- switch (str[i]) {
- case 'i': case 'd':
- if (arg >= args.size()) {
- cout << "Need more args";
- exit(1);
- }
- x = args[arg++];
- switch (op) {
- case ADD: acc += x; break;
- case SUB: acc -= x; break;
- case MUL: acc *= x; break;
- case DIV: acc /= x; break;
- case NOP: acc = x; break;
- case ERR: cout << "Syntax error";
- exit(1); }
- op = ERR; break;
- case '+': op = ADD; break;
- case '-': op = SUB; break;
- case '/': op = DIV; break;
- case '*': op = MUL; break;
- default : op = ERR; }
- }
- return acc;
- }
- void task4() {
- string expr, line;
- vector<double> args;
- cout << "Input expr: "; getline(cin, expr);
- cout << "Input args: ";
- while (getline(cin, line), !line.empty())
- args.push_back( atof(line.c_str()) );
- cout << "Result: " << eval(expr, args) << endl;
- }
- // task5
- template <typename T>
- const T& max_(const T &a, const T &b) {
- return a > b ? a : b;
- }
- template <typename T>
- const T& max_(const T &a, const T &b, const T &c) {
- return max(max(a, b), c);
- }
- void task5() {
- int a, b, c;
- cout << "Input a: "; cin >> a;
- cout << "Input b: "; cin >> b;
- cout << "Input c: "; cin >> c;
- cout << "Max: " << max_(a, b, c);
- }
- int main() {
- int i;
- do {
- cout << "Input task number (1-5):" << endl;
- cin >> i;
- switch(i) {
- case 1:
- task1(); break;
- case 2:
- task2(); break;
- case 3:
- //task3(); break;
- case 4:
- task4(); break;
- case 5:
- task5(); break;
- case 0:
- cout << "Program is done" << endl; break;
- default:
- cout << "Invalid option" << endl; }
- } while(i != 0);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement