// Вычисление выражения с логарифмическими функциями
// https://toster.ru/q/588235
#include <iostream>
#include <cmath>
#include <string>
#include <regex>
using namespace std;
class logarithm
{
string rawstring, calculated_string;
int log_count = 0, lg_count = 0, ln_count = 0;
double calc_log(string log_type, string log_base, string log_arg);
public:
logarithm(string str);
void print_calculated_string();
void print_log_count();
};
logarithm::logarithm(string str)
{
rawstring = str;
// Регулярное выражение для поиска.
regex e(R"((l(?:[ng]|og(\d+)))\((\d+)\))");
smatch m; // Результаты поиска.
double log; // Результаты вычисления.
while(regex_search(str, m, e)) {
log = calc_log(m[1], m[2], m[3]);
calculated_string += m.prefix().str() + to_string(log);
str = m.suffix().str();
}
calculated_string += str;
}
double logarithm::calc_log(string log_type, string log_base, string log_arg)
{
if(log_type == "lg") {
lg_count++;
return log10(stoi(log_arg));
}
else if(log_type == "ln") {
ln_count++;
return log(stoi(log_arg));
}
else if(log_type.substr(0, 3) == "log") {
log_count++;
return log2(stoi(log_arg))/log2(stoi(log_base));
}
}
void logarithm::print_calculated_string()
{
cout << calculated_string;
}
void logarithm::print_log_count()
{
cout << "Натуральных логарифмов: " << ln_count << endl;
cout << "Десятичных логарифмов: " << lg_count << endl;
cout << "Произвольных логарифмов: " << log_count << endl;
}
int main()
{
string str;
cout << "Введите математическое выражение с логарифмами: ";
getline(cin, str);
logarithm log(str);
log.print_log_count();
log.print_calculated_string();
return 0;
}
// Вывод в консоль фигуры из цифр.
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main()
{
vector<int> v(4);
vector<int>::iterator result;
int M, N;
M = 5;
N = 6;
for (int i = 1; i <= M; i++) {
for (int j = 1; j <= N; j++) {
v.clear();
v.push_back(i);
v.push_back(M + 1 - i);
v.push_back(j);
v.push_back(N + 1 - j);
result = min_element(begin(v), end(v));
cout << *result;
}
cout << '\n';
}
}