Разработка программы выполнения теоретико-множественных операций 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Разработка программы выполнения теоретико-множественных операций



Формулировка задания

Требуется разработать объектно-ориентированную программу для вычисления объединения(суммы) и пересечения(произведения) двух любых подмножеств латинских букв. Заданные подмножества латинских букв должны передаваться программе через аргументы командной строки ее вызова. Программная реализация вычислений должна быть основана на разработке класса множества символов с перегрузкой операторов '+' и '*' для выполнения соответствующих теоретико-множественных операций.

Результатом работы программы, то есть результат операции должен отображаться символьной строкой в потоке стандартного вывода. Для удобства отображения результата в программе должна быть предусмотрена перегрузка оператора ‘<<’ класса потока стандартного вывода для объектов класса множества латинских букв.

Программа должна быть составлена в системе программирования C++ на основе разработки специального класса, в котором перегружены специальные операции над двумя любыми подмножествами латинских букв.

Свойства подмножеств

Вычислительная обработка подмножеств латинских букв основана на использовании 2-х операций: объединения(суммы) и пересечения(произведения). Для выполнения этих операций символическое представление подмножества выражается символьной строкой из латинских букв. Пусть Ml и М2 обозначают подмножества латинских букв, а МЗ-результируюшее подмножество, результат операции. Тогда выполнение теоретико-множественных операций над подмножествами латинских букв выражают следующие соотношения:

· Произведение(пересечение): ABC * CDA = AC

· Сложение(объединение):ABC + CDA = ABCD

Программирование операций над подмножествами латинских букв

При разработке программы выполнения теоретико-множественных операций целесообразно сосредоточить описание подмножеств и операции их обработки в отдельном классе Set. Класс Set должен содержать частные (private) компоненты данные и общедоступные (public) компонентные методы обработки приватных данных. Это позволит оперировать данными класса Set только в компонентных методах и исключит возможность непосредственного обращения к ним из любой внешней функции программы. Исходя из этого, декларация логической структуры класса Set должна иметь следующий формат:

class Set {

 private: /* спецификация компонентных данных */

 public: /* объявление прототипов компонентных методов */

};

В приватную часть класса Set следует включить беззнаковое целое, биты которого соответствуют буквам латинского алфавита. Причем единичный бит означает, что соответствующая его позиция в слове латинских букв (в алфавитном порядке) входит в данное множество. Например, асе представляется следующим образом:

(е)(с)(а)

1 0 1 0 1

Тогда битовые операции над битами этого поля эквивалентны операциям над элементами множеств.

Таким образом, структура класса множеств Set выглядит следующим образом:

class Set { private:

unsigned wordset; /* беззнаковое целое*/ public:

................

};

В общедоступную часть декларации класса Set нужно включить объявление прототипов компонентных методов, которые реализуют обработку подмножеств и отображение результатов обработки. Кроме того, в общедоступной части следует объявить конструктор класса с аргументом, где аргумент - это строка символов, обозначающих заданное подмножество и конструктор без аргументов.

Желаемую обработку подмножеств латинских букв удобно реализовать с помощью компонентных оператор-функций, которые обеспечат перегрузку операций (+,*) в выражениях с объектами класса Set. Наличие оператор-функций позволит конструировать выражения для объектов класса Set в наглядной форме как для объектов простых типов. При наличии соответствующих оператор-функций будет правильно вычисляться, например, следующее выражение программы:

r=f1@f2;

где r, f1 и f2 объекты класса Set, а @ - знак операции.

По формату определения и декларации оператор-функция идентична обычной функции с предопределенным именем operator@, где @ обозначает знак перегружаемой операции, и специальным соглашением по аргументам. Для декларации 2-х требуемых оператор-функций в классе Set может быть рекомендован следующий идентичный формат:

Set operator@(Set &); который отличается только символом перегружаемой операции @ (+,*). Используя эти декларации, компилятор языка C++ будет рассматривать приведенное выше выражение как следующий вызов соответствующей компонентной оператор-функции:

r=f1.ореrаtor@(f2);

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

Перегрузка оператора >> используется для вывода результата.

Для инициализации компонентных данных при создании объектов класса Set в нем предусмотрен конструктор с аргументом типа указатель на строку символов (char*). Поэтому декларация конструктора в общественной части объявления класса Set должен иметь следующий формат:

Set (char*str){…./* Преобразование str в битовый формат */ }

Через аргумент в этот конструктор должно передаваться представление подмножества латинских букв в виде строки символов. Конструктор должен преобразовывать символьное представление подмножества латинских букв в битовые значения компонент-данных класса Set.

Рассмотренные общедоступные компоненты класса Set можно использовать в основной функции main(int argc,char** argv) программы выполнения теоретико-множественных операций. Вычисляемое выражение должно передаваться в функцию main через параметры командной строки вызова программы.

В теле функции main следует задать 3 объекта класса Set для хранения операндов и результата операции. Объекты- операнды должны быть инициализированы строками соответствующих параметров командной стоки. Объект результата можно инициализировать третьей строкой.

Знак операции, передаваемый в функцию main через 2-й параметр командной строки, удобно рассматривать в операторе switch системы программирования C++ для выбора одного из 2-х вариантов вычисляемых дробных выражений. После вычисления выбранного выражения с помощью соответствующей компонентной оператор-функции класса Set ответ нужно сохранить в зарезервированном объекте-результате. Вызов оператор-функции >> класса Set от имени объекта результата, позволит отобразить полученную дробь в потоке стандартного вывода.

Пример 1

Общий вид кода программы

Class Set{

private:

unsigned wordset;

public:

Set(char*str {.../* Преобразование str в битовый формат*/})

Set() {wordset <- 0 }

Set operator +(Set&){...}

Set operator *(Set&){...}

};

main(int argc, char** argv){

SetMl(argv[l]);

 

Set M2(argv[2]);

SetM3;

МЗ= М1+ М2;

Cout<<M3;

МЗ=М1*М2;

Cout<<M3;

}

Контрольные задания

1. Расширить класс Set перегрузкой операций объединения(+) и пересечения(*) над подмножествами заглавных латинских букв.

2. Расширить класс Set перегрузкой операций объединения(+) и пересечения(*) над подмножествами цифр.

3. Расширить класс Set перегрузкой операций объединения(+) и пересечения(*) над подмножествами русских букв.

Рекомендуемая литература

1. Д. Кнут. Искусство программирования для ЭВМ, т.2 Получисленные алгоритмы - М, Мир, 1977 г.

2. П. Лукас. C++ под рукой - Киев, НИПФ "ДиаСофт", 1993 г.


 

Разработка программы игры

Цель работы

Целью лабораторной работы является практическое изучение принципов применения виртуальных функций и абстрактных классов ООП при разработке игровой программы в системе программирования С++.

Стратегия игры

Выигрышную стратегию образует последовательность ходов игрока, когда после каждого хода количество R предметов, которое остается в куче и определяется следующей формулой:

R=N*L+N+1>0

В этой формуле константа L обозначает заданное предельно-допустимое количество предметов, которое может быть взято из кучи за один ход игрока, а целочисленная переменная N определяет число выигрышных ходов, оставшихся до конца партии после текущего хода. Таким образом, после последнего выигрышного хода, когда N равно 0, в куче остается один предмет, который вынужден взять проигравший противник. При первом и остальных выигрышных ходах величина N подбирается таким образом, чтобы получить по формуле наибольшее целое число R, которое меньше текущего числа предметов в куче Н. В соответствие с рассмотренным правилом форсированный выигрыш гарантирован игроку, который первым сделает выигрышный ход, потому что после этого независимо от ответов противника он получает возможность делать только выигрышные ходы до конца партии. Пусть, например, в куче первоначально находится Н=11 предметов, а игрокам разрешается брать не более L=3 предметов за один ход. Тогда первый игрок имеет возможность выиграть партию за 3 хода, после которых в куче остаются следующие количества предметов:

R=2*3+2+1=9; R=1*3+1+1=5; R=0*3+0+1=1

Чтобы осуществить эту выигрышную стратегию, на начальном ходе первый игрок должен взять из кучи Н- R = 11-9=2 предмета, а на остальных ходах отвечать симметрично ходу противника. Например, если в ответ на начальный ход противник берет 3 из 9-ти предметов, то есть в куче остается 6 предметов, то вторым ходом первый игрок должен взять 1 предмет, чтобы оставить в куче 5 предметов. Если противник на втором ответном ходе берет из 5-ти предметов 3. В результате в куче остается 1 предмет, который вынужден взять второй игрок.

Компьютерный интерфейс игры

В компьютерном варианте игры противоборствующими противниками являются компьютер (PEN) и человек (MAN). Право первого хода автоматически предоставляется компьютеру, который должен действовать в соответствии с выигрышной стратегией игры. Если выигрышный ход сделать невозможно, компьютер должен выбрать из кучи 1 предмет. Число предметов, выбранных каждым ходом компьютера, должно отображаться через поток стандартного вывода. Человек может осуществлять произвольные допустимые правилами игры ходы, доказывая число выбранных предметов через поток стандартного ввода. При нарушении правил игры или некорректном (например, нецифровом) вводе партия должна быть блокирована, куча автоматически обнулена, а победителем в игре объявлен компьютер. Каждый ход человека и компьютера должен сопровождаться в потоке стандартного вывода. Запрос должен идентифицировать имя игрока и текущее число предметов в куче. Например, следующий запрос сопровождает первый ход компьютера, когда в куче содержится 11 предметов:

Heap=11 PEN>>

Свой выбор компьютер должен отобразить сразу после запроса. Если компьютер в ответ на этот запрос выбирает 2 предмета, то запрос для ответного хода человека имеет следующий вид:

Heap=9 MAN>>

Чередование запросов для ходов человека и компьютера должно предоставляться до конца партии. После завершения партии в потоке стандартного вывода должно отображаться информационное сообщение, которое объявляет победителя.

Структура программы игры

Разработка программной реализации данной игры, как и большинства других игр подобного типа, должна быть основана на использовании принципов наследования и полиморфизма ООП. В большинстве случаев при разработке объектно-ориентированной программной реализации оптимистических игр, где 2 и более предметов, бывает целесообразно применение принципов наследования и полиморфизма. Наследование обеспечивает тиражирование общих свойств игроков, которые передаются им из описания абстрактного игрока. Полиморфизм снабжает игроков виртуальным методом хода, который имеет одинаковый интерфейс, но реализует различные стратегии игроков. В данном случае основу информационной объектно-ориентированной структуры программы игры должны составить: абстрактный базовый класс Gambler, производные от него классы игроков PEN и MAN, а также класс кучи Heap, разделяемый игроками.

Абстрактный базовый класс Gambler предназначен для описания общих свойств и возможностей, которые присущи обоим игрокам. Его спецификацию образуют защищенные (protected) компонентные данные и общедоступные (public) компонентные методы их обработки. Это обеспечивает доступ к его компонентным данным только собственным компонентным методам производных классов игроков, но исключает любое несанкционированное обращение к ним из любых внешних функций программы игры.

В защищенную (protected) часть декларации базового класса Gambler целесообразно включить спецификацию целочисленных полей heap и limit, определяющих текущий размер кучи и предельное число предметов, которые можно выбирать из кучи за один ход. Кроме целочисленных компонентных данных в классе Gambler нужно предусмотреть указатель поля типа (char *) для идентификации символического имени игрока.

Обработку защищенных компонентных данных класса Gambler должны обеспечивать общедоступные (public) компонентные методы query (запрос) и move (ход) с целочисленным кодом возврата, значение у которого определяет текущий размер кучи.

Компонентный метод query предназначен для отображения в потоке стандартного вывода информационных запросов, сопровождающих ходы игроков по сценарию игры. Для отображения запроса может быть использована библиотечная функция printf системы программирования C/C++ или класс потока стандартного вывода cout.

Компонентный метод swap должен обеспечивать синхронизацию значения размера кучи в производных объектах класса Gambler.

Наиболее простым из них является класс кучи Heap. Он должен содержать закрытые (private) данные о размере кучи (int size), общедоступный (public) компонентный метод (get), конструктор класса полей данных. Он должен использоваться для хранения текущего размера кучи, который измеряется целочисленным значением. Компонентный метод get должен обеспечить доступ игроков к куче, чтобы извлечь требуемое число предметов или контролировать текущий размер кучи. Причем текущий размер кучи идентифицирует целочисленный код возврата метода get. Таким образом, общедоступный метод get позволяет оценить текущий размер кучи без извлечения предметов. Начальный размер кучи в поле должен устанавливаться конструктором класса Heap по значению своего целочисленного параметра.

Абстрактный класс Gambler предназначен для описания общих свойств и возможностей, которые присущи обоим участникам игры. Его спецификацию образуют защищенные (protected) компонентные данные и общедоступные (public) компонентные методы. В защищенной области спецификации класса Gambler должны быть декларированы 1 целочисленное поле (limit) и поля (heap и name). Компонентные данные в поле limit должны фиксировать ограничении по числу предметов, которые могут быть извлечены из кучи за 1 ход. Компонентное поле name предназначено для хранения указателя типа (char *) на символьное имя игрока. Компонентные данные в поле heap должны иметь тип указателя на объект класса Heap (Heap *), чтобы обеспечить адресацию кучи предметов участниками игры. Перечисленные поля компонентных данных должны инициализироваться конструктором класса Gambler, который должен иметь 3 аргумента соответствующих типов. Значения полей компонентных данных должны устанавливаться по аргументам конструктора через список инициализации. Конструктор должен быть специфицирован в общедоступной части класса Gambler. Кроме конструктора в общедоступной части класса Gambler должны быть определены 2 общедоступных компонентных метода query (запрос) и move (ход). Оба метода имеют целочисленный код возврата. Через query (запрос) передается текущий размер кучи. Класс Gambler специфицируется чистой виртуальной функцией с нулевым кодом, которая декларирует только внешний интерфейс хода игрока. В описании класса Gambler она должна быть объявлена следующим образом:

Пример 1

Class Gambler {

Public:

Virtual int move()=0;

};

Различные реализации метода хода должны быть даны в классах игроков PEN и MAN, которые являются производными от базового класса Gambler, учитывая особенности ходов человека и компьютера, соответственно. Компоненты базового абстрактного класса Gambler перегружают в виртуальную функцию хода в каждом из производных классов конкретным кодом.

Рекомендуемая литература

1. Д. Кнут. Искусство программирования для ЭВМ, т.2 Получисленные алгоритмы - М, Мир, 1977 г.

2. П. Лукас. C++ под рукой - Киев, НИПФ "ДиаСофт", 1993 г.


 

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

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

 

#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++



Поделиться:


Последнее изменение этой страницы: 2021-07-18; просмотров: 143; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 18.227.0.192 (0.113 с.)