Переопределение операций. Организация потокового ввода-вывода

Страницы работы

Содержание работы

Министерство Образования и Науки РФ

Новосибирский Государственный Технический Университет

ПОЯСНИТЕЛЬНАЯ ЗАПИСКА

по дисциплине «Программирование на языке высокого уровня»

«Переопределение операций. Организация потокового ввода-вывода.»

Факультет: ИДО                                           Преподаватель:
Группа: ДТ-931                                            Васюткина И. А.
Студент:
Черепанов А. М.

Новосибирск, 2011г.

Оглавление

Задание. 3

Описание структур данных и алгоритмов. 4

Функциональное описание. 5

Класс-квадратная матрица. 5

Вывод. 6

Приложение: текст программы с комментариями. 7

smatrix.h…………………………………………………………………………………………………8

smatrix.cpp. 9

main.cpp. 9


Задание

Для класса семинара №1  реализовать набор перегруженных операций для работы с объектами классами: сложение, вычитание, инкремент постфиксный и префиксный, преобразование к разным типам и т.д. (по содержанию задачи).

Перегрузить операции ввода/вывода, позволяющие осуществлять ввод и вывод в удобной фоpме объектов классов:

-  ввод с клавиатуры и вывод на дисплей;

-  в текстовый файл и из текстового файла;

-  в двоичный файл и из двоичного файла.

Изменить демонстpационную пpогpамму.


Описание структур данных и алгоритмов

При выполнении программы создаем объект конструктора по умолчанию. Выделяем память для коэффициентов матрицы путем создания динамического массива и присваиваем ему коэффициент равным 0.  Алгоритм работы конструктора с параметрами практически аналогичен, за исключением  того что мы указываем размерность и значения коэффициентов матрицы.

Конструктор копирования получает на входе объект матрицы и копирует коэффициенты из переданного объекта.  Деструктор класса удаляет значения коэффициентов матрицы и  сам массив тем самым освобождая память при окончании работы программы.

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


 
Функциональное описание

Класс-квадратная матрица

Структуры и переменные.

      int p;      // порядок матрицы

      double **k; // динамический массив коэффициентов

Функция

Описание

1

smatrix()

Конструктор по умолчанию

2

smatrix(int pp,double val=0);

Конструктор с параметрами

3

smatrix(const smatrix& m);

Конструктор копирования

4

~smatrix();

Деструктор

5

void enter(char* mn);

Ввод коэффициентов

6

void transpose();

Транспонирование

7

double determiner();

Вычисление определителя

8

void sum(const smatrix& m);

Сложение матриц

9

void neg();

Смена знака матрицы

10

void show(char *mn);

Вывод матриц

11

void binread(fstream& ff);

Чтение из двоичного файла

12

void binwrite(fstream& ff);

Запись в двоичный файл

13

smatrix operator + (const smatrix& m);

Оператор сложения

14

smatrix operator - (const smatrix& m);

Оператор вычитания

15

smatrix& operator = (const smatrix& m);

Оператор присваивания

16

smatrix operator ++(int);

Постфиксный инкремент

17

smatrix& operator ++();

Префиксный инкремент

18

operator int();

Преобразование в int

19

friend fstream& operator << (fstream& fs,smatrix& m);

Вывод в поток

20

friend ostream& operator << (ostream& os,smatrix m);

Вывод в поток

21

friend istream& operator >> (istream& is,smatrix& m);

Ввод из потока


Вывод

В семинаре реализован шаблон класса для работы с квадратными матрицами. Класс позволяет и обеспечивает вычисление простейших операция над матрицами: транспонирование матрицы, расчет определителя, вывод матрицы в удобной форме.  


Приложение: текст программы с комментариями

Smatrix.h

#include <iostream>

#include <fstream>

#include <iomanip>

using namespace std;

// класс - квадратная матрица

class smatrix{

      int p;      // порядок матрицы

      double **k; // динамический массив коэффициентов

public:

      smatrix();  // конструктор по умолчанию

      smatrix(int pp,double val=0);// конструктор с параметрами

      smatrix(const smatrix& m);// конструктор копирования

      ~smatrix();// деструктор

      void enter(char* mn);// ввод коэффициентов

      void transpose();// транспонирование

      double determiner();// вычисление определителя

      void sum(const smatrix& m);// сложение с другой матрицей

      void neg();// смена знака матрицы

      void show(char *mn,ostream& os=cout);// вывод матрицы

      void binread(fstream& ff);// чтение из двоичного файла

      void binwrite(fstream& ff);// запись в двоичный файл

      smatrix operator + (const smatrix& m);// оператор сложения

      smatrix operator - (const smatrix& m);// вычитания

      smatrix& operator = (const smatrix& m);// оператор присваивания

      smatrix operator ++(int);// постфиксный инкремент

      smatrix& operator ++();// префиксный инкремент

      operator int();// преобразования в int

      friend fstream& operator << (fstream& fs,smatrix& m);// вывод в текстовый файловый поток

      friend ostream& operator << (ostream& os,smatrix m);// вывод в текстовый поток

      friend istream& operator >> (istream& is,smatrix& m);// ввод из текстового потока

      friend fstream& operator >> (fstream& is,smatrix& m);// ввод из текстового файла

};

Main.cpp

#include "smatrix.h"

#include <conio.h>

void main(){

      fstream txt,bin;  // текстовый и бинарный потоки

      smatrix m1(2),m2(2);// две матрицы

      txt.open("text.txt",ios::in);// ввести данные первой матрицы из текстового файла

      txt >> m1;

      txt.close();

      cin >> m2;        // ввести данные второй матрицы с клавиатуры

      //bin.open("bin.bin",ios::in|ios::binary);// вторую матрицу - из бинарного потока

      //m2.binread(bin);

      //bin.close();

      cout << "m1" << endl <<  m1 << endl << endl;// вывести обе матрицы

      cout << "m2" << endl << m2 << endl << endl;

      cout << "m2++" << endl << m2++ << endl << endl;// протестировать операции инкремента

      cout << "++m2" << endl << ++m2 << endl << endl;

      cout << "m1+m2" << endl << m1+m2 << endl << endl;// сложения

      cout << "m1-m2" << endl << m1-m2 << endl << endl;// вычитания

      cout << "(int)m1 = " << (int)m1 << endl << endl;// и преобразования в тип int

      // записать полученные матрицы в текстовый и бинарный файлы

      txt.open("text2.txt",ios::out);

      txt << m1;

      txt.close();

cmatrix.cpp

#include "smatrix.h"

// конструктор по умолчанию

smatrix::smatrix(){

      p=1;// порядок матрицы первый

      k=new double*[1];// создать ДМ коэффициентов

      k[0]=new double[1];

      k[0][0]=0;// единственный коэффициент равен нулю

}

// конструктор с параметрами

smatrix::smatrix(int pp,double val){

Похожие материалы

Информация о работе