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