Архив 200руб
Содержимое архива
учеб. Павловская Т.А.
Программирование на языке высокого уровня С#
Лабораторная работа № 8
Вариант по журналу 1-1, 2-2, 20-20, 21-1, 22-2.
Готовый 10 вариант
СОДЕРЖАНИЕ
1 Введение 3
2 Задание на курсовой проект 4
3 Написание листинга вещественной матрицы 5
4 Заключение 12
5 Список использованной литературы 13
Введение
Объектно-ориентированные языки программирования пользуются в последнее время большой популярностью среди программистов, так как они позволяют использовать преимущества объектно-ориентированного подхода не только на этапах проектирования и конструирования программных систем, но и на этапах их реализации, тестирования и сопровождения.
Наиболее распространенным объектно-ориентированным языком
программирования, безусловно, является C. Свободно распространяемые коммерческие системы программирования C существуют практически на любой платформе.
Внедрение в практику написания программ объектно-ориентированной парадигмы дает развитие новых областей информатики, значительное повышение уровня технологичности создаваемых программных средств, сокращение затрат на разработку и сопровождение программ, их повторное использование, вовлечение в процесс расширения интеллектуальных возможностей ЭВМ.
С# является языком программирования общего назначения. Именно этот язык хорошо известен своей эффективностью, экономичностью, и переносимостью. Указанные преимущества С# обеспечивают хорошее качество разработки почти любого вида программного продукта.
Использование С# в качестве инструментального языка позволяет получать быстрые и компактные программы. Во многих случаях программы, написанные на С#, сравнимы по скорости с программами, написанными на языке ассемблера.
Задание на курсовой проект
Классы и операции
Описать класс, реализующий тип данных «вещественная матрица» и работу с ними. Класс должен реализовывать следующие операции над матрицами:
• Умножение, деление (как на другую матрицу, так и на число);
• Комбинированные операции присваивания ( *=, /= );
• Операции воздействия в степень;
• Методы вычисления детерминанта и нормы;
• Доступ к элементам по индексам
Написать программу , демонстрирующую все разработанные элементы класса.
Ход выполнения работы:
1. Запускаем Microsoft Visual C# 2010 Express, создаем проект «Консольное Приложение»
2. Листинг приложения на C#:
Class
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace probasharp
{
public class Matrix
{
public float[,] matrix = null;
public int CountColumn { get; private set; }
public int CountRow { get; private set; }
public Matrix(int x = 1, int y = 1, bool autoGeneration = true, int startGen = 1)
{
if (autoGeneration) generator(x, y, startGen);
else
matrix = new float[x, y];
CountColumn = y;
CountRow = x;
}
public float this[int x, int y]
{
get { return matrix[x, y]; }
set { matrix[x, y] = value; }
}
public static Matrix operator *(Matrix x1, Matrix x2)
{
if (x1.CountColumn != x2.CountRow) throw new ArgumentException("Число столбцов матрицы А не равно числу строк матрицы В.");
Matrix ret = new Matrix(x1.CountRow, x2.CountColumn, false);
for (int i = 0; i < x1.CountRow; i++)
for (int j = 0; j < x2.CountColumn; j++)
for (int k = 0; k < x2.CountRow; k++)
ret[i, j] += x1[i, k] * x2[k, j];
return ret;
}
public static Matrix operator *(Matrix x1, int constNum)
{
Matrix ret = new Matrix(x1.CountRow, x1.CountColumn, false);
for (int i = 0; i < x1.CountColumn * x1.CountRow; i++)
{
int X = i / x1.CountColumn;
int Y = i - x1.CountColumn * X;
ret[X, Y] = x1[X, Y] * constNum;
}
return ret;
}
public static Matrix operator /(Matrix x1, Matrix x2)
{
if (x1.CountColumn != x2.CountRow) throw new ArgumentException("Число столбцов матрицы А не равно числу строк матрицы В.");
Matrix ret = new Matrix(x1.CountRow, x2.CountColumn, false);
ret = x1 * x2.Inverse();
return ret;
}
public static Matrix operator /(Matrix x1, int constNum)
{
Matrix ret = new Matrix(x1.CountRow, x1.CountColumn, false);
for (int i = 0; i < x1.CountColumn * x1.CountRow; i++)
{
int X = i / x1.CountColumn;
int Y = i - x1.CountColumn * X;
ret[X, Y] = x1[X, Y] / constNum;
}
return ret;
}
public Matrix POW(int constNum)
{
Matrix ret = new Matrix(this.CountRow, this.CountColumn, false);
for (int i = 0; i < this.CountColumn * this.CountRow; i++)
{
int X = i / this.CountColumn;
int Y = i - this.CountColumn * X;
ret[X, Y] = (float)Math.Pow((double)this.matrix[X, Y],(double)constNum);
}
return ret;
}
public float[] GetRow(int row)
{
if (row >= CountRow) throw new IndexOutOfRangeException("Индекс строки не принадлежит массиву.");
float[] ret = new float[CountColumn];
for (int i = 0; i < CountColumn; i++)
ret = matrix[row, i];
return ret;
}
public void SetRow(float[] values, int row)
{
if (row >= CountRow) throw new IndexOutOfRangeException("Индекс строки не принадлежит массиву.");
for (int i = 0; i < (CountColumn > values.Length ? values.Length : CountColumn); i++)
matrix[row, i] = values;
}
public Matrix Inverse()
{
if (CountRow != CountColumn) throw new ArgumentException("Обратная матрица существует только для квадратных, невырожденных, матриц.");
Matrix ret = new Matrix(CountRow, CountColumn, false);
ret.matrix = (float[,])this.matrix.Clone();
float determinant = ret.Determinant();
if (determinant == 0) return ret; //Если определитель == 0 - матрица вырожденная
for (int i = 0; i < CountRow; i++)
{
for (int t = 0; t < CountColumn; t++)
{
Matrix tmp = ret.Exclude(i, t);
ret[t, i] = tmp.Determinant() / determinant;
}
}
return ret;
}
public float Determinant()
{
if (CountColumn != CountRow) throw new ArgumentException("Вычисление определителя возможно только для квадратных матриц.");
Matrix _matrix = new Matrix(CountRow, CountColumn, false);
_matrix.matrix = (float[,])this.matrix.Clone();
float det = 1;
int order = CountRow;
for (int i = 0; i < order - 1; i++)
{
float[] masterRow = _matrix.GetRow(i);
det *= masterRow;
if (det == 0) return 0;
for (int t = i + 1; t < order; t++)
{
float[] slaveRow = _matrix.GetRow(t);
float[] tmp = MulArrayConst(masterRow, slaveRow / masterRow);
float[] source = _matrix.GetRow(t);
_matrix.SetRow(SubArray(source, tmp), t);
}
}
det *= _matrix[order - 1, order - 1];
return det;
}
public float Norma()
{
float s = 0;
for (int i = 0; i <CountColumn ; i++)
{
float max = matrix[0,i];
for (int j = 1; j < CountRow; j++)
{
if(matrix[i,j]>max)
max=matrix[i,j];
}
s += max;
}
return s;
}
public Matrix Exclude(int row, int column)
{
if (row > CountRow || column > CountColumn) throw new IndexOutOfRangeException("Строка или столбец не принадлежат матрице.");
Matrix ret = new Matrix(CountRow - 1, CountColumn - 1, false);
ret.matrix = (float[,])this.matrix.Clone();
int offsetX = 0;
for (int i = 0; i < CountRow; i++)
{
int offsetY = 0;
if (i == row) { offsetX++; continue; }
for (int t = 0; t < CountColumn; t++)
{
if (t == column) { offsetY++; continue; }
ret[i - offsetX, t - offsetY] = this[i, t];
}
}
return ret;
}
public override string ToString()
{
StringBuilder ret = new StringBuilder();
if (matrix == null) return ret.ToString();
for (int i = 0; i < CountRow; i++)
{
for (int t = 0; t < CountColumn; t++)
{
ret.Append(matrix[i, t]);
ret.Append("\t");
}
ret.Append("\n");
}
return ret.ToString();
}
float[] SubArray(float[] A, float[] B)
{
float[] ret = (float[])A.Clone();
for (int i = 0; i < (A.Length > B.Length ? A.Length : B.Length); i++)
ret -= B;
return ret;
}
float[] MulArrayConst(float[] array, float number)
{
float[] ret = (float[])array.Clone();
for (int i = 0; i < ret.Length; i++)
ret *= number;
return ret;
}
void generator(int x, int y, int startGen)
{
matrix = new float[x, y];
Random rnd = new Random(startGen);
for (int i = 0; i < x * y; i++)
{
int X = i / y;
int Y = i - y * X;
matrix[X, Y] = rnd.Next(-10, 10);
}
}
}
}
main
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace probasharp
{
using System;
using System.Text;
class Program
{
static void Main(string[] args)
{
Matrix m1 = new Matrix(3, 3, true, 22);
Matrix m2 = new Matrix(3, 3, true, 28);
Console.WriteLine("{0}\n{1}", m1, m2);
Console.WriteLine(m1 * m2);
Console.WriteLine(m1 * 4);
Console.WriteLine(m1 / m2);
Console.WriteLine(m1 / 2);
Console.WriteLine(m1 *= m2);
Console.WriteLine(m1 /= m2);
Console.WriteLine(m1.POW(2));
Console.WriteLine(m1.Determinant());
Console.WriteLine(m1.Norma());
Console.WriteLine(m1[1,1]);
Console.ReadKey();
}
}
}
3. После написания кода приложения, проводим отладку
Рисунок 2 – Результат работы приложения
Заключение
На языке объектно-ориентированного программирования в программе C# написав листинг программы, мы создали вещественную матрицу.
Реализовывав следующие операции матрицы:
Умножение, деление, комбинированные операции присваивания ( *=, /= ),
операции воздействия в степень, методы вычисления детерминанта и нормы, доступ к элементам по индексам.
Список использованной литературы
1. Павловская Т.А., C#. Программирование на языке высокого уровня. Учебник для вузов, СПб.: Питер, 2009. – 432с.:ил.
2. Джейсон, Прайс; Майк, Гандэрлой Visual C# .NET. Полное руководство; КОРОНА принт, 2004. - 960 c.
3. . Нейгел, К. C# 2005 для профессионалов; Вильямс, 2006. - 763 c.
4. Рихтер, Джефри CLR via C#. Программирование на платформе Microsoft .NET Framework 2.0 на языке C#; Питер, 2007. - 656 c.
5. Робинсон, С.; Корнес, О.; Глинн, Д. и др. C# для профессионалов; М.: Лори, 2005. - 396 c.
Объектно-орентир. программирование
3 курс 2 семестр
- Артём Мамзиков
- Admin
- Сообщения: 853
- Стаж: 5 лет 7 месяцев
- Откуда: Вологодская область
- Поблагодарили: 37 раз
- Контактная информация:
Артём Мамзиков
Вернуться в «Объектно-орентир. программирование»
Перейти
- Информационные технологии
- ↳ Заббикс Zabbix
- ↳ Навигация по разделам Zabbix
- ↳ Установка Debian
- ↳ Установка Заббикс и Дополнений
- ↳ Windows
- ↳ Шаблоны Заббикс
- ↳ Windows, Server
- ↳ Active Directory
- ↳ Аппаратное обеспечение Общее для всех систем
- ↳ СЕРВЕРА
- ↳ HP
- ↳ IBM
- ↳ INTEL
- ↳ DELL
- ↳ Kraftway
- ↳ Supermicro
- ↳ OS Операционные системы
- ↳ Virtual Machine Виртуальные Машины
- ↳ Proxmox
- ↳ Hyper-V
- ↳ KVM - Виртуальная машина
- ↳ VMware
- ↳ DNS Service
- ↳ JMX
- ↳ Мониторинг Сессий Пользователей в OS
- ↳ ВКС видеоконференцсвязь
- ↳ Zimbra
- ↳ Коммутаторы Маршрутизаторы Роутеры
- ↳ Питание: Измерение распределение блоки питания; ИБП
- ↳ Веб Проверки
- ↳ Файлы и Папки
- ↳ Файловые Хранилища NAS
- ↳ Базы Данных/Databases
- ↳ VipNet
- ↳ Офис OFFICE
- ↳ SNMP
- ↳ Прочие различные шаблоны
- ↳ Zabbix Прикладная программа
- ↳ Templates/Modules
- ↳ Преобразования в Zabbix
- ↳ API Zabbix
- ↳ Тестирование
- ↳ Вопросы по Zabbix
- ↳ Linux
- ↳ MySql
- ↳ Windows
- ↳ OCS INVENTORY
- ↳ Keenetic
- ↳ Скрипты
- ↳ Сканирование сети получение Логина пользователя
- ↳ Потоковое цифровое аудио и видеовещание
- ↳ PROXY Прокси
- ↳ Moodle
- ↳ PHPBB - Форумный Движок
- ↳ Расширения для PHPBB
- ТВ Фильмы Сериалы
- ↳ Smart TV
- ↳ Android
- ↳ Windows
- Прочее
- ↳ Из учёбы Информатика и вычислительная техника
- ↳ Операционные системы
- ↳ Инженерная графика
- ↳ Культурология
- ↳ Математика
- ↳ Физика
- ↳ Программирование
- ↳ Философия техники
- ↳ История автоматики и вычислительной техники
- ↳ Алгебра и Геометрия
- ↳ Дискретная математика
- ↳ Математическая логика и теория алгоритмов
- ↳ Электротехника
- ↳ Программирование
- ↳ Графическое программирование
- ↳ История
- ↳ Операционные системы
- ↳ Персональные компьютеры
- ↳ Программируемая логика
- ↳ ЭВМ и Периферийные устройства
- ↳ Электроника и схемотехника
- ↳ Базы данных
- ↳ микропроцессорные системы
- ↳ Основы теории надежности
- ↳ Основы теории управления ТАУ САУ
- ↳ Социология
- ↳ Теория вероятности
- ↳ Технология программирования
- ↳ Моделирование систем
- ↳ Объектно-орентир. программирование
- ↳ Программирование на АССЕМБЛЕРЕ
- ↳ САПР системы автоматизированного проектирования
- ↳ Программирование Web
- ↳ Сети и телекоммуникации
- ↳ Системное программное обеспечение
- ↳ Защита информации
- ↳ Системы организации производства
- ↳ Психология и педагогика
- ↳ ВКР
- Электрика
- ↳ 220V электрика
- Сантехника
- ↳ Раздел по сантехнике
- ↳ Ваша первая категория
- ↳ Ваш первый форум
- Другое
- Из рубрики частного дома