Министерство Образования и Науки РФ
Новосибирский Государственный Технический Университет
ПОЯСНИТЕЛЬНАЯ ЗАПИСКА
по дисциплине «Программирование на языке высокого уровня»
«Переопределение операций. Организация потокового ввода-вывода.»
Факультет:
ИДО                                           Преподаватель: 
Группа: ДТ-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){
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.