bsuir.info
БГУИР: Дистанционное и заочное обучение
(файловый архив)
Вход (быстрый)
Регистрация
Категории каталога
Другое [197]
Бухучет [16]
ВМиМОвЭ [4]
ОДМиТА [13]
ОЛОБД [17]
ООПиП [67]
ОС [19]
ПСОД [47]
Форма входа
Поиск
Статистика

Онлайн всего: 19
Гостей: 19
Пользователей: 0
Файловый архив
Файлы » ИСиТвЭ » Другое

ИСиТвЭ (о.), ООП, Лабораторная работа, вар.1, 2011
Подробности о скачивании 13.12.2014, 17:10
Министерство образования Республики Беларусь

Учреждение образования
Белорусский государственный университет информатики и радиоэлектроники

Кафедра экономической информатики

Лабораторная работа № 1-2
на тему « Класс. Объект »

Выполнил:
Вариант №1

Проверил(а):
Русак Т.В.

Минск,2012

Лабораторная работа №1-2

Тема работы: Класс, объект. Компоненты класса: данные, методы, конструктор и деструктор.

Цель работы: Разработать класс вектор (одномерный динамический массив). Методы класса: конструкторы, деструктор и несколько методов выполняющих преобразование в массиве (например, нахождения max значения и сортировки).

Вариант задания №1

Создать класс матрица (data). Данный класс содержит указатель на int, размер строк и столбцов и состояние ошибки. Определить конструктор без параметров, конструктор с одним параметром и конструктор с двумя параметрами, деструктор. Определить методы доступа: возвращать значение элемента (i,j) и адрес этого элемента. Определить функцию печати. Определить функцию сложения и вычитания (матрицы с матрицей), умножение матрицы на матрицу. Определить умножение матрицы на число. Проверить работу этого класса. В случае нехватки памяти, несоответствия размерностей, выхода за пределы устанавливать ошибки.

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

#include "stdafx.h"
#include <stdio.h>
#include "conio.h"
#include "iostream"

class data{
private:
int n;
int m;
int **mtr;
bool eror;
public:
data(); //конструктор без параметров
data (int nn, int mm); //конструктор c 2-мя параметрами
data(const data & ob); //конструктор копирования
int summa(data t); //функция сложения двух матриц
void vvod(int,int); //функция ввода матрицы
int vivod(); //функция вывода матрицы
void proizvedenie(int); //функция произведения матрицы на число
void proizvedeniemtr(data t); //функция произведения двух матриц
~data(); //деструктор
int shou();
};

data::data(){
eror=false;
n=-1;
mtr=NULL;
}

data::data(const data & ob){
n=ob.n;
m=ob.m;
mtr= new int*[n];
for (int i=0; i<n; i++)
mtr[i]=new int [n];
for (int i=0; i<m; i++)
for (int j=0; j<n; j++)
mtr[i][j]=ob.mtr[i][j];

}

data::data (int nn, int mm){
n=nn; m=mm; //присвоение внутренним переменным переданные параметры
mtr= new int*[n]; //память под массив указателей
if(mtr==NULL){
printf("В памяти данные отсутствуют!!!");
return;
}
for (int i=0; i<n; i++){
mtr[i]=new int[m]; //память для строки
if(mtr==NULL ){
printf("В памяти данные отсутствуют!!!");
}
for (int j=0;j<n; j++)
mtr[i][j]=0;
}
}

int data::shou(){
if(mtr==NULL) return true;
else return false;
}

int data::summa(data t2){
if(t2.n==n&&t2.m==m){
for (int i=0;i<n;i++)
for (int j=0;j<m;j++)
mtr[i][j]=mtr[i][j]+t2.mtr[i][j];
}
else{
eror=true;
printf("Ошибка в несоотвествии размерности матрицы!!!\nПовторите операцию сначала!!!");
}
return eror;
}

data::~data(){
for(int i=0; i<n; i++)
delete [] mtr[i];
delete [] mtr;
}

void data::vvod(int d, int r){
eror=false;
n=d;
m=r;
if(mtr==NULL ){
mtr=new int* [d];
for(int i=0;i<d;i++)
*(mtr+i) = new int[m];
}
for (int i=0;i<d;i++)
for (int j=0;j<m;j++){
printf("Введите элемент [%d,%d] :", i+1, j+1);
scanf("%d",&mtr[i][j]);
}
}

void data:: proizvedenie(int u){
if(mtr!=NULL ){
for (int i=0;i<n;i++){
for (int j=0;j<m;j++)
mtr[i][j]=mtr[i][j]*u;
}
}
else {
printf("В памяти данные отсутствуют!!!");
}
}

int data::vivod(){
eror=false;
if(n!=-1&&eror==false){
printf("\nОсновная матрица: \n");
for (int i=0;i<n;i++){
for (int j=0;j<m;j++)
printf(" %d ", mtr[i][j]);
printf("\n");
}
printf("\n");
}
else {
printf("В памяти данные отсутствуют!!!\n");
eror=true;
}
return eror;
}

void data::proizvedeniemtr(data t2){
if(mtr!=NULL ){
for(int i=0;i<n;i++)
for(int j=0;j<m;j++)
for(int t=0;t<m;t++)
mtr[i][j]+=mtr[i][j] * t2.mtr[i][j];
}
else {
printf("В памяти данные отсутствуют!!!\n");
}
}

void main(){
setlocale(LC_ALL,"Russian");
int k=0;
int a,b,u;
data t,t2;
while(1){
printf("\n------------------МЕНЮ---------------------\n");
printf("1 - Ввод матрицы \n");
printf("2 - Вывод матрицы\n");
printf("3 - Умножение матрицы на число\n");
printf("4 - Сумма двух матриц\n");
printf("5 - Произведение двух матриц\n");
printf("6 - Выход\n");
printf("Введите ваш выбор: ");
scanf("%d", &k);
switch(k){
case 1: {
printf("Введите размерность матрицы:\n");
scanf("%d%d", &a, &b);
t.vvod(a,b);
break;
}
case 2: {
if (t.vivod()==true)
printf("ОШИБКА!!!") ;
break;
}
case 3:
if(t.shou()==false){
printf("Введите значение на которое умножим матрицу:\n");
scanf("%d", &u);
t.proizvedenie(u);
t.vivod();
break;
}
else {
printf("В памяти данные отсутствуют!!!");
break;
}
case 4:
if(t.shou()==false){
printf("Введите размерность матрицы для сложения:\n");
scanf("%d%d", &a, &b);
t2.vvod(a,b);
if (t.summa( t2)==true){
printf("ОШИБКА!!!\n");
break;
}
t.vivod();
break;
}
else {
printf("В памяти данные отсутствуют!!!");
break;
}
case 5:
if(t.shou()==false){
printf("Введите размерность матрицы для произведения: ");
scanf("%d%d", &a, &b);
t2.vvod(a,b);
t.proizvedeniemtr(t2);
t.vivod();
break;
}
else {
printf("В памяти данные отсутствуют!!!");
break;
}
case 6:
return;
break;
default: printf("Вы не правильно выполнили выбор!!!\nПовторите выбор сначала!!!"); break;
}
}
}

Скриншоты работы программы
Категория: Другое | Добавил: den183
Просмотров: 1289 | Загрузок: 3
Всего комментариев: 0
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]