init commit

This commit is contained in:
2025-04-13 21:48:15 +03:00
commit 23255e9121
192 changed files with 12200 additions and 0 deletions
+30
View File
@@ -0,0 +1,30 @@
#include <iostream>
class A {
std::string s;
public:
A(const std::string& s) : s(s) {}
~A() { std::cout << s << std::endl; }
};
void f() {
std::string s;
if (!(std::cin >> s)) {
throw 0;
}
A a(s);
f();
}
int main() {
try {
f();
}
catch (...) {
}
return 0;
}
+60
View File
@@ -0,0 +1,60 @@
/*
Некоторая рекурсивная функция func от трех целых аргументов a, b, k (a, b >= 1, k >= 0) определена следующим образом:
func(a, b, k) == a + b при k == 0
func(a, b, k) == a при k > 0, b == 1
func(a, b, k) == f(a, f(a, b - 1, k), k - 1) при k > 0, b > 1
На стандартном потоке ввода подаются тройки чисел: два 64-битных знаковых целых положительных числа a, b и 32-битное целое неотрицательное число k. Для каждой тройки чисел на стандартный поток вывода напечатайте значение описанной выше функции.
Параметры на входе будут таковы, что вычисление завершится за разумное время. Для вычислений достаточно 64-битного целого знакового типа.
Для возврата значения из рекурсии используйте исключения. Выход из рекурсивной функции с помощью явного или неявного return запрещен.
Напишите свой класс (например, Result) для передачи результата вычислений вместе с исключением. Не используйте выбрасывание исключений базовых (например, int) типов.
В комментарии в начале программы опишите, что из себя представляет эта рекурсивная функция.
*/
#include <iostream>
#include <string>
class Result {
long long val;
public:
Result(long long val) : val(val) {}
long long value() const { return val; }
};
// Функция определена по условию. Выкидывает результат в виде exception
void f(long long a, long long b, int k) {
if (k == 0) {
throw Result(a + b);
}
if (b == 1) {
throw Result(a);
}
try {
f(a, b - 1, k);
}
catch (const Result& result) {
f(a, result.value(), k - 1);
}
}
int main() {
long long a, b;
int k;
while (std::cin >> a >> b >> k) {
try {
f(a, b, k);
}
catch (const Result& result) {
std::cout << result.value() << std::endl;
}
}
return 0;
}
+91
View File
@@ -0,0 +1,91 @@
/*
Реализуйте класс S следующим образом:
Класс хранит целое число (типа int).
Число считывается со стандартного потока ввода в конструкторе.
Число выводится на стандартный поток вывода в деструкторе.
Следующая программа:
using namespace std;
void func(S v)
{
if (v) {
func(move(v));
}
}
int main()
{
func(S());
}
считывает последовательность целых чисел и выводит на стандартный поток вывода их сумму.
Если входная последовательность пустая, программа не выводит ничего.
Проверка на переполнение не требуется.
Глобальные переменные, static, mutable запрещены.
Сдаваемый на проверку класс должен подключать необходимые заголовочные файлы.
Examples
Input
1 2 3
Output
6
*/
#include <iostream>
class S {
int v;
int sum;
bool last;
bool first;
public:
S(S&& s) {
int val;
first = false;
if (std::cin >> val) {
v = val;
last = false;
sum = s.sum + v;
} else {
last = true;
sum = s.sum;
}
}
~S() {
if (last && !first) {
std::cout << sum << std::endl;
}
}
S() : v(0), sum(0), last(true), first(true) {
int val;
if (std::cin >> val) {
v = val;
last = false;
sum = v;
}
}
operator bool() const {
return !last;
}
};
// using namespace std;
// void func(S v) {
// if (v) {
// func(move(v));
// }
// }
// int main() {
// func(S());
// }