Пример программной реализации игры

При разработке данной игровой программы были применены виртуальные функции и абстрактные классы.

 

#include <stdlib.h>

#include <iostream.h>

class Heap {

private:

int size;

public:

Heap(int s): size(s) {};

  int get(int n = 0) { size -= n; return(size); };

};

class Gambler {

protected:

Heap* heap;

const int limit;

const char* name;

public:

Gambler(Heap& h, int l): limit(l) { heap = &h; };

virtual int move() = 0;

int query();

};

class Man: public Gambler {

public:

Man(Heap& h, int l, char* n): Gambler(h, l) { name = n; };

virtual int move();

};

class Pen: public Gambler {

public:

Pen(Heap& h, int l, char* n): Gambler(h, l) { name = n; };

virtual int move();

};

int Gambler::query() {

cout << "Heap = " << heap->get() << " " << name << " > ";

return(heap->get());

}

int Man::move() {

int g;

cin >> g;

if((g < 1) || (g > (heap->get())) || (g > limit))

g = 1;

return(heap->get(g));

}

int Pen::move() {

int rest = 0;

int n = 0;

int h;

if((h = heap->get()) == 1)

h = heap->get(1);

while((rest = (n*limit + n + 1)) < h)

n++;

if((rest > h) || (rest == h))

rest = (n - 1)*limit + n;

heap->get(h - rest);

cout << h - rest << "\n";

return(heap->get());

}

int main(int argc, char* argv[]) {

int i = 0;

Heap h(atoi(argv[1]));

Gambler* g[] = { new Pen(h, atoi(argv[2]), "Pen"),

            new Man(h, atoi(argv[2]), "Man")

          };

while(g[i]->query()!= 0) {

g[i]->move();

if(++i > 1)

i = 0;

}

cout << "Winner\n";

delete g[0];

delete g[1];

return(0);

}

 


 


Варианты лабораторной работы по теме «Наследование»

Вариант 1++

Разработать объектно-ориентированную программу для вычисления длины отрезка прямой линии, который задан целочисленными координатами своих концов на плоскости. Координаты концов отрезка должны передаваться программе парами целых чисел через 2 аргумента командной строки ее вызова. При этом первое число в каждой паре должно обозначать координату по оси X, а второе – по оси Y. Для разделения координат в каждой паре должен использоваться символ точка с запятой. Результат вычислений длины отрезка должен отображаться через поток стандартного вывода. Программная поддержка указанных вычислений должна быть основана на разработке контейнерного класса отрезка прямой линии, компонентными данными которого являются объекты класса точек его концов, а компонентный метод обеспечивает вычисление длины отрезка.

Вариант 2++

Разработать объектно-ориентированную программу для вычисления длины отрезка прямой линии, который задан целочисленными координатами своих концов в пространстве. Координаты концов отрезка должны передаваться программе тройками целых чисел через 2 аргумента командной строки ее вызова. При этом первое число в каждой тройке должно обозначать координату по оси X, второе – по оси Y, третье – по оси Z. Для разделения координат в каждой тройке должен использоваться символ точка с запятой. Результат вычислений длины отрезка должен отображаться через поток стандартного вывода. Программная поддержка указанных вычислений должна быть основана на разработке контейнерного класса отрезка прямой линии, компонентными данными которого являются объекты класса точек его концов, а компонентный метод обеспечивает вычисление длины отрезка.

Вариант 3++

Разработать объектно-ориентированную программу для построения "золотого сечения" отрезка прямой линии заданной длины. Длина отрезка должна передаваться программе целым числом через аргумент командной строки ее вызова. Результат построений "золотого сечения" отрезка заданной длины должен отображаться через поток стандартного вывода. Программная поддержка указанных построений должна быть основана на использовании механизма наследования классов: базового класса – отрезок и производного — "золотое сечение" отрезка с методом вычисления этого сечения.

Вариант 4++

Разработать объектно-ориентированную программу вычисления периметра треугольника на плоскости, который задан координатами 3-х своих вершин. Координаты вершин должны передаваться программе парами целых чисел через 3 аргумента командной строки ее вызова. При этом первое число в каждой паре должно обозначать координату вершины по оси Х, а второе по оси Y. Для разделения координат в каждой паре должен использоваться символ точки с запятой. Результаты вычислений периметра треугольника должны отображаться через поток стандартного вывода. Программная реализация указанных вычислений должна быть основана на разработке контейнерного класса треугольника, компонентными данными которого являются объекты класса вершин, компонентные методы обеспечивают вычисление его периметра.

Вариант 5++

Разработать объектно-ориентированную программу вычисления площади треугольника на плоскости, который задан координатами 3-х своих вершин. Координаты вершин должны передаваться программе парами целых чисел через 3 аргумента командной строки ее вызова. При этом первое число в каждой паре должно обозначать координату вершины по оси Х, а второе по оси Y. Для разделения координат в каждой паре должен использоваться символ точки с запятой. Результаты вычислений площади треугольника должны отображаться через поток стандартного вывода. Программная реализация указанных вычислений должна быть основана на разработке контейнерного класса треугольника, компонентными данными которого являются объекты класса вершин, компонентные методы обеспечивают вычисление его площади.

Вариант 6++

Разработать объектно-ориентированную программу вычисления периметра прямоугольника на плоскости, который задан координатами 2-х своих противоположных вершин, а его стороны параллельны координатным осям. Координаты вершин должны передаваться программе парами целых чисел через 2 аргумента командной строки ее вызова. При этом первое число в каждой паре должно обозначать координату вершины по оси Х, а второе по оси Y. Для разделения координат в каждой паре должен использоваться символ точки с запятой. Результаты вычислений периметра прямоугольника должны отображаться через поток стандартного вывода. Программная реализация указанных вычислений должна быть основана на разработке контейнерного класса изотетичного прямоугольника, компонентными данными которого являются объекты класса противоположных вершин, компонентные методы обеспечивают вычисление его периметра.

Вариант 7++

Разработать объектно-ориентированную программу вычисления площади прямоугольника на плоскости, который задан координатами 2-х своих противоположных вершин, а его стороны параллельны координатным осям. Координаты вершин должны передаваться программе парами целых чисел через 2 аргумента командной строки ее вызова. При этом первое число в каждой паре должно обозначать координату вершины по оси Х, а второе по оси Y. Для разделения координат в каждой паре должен использоваться символ точки с запятой. Результаты вычислений площади прямоугольника должны отображаться через поток стандартного вывода. Программная реализация указанных вычислений должна быть основана на разработке контейнерного класса изотетичного прямоугольника, компонентными данными которого являются объекты класса противоположных вершин, компонентные методы обеспечивают вычисление его площади.

Вариант 8++

Разработать объектно-ориентированную программу для формирования квадратной матрицы Вандермонда по образующему вектору из необязательно различных десятичных цифр от 1 до 9, столбцы которой являются последовательными натуральными степенями элементов образующего вектора. Размер матрицы Вандермонда определяется длиной ее образующего вектора, который должен передаваться программе в форме цифровой строки через аргумент командной строки ее вызова. Результат построения матрицы Вандермонда должен отображаться через поток стандартного вывода, где все столбцы должны быть выровнены полевой границе своих элементов. Программная реализация указанных построений должна быть основана на разработке класса матрицы Вандермонда, производного от базового класса матрица с динамическим распределением памяти для таблицы целочисленных значений ее элементов с учетом оценки возможности их вычислений для стандартных типов целочисленных данных в системе программирования С++.

Вариант 9++

Разработать объектно-ориентированную программу для формирования квадратной матрицы Вандермонда по образующему вектору из необязательно различных десятичных цифр от 1 до 9, столбцы которой являются последовательными натуральными степенями элементов образующего вектора, и построения ее транспонированной матрицы. Размер матрицы Вандермонда определяется длиной ее образующего вектора, который должен передаваться программе в форме цифровой строки через аргумент командной строки ее вызова. Результат построения матрицы Вандермонда и ее транспонированной матрицы должен отображаться через поток стандартного вывода, где все столбцы должны быть выровнены полевой границе своих элементов. Программная реализация указанных построений должна быть основана на разработке класса матрицы Вандермонда, производного от базового класса матрица с динамическим распределением памяти для таблицы целочисленных значений ее элементов с учетом оценки возможности их вычислений для стандартных типов целочисленных данных в системе программирования С++.

Вариант 10++

Разработать объектно-ориентированную программу моделирования абсолютно неупругого центрального удара 2-х тел с заданными линейными скоростями и массами, которая вычисляет их общую массу и скорость после удара на основе закона сохранения импульса. Массы и скорости тел до удара должны быть заданы парами целочисленных значений, которые передаются программе через 2 аргумента командной строки ее вызова. При этом каждый аргумент должен быть записан в форме импульса до удара, где первое число определяет массу тела, а второе – его скорость. Указанные значения в каждой паре должны разделяться символом умножения. Результат моделирования должен отображаться через поток стандартного вывода двумя вещественными числами, которые обозначают массу и скорость тела, образовавшегося после удара. При разработке программы моделирования необходимо использовать аппарат множественного наследования классов импульсов тел.

Вариант 11++

Разработать объектно-ориентированную программу вычисления периметра и площади прямоугольника на плоскости, который задан координатами 2-х своих противоположных вершин, а его стороны параллельны координатным осям. Координаты вершин должны передаваться программе парами целых чисел через 2 аргумента командной строки ее вызова. При этом первое число в каждой паре должно обозначать координату вершины по оси Х, а второе по оси Y. Для разделения координат в каждой паре должен использоваться символ точки с запятой. Результаты вычислений площади и периметра прямоугольника должны отображаться через поток стандартного вывода. Программная реализация указанных вычислений должна быть основана на разработке контейнерного класса изотетичного прямоугольника, компонентными данными которого являются объекты класса противоположных вершин, компонентные методы обеспечивают вычисление его периметра и площади.

Вариант 12++

Разработать объектно-ориентированную программу для вычисления температуры смеси 2-х заданных масс одинаковой жидкости с различной температурой на основе уравнения теплового баланса без учета теплообмена с окружающей средой. Значения масс и температур жидкостей смеси должны задаваться целыми величинами, которые передаются программе через 2 аргумента командной строки ее вызова. При этом каждый аргумент должен задаваться парой целых чисел, первое из которых специфицирует массу, а второе – температуру жидкости. Значения указанных физических параметров в каждой паре должны разделяться символом наклонной черты. Результат вычислений должен отображаться через поток стандартного вывода вещественным числом, которое обозначает температуру смеси. При разработке программы необходимо использовать аппарат множественного наследования для описания состояния смеси.

Вариант 13++

Разработать объектно-ориентированную программу для формирования квадратной матрицы A из нулей, главные диагонали которой являются последовательными натуральными числами от 1 до n. Размер матрицы определяется длиной ее образующего вектора, который должен передаваться программе в форме цифровой строки через аргумент командной строки ее вызова. Результат построения матрицы должен отображаться через поток стандартного вывода, где все столбцы должны быть выровнены полевой границе своих элементов. Программная реализация указанных построений должна быть основана на разработке класса матрицы A, производного от базового класса матрица M с динамическим распределением памяти для таблицы целочисленных значений ее элементов с учетом оценки возможности их вычислений для стандартных типов целочисленных данных в системе программирования С++.

Вариант 14++

Разработать объектно-ориентированную программу для формирования квадратной матрицы A из нулей, главные диагонали которой являются последовательными натуральными числами от n до 1. Размер матрицы определяется длиной ее образующего вектора, который должен передаваться программе в форме цифровой строки через аргумент командной строки ее вызова. Результат построения матрицы должен отображаться через поток стандартного вывода, где все столбцы должны быть выровнены полевой границе своих элементов. Программная реализация указанных построений должна быть основана на разработке класса матрицы A, производного от базового класса матрица M с динамическим распределением памяти для таблицы целочисленных значений ее элементов с учетом оценки возможности их вычислений для стандартных типов целочисленных данных в системе программирования С++.

Вариант 15++

Разработать объектно-ориентированную программу для формирования квадратной матрицы A из нулей, главные диагонали которой являются последовательными натуральными числами: левая — от n до 1, правая – от 1 до n. Размер матрицы определяется длиной ее образующего вектора, который должен передаваться программе в форме цифровой строки через аргумент командной строки ее вызова. Результат построения матрицы должен отображаться через поток стандартного вывода, где все столбцы должны быть выровнены полевой границе своих элементов. Программная реализация указанных построений должна быть основана на разработке класса матрицы A, производного от базового класса матрица M с динамическим распределением памяти для таблицы целочисленных значений ее элементов с учетом оценки возможности их вычислений для стандартных типов целочисленных данных в системе программирования С++.

Вариант 16++

Разработать объектно-ориентированную программу для формирования квадратной матрицы A из нулей, главные диагонали которой являются последовательными натуральными числами: левая — от 1 до n, правая – от n до 1. Размер матрицы определяется длиной ее образующего вектора, который должен передаваться программе в форме цифровой строки через аргумент командной строки ее вызова. Результат построения матрицы должен отображаться через поток стандартного вывода, где все столбцы должны быть выровнены полевой границе своих элементов. Программная реализация указанных построений должна быть основана на разработке класса матрицы A, производного от базового класса матрица M с динамическим распределением памяти для таблицы целочисленных значений ее элементов с учетом оценки возможности их вычислений для стандартных типов целочисленных данных в системе программирования С++.

Вариант 17++

Разработать объектно-ориентированную программу для формирования квадратной матрицы A из нулей, главные диагонали которой являются последовательными натуральными числами от 1 до n и построения ее транспонированной матрицы. Размер матрицы определяется длиной ее образующего вектора, который должен передаваться программе в форме цифровой строки через аргумент командной строки ее вызова. Результат построения матрицы и ее транспонированной матрицы должен отображаться через поток стандартного вывода, где все столбцы должны быть выровнены полевой границе своих элементов. Программная реализация указанных построений должна быть основана на разработке класса матрицы A, производного от базового класса матрица M с динамическим распределением памяти для таблицы целочисленных значений ее элементов с учетом оценки возможности их вычислений для стандартных типов целочисленных данных в системе программирования С++.

Вариант 18++

Разработать объектно-ориентированную программу для формирования квадратной матрицы A из нулей, главные диагонали которой являются последовательными натуральными числами от n до 1 и построения ее транспонированной матрицы. Размер матрицы определяется длиной ее образующего вектора, который должен передаваться программе в форме цифровой строки через аргумент командной строки ее вызова. Результат построения матрицы и ее транспонированной матрицы должен отображаться через поток стандартного вывода, где все столбцы должны быть выровнены полевой границе своих элементов. Программная реализация указанных построений должна быть основана на разработке класса матрицы A, производного от базового класса матрица M с динамическим распределением памяти для таблицы целочисленных значений ее элементов с учетом оценки возможности их вычислений для стандартных типов целочисленных данных в системе программирования С++.

Вариант 19++

Разработать объектно-ориентированную программу для формирования квадратной матрицы A из нулей, главные диагонали которой являются последовательными натуральными числами: левая — от 1 до n, правая – от n до 1 и построения ее транспонированной матрицы. Размер матрицы определяется длиной ее образующего вектора, который должен передаваться программе в форме цифровой строки через аргумент командной строки ее вызова. Результат построения матрицы и ее транспонированной матрицы должен отображаться через поток стандартного вывода, где все столбцы должны быть выровнены полевой границе своих элементов. Программная реализация указанных построений должна быть основана на разработке класса матрицы A, производного от базового класса матрица M с динамическим распределением памяти для таблицы целочисленных значений ее элементов с учетом оценки возможности их вычислений для стандартных типов целочисленных данных в системе программирования С++.

Вариант 20++

Разработать объектно-ориентированную программу для формирования квадратной матрицы A из нулей, главные диагонали которой являются последовательными натуральными числами: левая — от n до 1, правая – от 1 до n и построения ее транспонированной матрицы. Размер матрицы определяется длиной ее образующего вектора, который должен передаваться программе в форме цифровой строки через аргумент командной строки ее вызова. Результат построения матрицы и ее транспонированной матрицы должен отображаться через поток стандартного вывода, где все столбцы должны быть выровнены полевой границе своих элементов. Программная реализация указанных построений должна быть основана на разработке класса матрицы A, производного от базового класса матрица M с динамическим распределением памяти для таблицы целочисленных значений ее элементов с учетом оценки возможности их вычислений для стандартных типов целочисленных данных в системе программирования С++.

Вариант 21++

Разработать объектно-ориентированную программу для формирования квадратной матрицы A из нулей и построения верхней треугольной матрицы, главная диагональ которой заполняется последовательными натуральными числами от n до 1, а строки – это числа из арифметической прогрессии со знаменателем 1 (например, первая – n, n-1, n-2,…2,1) и построения ее транспонированной матрицы. Размер матрицы определяется длиной ее образующего вектора, который должен передаваться программе в форме цифровой строки через аргумент командной строки ее вызова. Результат построения матрицы и ее транспонированной матрицы должен отображаться через поток стандартного вывода, где все столбцы должны быть выровнены полевой границе своих элементов. Программная реализация указанных построений должна быть основана на разработке класса матрицы A, производного от базового класса матрица M с динамическим распределением памяти для таблицы целочисленных значений ее элементов с учетом оценки возможности их вычислений для стандартных типов целочисленных данных в системе программирования С++.

Вариант 22++

Разработать объектно-ориентированную программу для формирования квадратной матрицы A из нулей и построения нижней треугольной матрицы, главная диагональ которой заполняется последовательными натуральными числами от 1 до n, а строки – это числа из арифметической прогрессии со знаменателем 1 (например, последняя – n, n-1, n-2,…2,1) и построения ее транспонированной матрицы. Размер матрицы определяется длиной ее образующего вектора, который должен передаваться программе в форме цифровой строки через аргумент командной строки ее вызова. Результат построения матрицы и ее транспонированной матрицы должен отображаться через поток стандартного вывода, где все столбцы должны быть выровнены полевой границе своих элементов. Программная реализация указанных построений должна быть основана на разработке класса матрицы A, производного от базового класса матрица M с динамическим распределением памяти для таблицы целочисленных значений ее элементов с учетом оценки возможности их вычислений для стандартных типов целочисленных данных в системе программирования С++.

Вариант 23++

Разработать объектно-ориентированную программу для формирования квадратной матрицы A из нулей и построения нижней треугольной матрицы, главная диагональ которой заполняется последовательными натуральными числами от 1 до n, а строки – это числа из арифметической прогрессии со знаменателем 1 (например, последняя – n, n-1, n-2,…2,1). Размер матрицы определяется длиной ее образующего вектора, который должен передаваться программе в форме цифровой строки через аргумент командной строки ее вызова. Результат построения матрицы должен отображаться через поток стандартного вывода, где все столбцы должны быть выровнены полевой границе своих элементов. Программная реализация указанных построений должна быть основана на разработке класса матрицы A, производного от базового класса матрица M с динамическим распределением памяти для таблицы целочисленных значений ее элементов с учетом оценки возможности их вычислений для стандартных типов целочисленных данных в системе программирования С++.

Вариант 24++

Разработать объектно-ориентированную программу для формирования квадратной матрицы A из нулей и построения верхней треугольной матрицы, главная диагональ которой заполняется последовательными натуральными числами от n до 1, а строки – это числа из арифметической прогрессии со знаменателем 1 (например, первая – n, n-1, n-2,…2,1). Размер матрицы определяется длиной ее образующего вектора, который должен передаваться программе в форме цифровой строки через аргумент командной строки ее вызова. Результат построения матрицы должен отображаться через поток стандартного вывода, где все столбцы должны быть выровнены полевой границе своих элементов. Программная реализация указанных построений должна быть основана на разработке класса матрицы A, производного от базового класса матрица M с динамическим распределением памяти для таблицы целочисленных значений ее элементов с учетом оценки возможности их вычислений для стандартных типов целочисленных данных в системе программирования С++.

Вариант 25++

Разработать объектно-ориентированную программу для формирования квадратной матрицы A из нулей, главные диагонали которой являются последовательными натуральными числами от 1 до n и вычисления ее определителя. Размер матрицы определяется длиной ее образующего вектора, который должен передаваться программе в форме цифровой строки через аргумент командной строки ее вызова. Результат построения матрицы и вычисления ее определителя должен отображаться через поток стандартного вывода, где все столбцы матрицы должны быть выровнены полевой границе своих элементов. Программная реализация указанных построений должна быть основана на разработке класса матрицы A, производного от базового класса матрица M с динамическим распределением памяти для таблицы целочисленных значений ее элементов с учетом оценки возможности их вычислений для стандартных типов целочисленных данных в системе программирования С++, а метод вычисления определителя матрицы должен быть объявлен в производном классе.

Вариант 26++

Разработать объектно-ориентированную программу для формирования квадратной матрицы A из нулей, главные диагонали которой являются последовательными натуральными числами от n до 1 и вычисления ее определителя. Размер матрицы определяется длиной ее образующего вектора, который должен передаваться программе в форме цифровой строки через аргумент командной строки ее вызова. Результат построения матрицы и вычисления ее определителя должен отображаться через поток стандартного вывода, где все столбцы должны быть выровнены полевой границе своих элементов. Программная реализация указанных построений должна быть основана на разработке класса матрицы A, производного от базового класса матрица M с динамическим распределением памяти для таблицы целочисленных значений ее элементов с учетом оценки возможности их вычислений для стандартных типов целочисленных данных в системе программирования С++, а метод вычисления определителя матрицы должен быть объявлен в производном классе.

Вариант 27++

Разработать объектно-ориентированную программу для формирования квадратной матрицы A из нулей, главные диагонали которой являются последовательными натуральными числами: левая — от n до 1, правая – от 1 до n и вычисления ее определителя. Размер матрицы определяется длиной ее образующего вектора, который должен передаваться программе в форме цифровой строки через аргумент командной строки ее вызова. Результат построения матрицы и вычисления ее определителя должен отображаться через поток стандартного вывода, где все столбцы должны быть выровнены полевой границе своих элементов. Программная реализация указанных построений должна быть основана на разработке класса матрицы A, производного от базового класса матрица M с динамическим распределением памяти для таблицы целочисленных значений ее элементов с учетом оценки возможности их вычислений для стандартных типов целочисленных данных в системе программирования С++, а метод вычисления определителя матрицы должен быть объявлен в производном классе.

Вариант 28++

Разработать объектно-ориентированную программу для формирования квадратной матрицы A из нулей, главные диагонали которой являются последовательными натуральными числами: левая — от 1 до n, правая – от n до 1 и вычисления ее определителя. Размер матрицы определяется длиной ее образующего вектора, который должен передаваться программе в форме цифровой строки через аргумент командной строки ее вызова. Результат построения матрицы и вычисления ее определителя должен отображаться через поток стандартного вывода, где все столбцы должны быть выровнены полевой границе своих элементов. Программная реализация указанных построений должна быть основана на разработке класса матрицы A, производного от базового класса матрица M с динамическим распределением памяти для таблицы целочисленных значений ее элементов с учетом оценки возможности их вычислений для стандартных типов целочисленных данных в системе программирования С++, а метод вычисления определителя матрицы должен быть объявлен в производном классе.


 


Приложение 3. Контрольные работы

Виртуальные методы

Разработать объектно-ориентированную программу для числовой игры, где 2 игрока должны поочередно наращивать сумму, достигнутую на предыдущем ходе противника, выбирая числовое приращение, которое не превышает заданной фиксированной величины N. Игра должна продолжаться, пока значение суммы, набранной обоими игроками, меньше заданной величины S>N. Победителем считается игрок, который на своем ходе смог первым набрать требуемую сумму M. Игра должна быть реализована в варианте, когда двумя противниками являются компьютер и человек, которому предоставлено право первого хода. Человек может делать любые допустимые ходы, сообщая величину приращения суммы через стандартный ввод. При любой ошибке ввода сумма автоматически увеличивается на 1, и ход передается компьютеру. Компьютер должен действовать по выигрышной стратегии, согласно которой остаток до предельной суммы S после каждого его хода должен быть кратен (N+1). Если выигрышный ход сделать невозможно, компьютер должен увеличивать текущую сумму на 1. В любом случае приращение суммы на ходе компьютера должно отображаться через поток стандартного вывода. Исходными данными для любой партии игры являются значение суммы S, которую должны набрать игроки, и предельная величина N ее приращения за 1 ход. Эти параметры должны передаваться программе через аргументы командной строки ее вызова. Каждый ход должен сопровождать запрос, который отображает текущую величину суммы и идентифицирует игрока, чей ход ожидается в данный момент. Партию игры должно завершать диагностическое сообщение, которое идентифицирует ее итоговый результат. При разработке программы необходимо реализовать производные классы игроков с виртуальной функцией хода, которые наследуют интерфейс игры и доступ к значению набранной суммы от абстрактного базового класса.

Вариант 1V

Разработать объектно-ориентированную программу для числовой игры, где 2 игрока должны поочередно наращивать сумму, достигнутую на предыдущем ходе противника, выбирая числовое приращение, которое не превышает заданной фиксированной величины N. Игра должна продолжаться, пока значение суммы, набранной обоими игроками, меньше заданной величины S>N. Победителем считается игрок, который на своем ходе смог первым набрать требуемую сумму M. Игра должна быть реализована в варианте, когда двумя противниками являются компьютер и человек, которому предоставлено право первого хода. Человек может делать любые допустимые ходы, сообщая величину приращения суммы через стандартный ввод. При любой ошибке ввода сумма автоматически увеличивается на 1, и ход передается компьютеру. Компьютер должен действовать по выигрышной стратегии, согласно которой остаток до предельной суммы S после каждого его хода должен быть кратен (N+1). Если выигрышный ход сделать невозможно, компьютер должен увеличивать текущую сумму на N. В любом случае приращение суммы на ходе компьютера должно отображаться через поток стандартного вывода. Исходными данными для любой партии игры являются значение суммы S, которую должны набрать игроки, и предельная величина N ее приращения за 1 ход. Эти параметры должны передаваться программе через аргументы командной строки ее вызова. Каждый ход должен сопровождать запрос, который отображает текущую величину суммы и идентифицирует игрока, чей ход ожидается в данный момент. Партию игры должно завершать диагностическое сообщение, которое идентифицирует ее итоговый результат. При разработке программы необходимо реализовать производные классы игроков с виртуальной функцией хода, которые наследуют интерфейс игры и доступ к значению набранной суммы от абстрактного базового класса.

Вариант 2V

Разработать объектно-ориентированную программу для числовой игры, где 2 игрока должны поочередно наращивать сумму, достигнутую на предыдущем ходе противника, выбирая числовое приращение, которое не превышает заданной фиксированной величины N. Игра должна продолжаться, пока значение суммы, набранной обоими игроками, меньше заданной величины S>N. Победителем считается игрок, который на своем ходе смог первым набрать требуемую сумму M. Игра должна быть реализована в варианте, когда двумя противниками являются компьютер и человек, которому предоставлено право первого хода. Человек может делать любые допустимые ходы, сообщая величину приращения суммы через стандартный ввод. При любой ошибке ввода сумма автоматически увеличивается на N, и ход передается компьютеру. Компьютер должен действовать по выигрышной стратегии, согласно которой остаток до предельной суммы S после каждого его хода должен быть кратен (N+1). Если выигрышный ход сделать невозможно, компьютер должен увеличивать текущую сумму на 1. В любом случае приращение суммы на ходе компьютера должно отображаться через поток стандартного вывода. Исходными данными для любой партии игры являются значение суммы S, которую должны набрать игроки, и предельная величина N ее приращения за 1 ход. Эти параметры должны передаваться программе через аргументы командной строки ее вызова. Каждый ход должен сопровождать запрос, который отображает текущую величину суммы и идентифицирует игрока, чей ход ожидается в данный момент. Партию игры должно завершать диагностическое сообщение, которое идентифицирует ее итоговый результат. При разработке программы необходимо реализовать производные классы игроков с виртуальной функцией хода, которые наследуют интерфейс игры и доступ к значению набранной суммы от абстрактного базового класса.

Вариант 3V

Разработать объектно-ориентированную программу для числовой игры, где 2 игрока должны поочередно наращивать сумму, достигнутую на предыдущем ходе противника, выбирая числовое приращение, которое не превышает заданной фиксированной величины N. Игра должна продолжаться, пока значение суммы, набранной обоими игроками, меньше заданной величины S>N. Победителем считается игрок, который на своем ходе смог первым набрать требуемую сумму M. Игра должна быть реализована в варианте, когда двумя противниками являются компьютер и человек, которому предоставлено право первого хода. Человек может делать любые допустимые ходы, сообщая величину приращения суммы через стандартный ввод. При любой ошибке ввода сумма автоматически увеличивается на N, и ход передается компьютеру. Компьютер должен действовать по выигрышной стратегии, согласно которой остаток до предельной суммы S после каждого его хода должен быть кратен (N+1). Если выигрышный ход сделать невозможно, компьютер должен увеличивать текущую сумму на N. В любом случае приращение суммы на ходе компьютера должно отображаться через поток стандартного вывода. Исходными данными для любой партии игры являются значение суммы S, которую должны набрать игроки, и предельная величина N ее приращения за 1 ход. Эти параметры должны передаваться программе через аргументы командной строки ее вызова. Каждый ход должен сопровождать запрос, который отображает текущую величину суммы и идентифицирует игрока, чей ход ожидается в данный момент. Партию игры должно завершать диагностическое сообщение, которое идентифицирует ее итоговый результат. При разработке программы необходимо реализовать производные классы игроков с виртуальной функцией хода, которые наследуют интерфейс игры и доступ к значению набранной суммы от абстрактного базового класса.

Вариант 4V

Разработать объектно-ориентированную программу для числовой игры, где 2 игрока должны поочередно наращивать сумму, достигнутую на предыдущем ходе противника, выбирая числовое приращение, которое не превышает заданной фиксированной величины N. Игра должна продолжаться, пока значение суммы, набранной обоими игроками, меньше заданной величины S>N. Победителем считается игрок, который на своем ходе смог первым набрать требуемую сумму M. Игра должна быть реализована в варианте, когда двумя противниками являются компьютер и человек, которому предоставлено право первого хода. Человек может делать любые допустимые ходы, сообщая величину приращения суммы через стандартный ввод. При любой ошибке ввода игра должна аварийно завершаться соответствующим диагностическим сообщением. Компьютер должен действовать по выигрышной стратегии, согласно которой остаток до предельной суммы S после каждого его хода должен быть кратен (N+1). Если выигрышный ход сделать невозможно, компьютер должен увеличивать текущую сумму на 1. В любом случае приращение суммы на ходе компьютера должно отображаться через поток стандартного вывода. Исходными данными для любой партии игры являются значение суммы S, которую должны набрать игроки, и предельная величина N ее приращения за 1 ход. Эти параметры должны передаваться программе через аргументы командной строки ее вызова. Каждый ход должен сопровождать запрос, который отображает текущую величину суммы и идентифицирует игрока, чей ход ожидается в данный момент. Партию игры должно завершать диагностическое сообщение, которое идентифицирует ее итоговый результат. При разработке программы необходимо реализовать производные классы игроков с виртуальной функцией хода, которые наследуют интерфейс игры и доступ к значению набранной суммы от абстрактного базового класса.

Вариант 5V

Разработать объектно-ориентированную программу для числовой игры, где 2 игрока должны поочередно наращивать сумму, достигнутую на предыдущем ходе противника, выбирая числовое приращение, которое не превышает заданной фиксированной величины N. Игра должна продолжаться, пока значение суммы, набранной обоими игроками, меньше заданной величины S>N. Победителем считается игрок, который на своем ходе смог первым набрать требуемую сумму M. Игра должна быть реализована в варианте, когда двумя противниками являются компьютер и человек, которому предоставлено право первого хода. Человек может делать любые допустимые ходы, сообщая величину приращения суммы через стандартный ввод. При любой ошибке ввода игра должна аварийно завершаться соответствующим диагностическим сообщением. Компьютер должен действовать по выигрышной стратегии, согласно которой остаток до предельной суммы S после каждого его хода должен быть кратен (N+1). Если выигрышный ход сделать невозможно, компьютер должен увеличивать текущую сумму на N. В любом случае приращение суммы на ходе компьютера должно отображаться через поток стандартного вывода. Исходными данными для любой партии игры являются значение суммы S, которую должны набрать игроки, и предельная величина N ее приращения за 1 ход. Эти параметры должны передаваться программе через аргументы командной строки ее вызова. Каждый ход должен сопровождать запрос, который отображает текущую величину суммы и идентифицирует игрока, чей ход ожидается в данный момент. Партию игры должно завершать диагностическое сообщение, которое идентифицирует ее итоговый результат. При разработке программы необходимо реализовать производные классы игроков с виртуальной функцией хода, которые наследуют интерфейс игры и доступ к значению набранной суммы от абстрактного базового класса.

Вариант 6V

Разработать объектно-ориентированную программу для числовой игры, где 2 игрока должны поочередно наращивать сумму, достигнутую на предыдущем ходе противника, выбирая числовое приращение, которое не превышает заданной фиксированной величины N. Игра должна продолжаться, пока значение суммы, набранной обоими игроками, меньше заданной величины S>N. Победителем считается игрок, который на своем ходе смог первым набрать требуемую сумму M. Игра должна быть реализована в варианте, когда двумя противниками являются компьютер и человек, которому предоставлено право первого хода. Человек может делать любые допустимые ходы, сообщая величину приращения суммы через стандартный ввод. При любой ошибке ввода ему должна предоставляться возможность повторить ход. Компьютер должен действовать по выигрышной стратегии, согласно которой остаток до предельной суммы S после каждого его хода должен быть кратен (N+1). Если выигрышный ход сделать невозможно, компьютер должен увеличивать текущую сумму на 1. В любом случае приращение суммы на ходе компьютера должно отображаться через поток стандартного вывода. Исходными данными для любой партии игры являются значение суммы S, которую должны набрать игроки, и предельная величина N ее приращения за 1 ход. Эти параметры должны передаваться программе через аргументы командной строки ее вызова. Каждый ход должен сопровождать запрос, который отображает текущую величину суммы и идентифицирует игрока, чей ход ожидается в данный момент. Партию игры должно завершать диагностическое сообщение, которое идентифицирует ее итоговый результат. При разработке программы необходимо реализовать производные классы игроков с виртуальной функцией хода, которые наследуют интерфейс игры и доступ к значению набранной суммы от абстрактного базового класса.

Вариант 7V

Разработать объектно-ориентированную программу для числовой игры, где 2 игрока должны поочередно наращивать сумму, достигнутую на предыдущем ходе противника, выбирая числовое приращение, которое не превышает заданной фиксированной величины N. Игра должна продолжаться, пока значение суммы, набранной обоими игроками, меньше заданной величины S>N. Победителем считается игрок, который на своем ходе смог первым набрать требуемую сумму M. Игра должна быть реализована в варианте, когда двумя противниками являются компьютер и человек, которому предоставлено право первого хода. Человек может делать любые допустимые ходы, сообщая величину приращения суммы через стандартный ввод. При любой ошибке ввода ему должна предоставляться возможность повторить ход. Компьютер должен действовать по выигрышной стратегии, согласно которой остаток до предельной суммы S после каждого его хода должен быть кратен (N+1). Если выигрышный ход сделать невозможно, компьютер должен увеличивать текущую сумму на N. В любом случае приращение суммы на ходе компьютера должно отображаться через поток стандартного вывода. Исходными данными для любой партии игры являются значение суммы S, которую должны набрать игроки, и предельная величина N ее приращения за 1 ход. Эти параметры должны передаваться программе через аргументы командной строки ее вызова. Каждый ход должен сопровождать запрос, который отображает текущую величину суммы и идентифицирует игрока, чей ход ожидается в данный момент. Партию игры должно завершать диагностическое сообщение, которое идентифицирует ее итоговый результат. При разработке программы необходимо реализовать производные классы игроков с виртуальной функцией хода, которые наследуют интерфейс игры и доступ к значению набранной суммы от абстрактного базового класса.

Вариант 8V

Разработать объектно-ориентированную программу для числовой игры, где 2 игрока должны поочередно наращивать сумму, достигнутую на предыдущем ходе противника, выбирая числовое приращение, которое не превышает заданной фиксированной величины N. Игра должна продолжаться, пока значение суммы, набранной обоими игроками, меньше заданной величины S>N. Победителем считается игрок, который на своем ходе смог первым набрать требуемую сумму M. Игра должна быть реализована в варианте, когда двумя противниками являются компьютер и человек, которому предоставлено право первого хода. Человек может делать любые допустимые ходы, сообщая величину приращения суммы через стандартный ввод. При любой ошибке ввода сумма автоматически увеличивается на 1, и ход передается компьютеру. Компьютер должен действовать по выигрышной стратегии, согласно которой остаток до предельной суммы S после каждого его хода должен быть кратен (N+1). Если выигрышный ход сделать невозможно, компьютер должен повторить ход человека. В любом случае величина приращения суммы на ходе компьютера должна отображаться через поток стандартного вывода. Исходными данными для любой партии игры являются значение суммы S, которую должны набрать игроки, и предельная величина N ее приращения за 1 ход. Эти параметры должны передаваться программе через аргументы командной строки ее вызова. Каждый ход должен сопровождать запрос, который отображает текущую величину суммы и идентифицирует игрока, чей ход ожидается в данный момент. Партию игры должно завершать диагностическое сообщение, которое идентифицирует ее итоговый результат. При разработке программы необходимо реализовать производные классы игроков с виртуальной функцией хода, которые наследуют интерфейс игры и доступ к значению набранной суммы от абстрактного базового класса.

Вариант 9V

Разработать объектно-ориентированную программу для числовой игры, где 2 игрока должны поочередно наращивать сумму, достигнутую на предыдущем ходе противника, выбирая числовое приращение, которое не превышает заданной фиксированной величины N. Игра должна продолжаться, пока значение суммы, набранной обоими игроками, меньше заданной величины S>N. Победителем считается игрок, который на своем ходе смог первым набрать требуемую сумму M. Игра должна быть реализована в варианте, когда двумя противниками являются компьютер и человек, которому предоставлено право первого хода. Человек может делать любые допустимые ходы, сообщая величину приращения суммы через стандартный ввод. При любой ошибке ввода сумма автоматически увеличивается на N, и ход передается компьютеру. Компьютер должен действовать по выигрышной стратегии, согласно которой остаток до предельной суммы S после каждого его хода должен быть кратен (N+1). Если выигрышный ход сделать невозможно, компьютер должен повторить ход человека. В любом случае величина приращения суммы на ходе компьютера должна отображаться через поток стандартного вывода. Исходными данными для любой партии игры являются значение суммы S, которую должны набрать игроки, и предельная величина N ее приращения за 1 ход. Эти параметры должны передаваться программе через аргументы командной строки ее вызова. Каждый ход должен сопровождать запрос, который отображает текущую величину суммы и идентифицирует игрока, чей ход ожидается в данный момент. Партию игры должно завершать диагностическое сообщение, которое идентифицирует ее итоговый результат. При разработке программы необходимо реализовать производные классы игроков с виртуальной функцией хода, которые наследуют интерфейс игры и доступ к значению набранной суммы от абстрактного базового класса.

Вариант 10V

Разработать объектно-ориентированную программу для числовой игры, где 2 игрока должны поочередно выбирать из кучи заданного размера S любое количество предметов, которое не превышает фиксированного значения N<S. Игра должна продолжаться, пока текущий размер кучи больше 0. Победителем считается игрок, который взял последний предмет кучи. Игра должна быть реализована в варианте, когда двумя противниками являются компьютер и человек, которому предоставляется право первого хода. Человек может делать любые допустимые ходы, сообщая число взятых им предметов через стандартный ввод. При любой ошибке ввода размер кучи автоматически уменьшается на 1, и ход передается компьютеру. Компьютер должен действовать по выигрышной стратегии, согласно которой остаток кучи после каждого его хода должен быть кратен (N+1). Если такой выигрышный ход сделать невозможно, компьютер должен взять из кучи 1 предмет. В любом случае число предметов, которое взял из кучи компьютер должно отображаться через поток стандартного вывода. Исходными данными для любой партии игры являются размер кучи S и предельное число предметов N, которое можно взять из кучи за 1 ход. Эти параметры должны передаваться программе через аргументы командной строки ее вызова. Каждый ход должен сопровождать информационный запрос, который отображает текущий размер кучи и идентифицирует игрока, чей ход ожидается в данный момент. Игра должна завершаться диагностическим сообщением, которое идентифицирует ее итоговый результат. При разработке программы необходимо реализовать производные классы игроков с виртуальной функцией хода, которые наследуют интерфейс игры и доступ к куче от абстрактного базового класса.

Вариант 11V

Разработать объектно-ориентированную программу для числовой игры, где 2 игрока должны поочередно выбирать из кучи заданного размера S любое количество предметов, которое не превышает фиксированного значения N<S. Игра должна продолжаться, пока текущий размер кучи больше 0. Победителем считается игрок, который взял последний предмет кучи. Игра должна быть реализована в варианте, когда двумя противниками являются компьютер и человек, которому предоставляется право первого хода. Человек может делать любые допустимые ходы, сообщая число взятых им предметов через стандартный ввод. При любой ошибке ввода размер кучи автоматически уменьшается на 1, и ход передается компьютеру. Компьютер должен действовать по выигрышной стратегии, согласно которой остаток кучи после каждого его хода должен быть кратен (N+1). Если такой выигрышный ход сделать нельзя, компьютер должен взять из кучи N предметов. В любом случае число предметов, которое взял из кучи компьютер должно отображаться через поток стандартного вывода. Исходными данными для любой партии игры являются размер кучи S и предельное число предметов N, которое можно взять из кучи за 1 ход. Эти параметры должны передаваться программе через аргументы командной строки ее вызова. Каждый ход должен сопровождать информационный запрос, который отображает текущий размер кучи и идентифицирует игрока, чей ход ожидается в данный момент. Игра должна завершаться диагностическим сообщением, которое идентифицирует ее итоговый результат. При разработке программы необходимо реализовать производные классы игроков с виртуальной функцией хода, которые наследуют интерфейс игры и доступ к куче от абстрактного базового класса.

Вариант 12V

Разработать объектно-ориентированную программу для числовой игры, где 2 игрока должны поочередно выбирать из кучи заданного размера S любое количество предметов, которое не превышает фиксированного значения N<S. Игра должна продолжаться, пока текущий размер кучи больше 0. Победителем считается игрок, который взял последний предмет кучи. Игра должна быть реализована в варианте, когда двумя противниками являются компьютер и человек, которому предоставляется право первого хода. Человек может делать любые допустимые ходы, сообщая число взятых им предметов через стандартный ввод. При любой ошибке ввода размер кучи автоматически уменьшается на N, и ход передается компьютеру. Компьютер должен действовать по выигрышной стратегии, согласно которой остаток кучи после каждого его хода должен быть кратен (N+1). Если такой выигрышный ход сделать невозможно, компьютер должен взять из кучи 1 предмет. В любом случае число предметов, которое взял из кучи компьютер должно отображаться через поток стандартного вывода. Исходными данными для любой партии игры являются размер кучи S и предельное число предметов N, которое можно взять из кучи за 1 ход. Эти параметры должны передаваться программе через аргументы командной строки ее вызова. Каждый ход должен сопровождать информационный запрос, который отображает текущий размер кучи и идентифицирует игрока, чей ход ожидается в данный момент. Игра должна завершаться диагностическим сообщением, которое идентифицирует ее итоговый результат. При разработке программы необходимо реализовать производные классы игроков с виртуальной функцией хода, которые наследуют интерфейс игры и доступ к куче от абстрактного базового класса.

Вариант 13V

Разработать объектно-ориентированную программу для числовой игры, где 2 игрока должны поочередно выбирать из кучи заданного размера S любое количество предметов, которое не превышает фиксированного значения N<S. Игра должна продолжаться, пока текущий размер кучи больше 0. Победителем считается игрок, который взял последний предмет кучи. Игра должна быть реализована в варианте, когда двумя противниками являются компьютер и человек, которому предоставляется право первого хода. Человек может делать любые допустимые ходы, сообщая число взятых им предметов через стандартный ввод. При любой ошибке ввода размер кучи автоматически уменьшается на N, и ход передается компьютеру. Компьютер должен действовать по выигрышной стратегии, согласно которой остаток кучи после каждого его хода должен быть кратен (N+1). Если такой выигрышный ход сделать нельзя, компьютер должен взять из кучи N предметов. В любом случае число предметов, которое взял из кучи компьютер должно отображаться через поток стандартного вывода. Исходными данными для любой партии игры являются размер кучи S и предельное число предметов N, которое можно взять из кучи за 1 ход. Эти параметры должны передаваться программе через аргументы командной строки ее вызова. Каждый ход должен сопровождать информационный запрос, который отображает текущий размер кучи и идентифицирует игрока, чей ход ожидается в данный момент. Игра должна завершаться диагностическим сообщением, которое идентифицирует ее итоговый результат. При разработке программы необходимо реализовать производные классы игроков с виртуальной функцией хода, которые наследуют интерфейс игры и доступ к куче от абстрактного базового класса.

Вариант 14V

Разработать объектно-ориентированную программу для числовой игры, где 2 игрока должны поочередно выбирать из кучи заданного размера S любое количество предметов, которое не превышает фиксированного значения N<S. Игра должна продолжаться, пока текущий размер кучи больше 0. Победителем считается игрок, который взял последний предмет кучи. Игра должна быть реализована в варианте, когда двумя противниками являются компьютер и человек, которому предоставляется право первого хода. Человек может делать любые допустимые ходы, сообщая число взятых им предметов через стандартный ввод. При любой ошибке ввода партия игры должна аварийно завершаться с соответствующей диагностикой. Компьютер должен действовать по выигрышной стратегии, согласно которой остаток кучи после каждого его хода должен быть кратен (N+1). Если такой выигрышный ход сделать невозможно, компьютер должен взять из кучи 1 предмет. В любом случае число предметов, которое взял из кучи компьютер должно отображаться через поток стандартного вывода. Исходными данными для любой партии игры являются размер кучи S и предельное число предметов N, которое можно взять из кучи за 1 ход. Эти параметры должны передаваться программе через аргументы командной строки ее вызова. Каждый ход должен сопровождать информационный запрос, который отображает текущий размер кучи и идентифицирует игрока, чей ход ожидается в данный момент. Игра должна завершаться диагностическим сообщением, которое идентифицирует ее итоговый результат. При разработке программы необходимо реализовать производные классы игроков с виртуальной функцией хода, которые наследуют интерфейс игры и доступ к куче от абстрактного базового класса.

Вариант 15V

Разработать объектно-ориентированную программу для числовой игры, где 2 игрока должны поочередно выбирать из кучи заданного размера S любое количество предметов, которое не превышает фиксированного значения N<S. Игра должна продолжаться, пока текущий размер кучи больше 0. Победителем считается игрок, который взял последний предмет кучи. Игра должна быть реализована в варианте, когда двумя противниками являются компьютер и человек, которому предоставляется право первого хода. Человек может делать любые допустимые ходы, сообщая число взятых им предметов через стандартный ввод. При любой ошибке ввода партия игры должна аварийно завершаться с соответствующей диагностикой. Компьютер должен действовать по выигрышной стратегии, согласно которой остаток кучи после каждого его хода должен быть кратен (N+1). Если такой выигрышный ход сделать нельзя, компьютер должен взять из кучи N предметов. В любом случае число предметов, которое взял из кучи компьютер должно отображаться через поток стандартного вывода. Исходными данными для любой партии игры являются размер кучи S и предельное число предметов N, которое можно взять из кучи за 1 ход. Эти параметры должны передаваться программе через аргументы командной строки ее вызова. Каждый ход должен сопровождать информационный запрос, который отображает текущий размер кучи и идентифицирует игрока, чей ход ожидается в данный момент. Игра должна завершаться диагностическим сообщением, которое идентифицирует ее итоговый результат. При разработке программы необходимо реализовать производные классы игроков с виртуальной функцией хода, которые наследуют интерфейс игры и доступ к куче от абстрактного базового класса.

Вариант 16V

Разработать объектно-ориентированную программу для числовой игры, где 2 игрока должны поочередно выбирать из кучи заданного размера S любое количество предметов, которое не превышает фиксированного значения N<S. Игра должна продолжаться, пока текущий размер кучи больше 0. Победителем считается игрок, который взял последний предмет кучи. Игра должна быть реализована в варианте, когда двумя противниками являются компьютер и человек, которому предоставляется право первого хода. Человек может делать любые допустимые ходы, сообщая число взятых им предметов через стандартный ввод. При любой ошибке ввода ему должна предоставляться возможность повторить ход. Компьютер должен действовать по выигрышной стратегии, согласно которой остаток кучи после каждого его хода должен быть кратен (N+1). Если такой выигрышный ход сделать невозможно, компьютер должен взять из кучи 1 предмет. В любом случае число предметов, которое взял из кучи компьютер должно отображаться через поток стандартного вывода. Исходными данными для любой партии игры являются размер кучи S и предельное число предметов N, которое можно взять из кучи за 1 ход. Эти параметры должны передаваться программе через аргументы командной строки ее вызова. Каждый ход партии игры должен сопровождать информационный запрос, который отображает текущий размер кучи и идентифицирует игрока, чей ход ожидается в данный момент. Игра должна завершаться диагностическим сообщением, которое идентифицирует ее итоговый результат. При разработке программы необходимо реализовать производные классы игроков с виртуальной функцией хода, которые наследуют интерфейс игры и доступ к куче от абстрактного базового класса.

Вариант 17V

Разработать объектно-ориентированную программу для числовой игры, где 2 игрока должны поочередно выбирать из кучи заданного размера S любое количество предметов, которое не превышает фиксированного значения N<S. Игра должна продолжаться, пока текущий размер кучи больше 0. Победителем считается игрок, который взял последний предмет кучи. Игра должна быть реализована в варианте, когда двумя противниками являются компьютер и человек, которому предоставляется право первого хода. Человек может делать любые допустимые ходы, сообщая число взятых им предметов через стандартный ввод. При любой ошибке ввода ему должна предоставляться возможность повторить ход. Компьютер должен действовать по выигрышной стратегии, согласно которой остаток кучи после каждого его хода должен быть кратен (N+1). Если такой выигрышный ход сделать нельзя, компьютер должен взять из кучи N предметов. В любом случае число предметов, которое взял из кучи компьютер должно отображаться через поток стандартного вывода. Исходными данными для любой партии игры являются размер кучи S и предельное число предметов N, которое можно взять из кучи за 1 ход. Эти параметры должны передаваться программе через аргументы командной строки ее вызова. Каждый ход партии игры должен сопровождать информационный запрос, который отображает текущий размер кучи и идентифицирует игрока, чей ход ожидается в данный момент. Игра должна завершаться диагностическим сообщением, которое идентифицирует ее итоговый результат. При разработке программы необходимо реализовать производные классы игроков с виртуальной функцией хода, которые наследуют интерфейс игры и доступ к куче от абстрактного базового класса.

Вариант 18V

Разработать объектно-ориентированную программу для числовой игры, где 2 игрока должны поочередно выбирать из кучи заданного размера S любое количество предметов, которое не превышает фиксированного значения N<S. Игра должна продолжаться, пока текущий размер кучи больше 0. Победителем считается игрок, который взял последний предмет кучи. Игра должна быть реализована в варианте, когда двумя противниками являются компьютер и человек, которому предоставляется право первого хода. Человек может делать любые допустимые ходы, сообщая число взятых им предметов через стандартный ввод. При любой ошибке ввода размер кучи автоматически уменьшается на 1, и ход передается компьютеру. Компьютер должен действовать по выигрышной стратегии, согласно которой остаток кучи после каждого его хода должен быть кратен (N+1). Если такой выигрышный ход сделать невозможно, компьютер должен повторить ход человека. В любом случае число предметов, которое взял из кучи компьютер должно отображаться через поток стандартного вывода. Исходными данными для любой партии игры являются размер кучи S и предельное число предметов N, которое можно взять из кучи за 1 ход. Эти параметры должны передаваться программе через аргументы командной строки ее вызова. Каждый ход должен сопровождать информационный запрос, который отображает текущий размер кучи и идентифицирует игрока, чей ход ожидается в данный момент. Игра должна завершаться диагностическим сообщением, которое идентифицирует ее итоговый результат. При разработке программы необходимо реализовать производные классы игроков с виртуальной функцией хода, которые наследуют интерфейс игры и доступ к куче от абстрактного базового класса.

Вариант 19V

Разработать объектно-ориентированную программу для числовой игры, где 2 игрока должны поочередно выбирать из кучи заданного размера S любое количество предметов, которое не превышает фиксированного значения N<S. Игра должна продолжаться, пока текущий размер кучи больше 0. Победителем считается игрок, который взял последний предмет кучи. Игра должна быть реализована в варианте, когда двумя противниками являются компьютер и человек, которому предоставляется право первого хода. Человек может делать любые допустимые ходы, сообщая число взятых им предметов через стандартный ввод. При любой ошибке ввода размер кучи автоматически уменьшается на N, и ход передается компьютеру. Компьютер должен действовать по выигрышной стратегии, согласно которой остаток кучи после каждого его хода должен быть кратен (N+1). Если такой выигрышный ход сделать нельзя, компьютер должен повторить ход человека. В любом случае число предметов, которое взял из кучи компьютер должно отображаться через поток стандартного вывода. Исходными данными для любой партии игры являются размер кучи S и предельное число предметов N, которое можно взять из кучи за 1 ход. Эти параметры должны передаваться программе через аргументы командной строки ее вызова. Каждый ход должен сопровождать информационный запрос, который отображает текущий размер кучи и идентифицирует игрока, чей ход ожидается в данный момент. Игра должна завершаться диагностическим со


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: