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

  • Вид работы:
    Курсовая работа (т)
  • Предмет:
    Информационное обеспечение, программирование
  • Язык:
    Русский
    ,
    Формат файла:
    MS Word
    119,06 Кб
  • Опубликовано:
    2013-04-06
Вы можете узнать стоимость помощи в написании студенческой работы.
Помощь в написании работы, которую точно примут!

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















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

Введение

матрица программирование язык

На сегодняшний день математическое программирование - важная составляющая всего программирования. Большие и сложные вычисления благодаря простым программам становятся простыми.

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

В качестве среды программирования выбрана MSVisualStudio 2008 и язык программирования C++.

.       
Вектор

Матрица состоящая только из одного столбца или строки называется вектором. Размерностью вектора называется число его элементов.


.1 Сумма двух векторов

Пусть в линейном пространстве вектора представлены так:


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


1.2 Разность двух векторов

Пусть в линейном пространстве вектора представлены так:


Тогда разностью векторов  будет называться следующий вектор:


1.3 Произведение вектора на число

Если есть некоторое число x и вектор  .

Тогда произведением вектора  на число x будет называться следующий вектор


1.4 Скалярное произведение двух векторов

Скалярное произведение двух векторов  и  , заданных своими координатами, может быть вычислено по формулу .

2.     
Классы

Класс - это тип структуры, позволяющий включать в описание типа не только элементы данных, но и функции (функции-элементы или методы).

Для ограничения доступа к элементам класса используются следующие спецификаторы доступа:

· public     - ограничений доступа нет;

· protected          - доступны только в порожденных классах;

· private    - доступны только в своем классе.

.1 Конструкторы и деструкторы

Добавим в класс функцию Vector(int sz)

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

~Vector()- специальный оператор, который называется деструктором. Он необходим для того, чтобы корректно завершить существование нашего объекта, то есть освободить память в куче.

Деструктор, как и конструктор, не должен возвращать значение и иметь явное описание типа. В отличие от конструкторов, которых может быть несколько у одного и того же класса, деструктор должен быть один и не должен иметь аргументов.(const Vector &A)называется конструктором копий. Он используется при создании объекта с инициализацией его объектом того же типа.

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

Неявный конструктор копии обеспечивает простое поэлементное копирование одного объекта во второй. Такой вид копирования часто называют поверхностным.

.2 Перегрузка операций

Большинство операций языка С++ для новых типов данных может быть перегружено. Для перегрузки операции необходимо создать функцию с названием, состоящим из ключевого слова operator и знака перегружаемой операции. Количество параметров этой функции определяется тем, одноместная или двухместная операция перегружается, а также наличием неявных элементов у методов класса.

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

Например, чтобы перегрузить оператор сложения, нужно определить функцию с именем operator+.

Операторные функции перегруженных операторов, за исключением new и delete,должны подчиняться следующим правилам:

операторная функция должна быть либо нестатической функцией-членом класса, либо принимать аргумент типа класса или перечислимого типа, или аргумент, который является ссылкой на тип класса или перечислимый тип;

операторная функция не может изменять число аргументов или приоритеты операторов и порядок их выполнения по сравнению с использованием соответствующео оператора для встроенных типов данных;

операторная функция унарного оператора, объявленная как функция-член, не должна иметь параметров; если же она объявлена как глобальная функция, она должна иметь один параметр;

операторная функция не может иметь параметры по умолчанию и др.

.3 Дружественные функции

Согласно концепции инкапсуляции данных С++ функция, не являющаяся членом класса, не может получить доступ к его закрытым (private) элементам. В языке С++ реализована возможность обойти данное ограничение с помощью друзей. С++ позволяет объявить 2 вида друзей класса: дружественную функцию или дружественный класс. Дружественные функции не являются членами класса, но тем не менее имеют доступ к его закрытым членам. Более того, одна такая функция может иметь доступ к закрытым членам нескольких классов. Чтобы объявить функцию дружественной некоторому классу, в определение этого класса включают ее прототип, перед которым ставится ключевое слово friend. ostream&operator<<(ostream& os, const Vector& A)

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

Функция может быть дружественна сразу нескольким классам.

.4 Неявный указатель this

Каждый метод класса содержит в качестве данного следующий указатель, передаваемый при вызове метода в качестве параметра:

имя_типа *this;

Этот указатель представляет собой адрес конкретного объекта, для которого был вызван метод.

Использовать указатель this для доступа к элементам класса можно, но вряд ли целесообразно, поскольку это и так подразумевается по умолчанию. Явно использовать this необходимо только в тех случаях, когда требуется работа непосредственно с адресами объектов, например, при организации динамических структур данных.

Код программы

#include"stdafx.h"

#include<iostream>

#include"conio.h"

#include"time.h"namespace std;

// КЛАСС VectorVector

{:*V;sz;      // число строк:

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

// конструктор(int sz);

// конструктор копий(const Vector &A);

// заполнение вектора случайными числамиSetVector();  

// перегрузка оператора сложенияoperator+(Vector &);

// перегрузка оператора вычитанияoperator-(Vector &);

// перегрузка оператора умножения на числоoperator*(const int&);

// перегрузка оператора умножение вектора на векторoperator*(Vector &);

// перегрузка оператора вывода в потокostream&operator<<(ostream& os, const Vector& A);

// деструктор

~Vector();

};

// Конструктор по умолчанию::Vector()

{= NULL;

}

// Конструктор::Vector(int _sz)

{= _sz;= new double [sz];(int i = 0; i < sz; i++)[i] = 0;

}

// Конструктор копий::Vector(const Vector &A)

{= A.sz;= new double [sz];(int i = 0; i < sz; i++)[i] = A.V[i];

}

// Заполнение вектора случайными числамиVector::SetVector()

{(int i = 0; i < sz; i++)

{[i]=(double)((rand()%200)-100.0);

}

}

// Перегрузка оператора присваивания& Vector::operator =(Vector &A)

{(V!=NULL)

{[] V;

}= new double [sz];= A.sz;(int i = 0; i < sz; i++)[i] = A.V[i];*this;

}

// Сложение векторовVector::operator+(Vector &A)

{temp(sz);(sz!=A.sz)

{<<"Сложение векторов невозможно.\n"

"Размеры векторов не совпадают!\n"

"Программа завершила работу.\n";(0);

}

{(int i = 0; i < sz; i++).V[i] = V[i] + A.V[i];temp;

}

}

// Вычитание векторовVector::operator-(Vector &A)

{temp(sz);(sz!=A.sz)

{<<"Сложение векторов невозможно.\n"

"Размеры векторов не совпадают!\n"

"Программа завершила работу.\n";(0);

}

{(int i = 0; i < sz; i++).V[i] = V[i] - A.V[i];temp;

}

}

// Умножение вектора на числоVector::operator*(const int&k)

{temp(sz);(int i = 0; i < sz; i++).V[i] = V[i]*k;temp;

}

// Умножение вектора на векторVector::operator*(Vector &A)

{temp(1);(int i = 0; i < sz; i++).V[0] += V[i] * A.V[i];temp;

}

// Деструктор::~Vector()

{[] V;

}

// Операция вывода&operator<<(ostream& os, const Vector& A)

{<< '\n';(int i = 0; i < A.sz; i++)

{<< A.V[i] << "\t";

}os;

}_tmain(int argc, _TCHAR* argv[])

{(LC_CTYPE, "Russian_Russia.1251");((unsigned)time(NULL));k, l, m, x;numb;<< "Введите размеры векторов: " << endl;<< "\tПервый вектор: ";>> k;<< endl << "\tВторой вектор: ";>> l;<< endl << "\tВведите число: " ;>> x;(k == l)= k;

{<< "Размеры векторов не совпадают. Операции невозможны";

_getch();0;

}v(k), s(l), res(m);.SetVector();.SetVector();<< endl << v << endl;<< s << endl;<< "\nВыберете операцию:";<< "\nСложение двух векторов №1";<< "\nРазность двух векторов №2";<< "\nУмножение двух векторов №3";<< "\nУмножение вектора на число №4";<< "\nВыход - введите 0\n";>> numb;<< endl;(numb == 0)0;

{(numb)

{1:

{= v + s;<< "Результат\t" << res << endl;;

}2:

{= v - s;<< "Результат\t" << res << endl;;

}3:

{= v * s;<< "Результат\t" << res << endl;;

{= v * x;<< "Результат\t" << res << endl;;

}

}

_getch();

}0;

}

Результаты



3.  Проверка результатов в Mathcad

Сумма двух векторов





Разность двух векторов





Скалярное произведение двух векторов





Произведение вектора на число





Список литературы

1.      Бьeрн Страуструп. Справочное руководство по C++, 1995

.        Глушаков С.В. Программирование на С++, изд.2-е, доп. и переработ. - М.:АСТ, 2008. - 685 с.

.        Харви Дейтел, Пол Дейтел. Как программировать на С. - Бином-Пресс, 2008. - 1024 с.

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

 

Не нашли материал для своей работы?
Поможем написать уникальную работу
Без плагиата!