bsuir.info
БГУИР: Дистанционное и заочное обучение
(файловый архив)
Вход (быстрый)
Регистрация
Категории каталога
Другое [236]
Форма входа
Логин:
Пароль:
Поиск
Статистика

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

ИТиУвТС (з.), ТРПОСУ, Контрольная работа, вар.7, 2016
Подробности о скачивании 18.01.2016, 19:17
Лабораторная работа №1
Программирование алгоритмов с использованием динамических массивов

Цель работы – научиться использовать операции динамического выделения и освобождения памяти на примере работы с одномерными и двумерными массивами, а также косвенное обращение к элементам массива.

Дан массив – A(n,n). Написать программу его поворота на 90° относительно его центра. На печать вывести исходный и повернутый массивы

Листинг:
#include "stdafx.h"
#include <stdio.h>
#include <iostream>
using namespace std;

int main()
{
int n;
int **a, **b;
cout << "n=" << endl;
cin >> n;
// динамическое объявление массива
a = new int *[n];
for (int i = 0; i < n; i++)
a[i] = new int[n];
b = new int *[n];
for (int i = 0; i < n; i++)
b[i] = new int[n];

// ввод элементов
for (int i = 0; i < n; i++)
for (int j = 0; j < n; j++)
{
cout << "a[" << i + 1 << "][" << j + 1 << "]=";
cin >> a[i][j];

}
// поворот
for (int i = 0; i < n; i++)
for (int j = 0; j < n; j++)
{
b[j][n - 1 - i] = a[i][j];
}

// вывод на экран
cout << "A:" << endl;
for (int i = 0; i < n; i++)
{
for (int j = 0; j < n; j++)
cout << a[i][j] << " ";
cout << endl;
}
cout << "B:" << endl;
for (int i = 0; i < n; i++)
{
for (int j = 0; j < n; j++)
cout << b[i][j] << " ";
cout << endl;
}
system("pause");
return 0;
delete[] a,b;
}

Результат работы:

Заданы два массива – А(5) и В(5). В каждом из массивов найти наибольшее значение и вычесть его из всех элементов массивов. На печать вывести исходные и преобразованные массивы.
#include "stdafx.h"
#include <stdio.h>
#include <iostream>
using namespace std;

int main()
{
int n, mb=0,ma=0;
int *a, *b;
cout << "n=" << endl;
cin >> n;
// динамическое объявление массива
a = new int [n];
for (int i = 0; i < n; i++)
a[i] = n;
b = new int[n];
for (int i = 0; i < n; i++)
b[i] = n;

// ввод элементов
for (int i = 0; i < n; i++)
{
cout << "a[" << i + 1 << "]=";
cin >> a[i];
}
for (int i = 0; i < n; i++)
{
cout << "b[" << i + 1 << "]=";
cin >> b[i];
}
for (int i = 0; i < n; i++)
{
if (ma < a[i])
{
(ma = a[i]);
}

}
for (int i = 0; i < n; i++)
{
a[i] = a[i] - ma;
}
for (int i = 0; i < n; i++)
{
if (mb < b[i])
{
(mb = b[i]);
}

}
for (int i = 0; i < n; i++)
{
b[i] = b[i] - mb;
}

// вывод на экран
cout << "A:" << endl;
for (int i = 0; i < n; i++)
{
cout << a[i] << " ";
cout << endl;
}
cout << "B:" << endl;
for (int i = 0; i < n; i++)
{
cout << b[i] << " ";
cout << endl;
}
system("pause");
return 0;
delete[] a,b;
}


Лабораторная работа №2
Классы. Программирование линейных алгоритмов
с использованием функций инициализации set()
и вывода результатов print()

Цель работы – изучить основные способы работы с пользовательским типом данных «класс», его объектами, методами и способы доступа к ним.

1.
При x= –4,5, y=0,75* , z=0,845 , u=-55,6848.

Листинг:
// 2.cpp: определяет точку входа для консольного приложения.
//

#include "stdafx.h"
#include <stdio.h>
#include <iostream>
#include <math.h>
using namespace std;

class MyFun
{
double x, y, z;
double w;
public:
void set(double a, double b, double c);
void fun();
void print();
};

void MyFun::set(double a, double b, double c)
{
x = a; y = b; z = c;
}

void MyFun::print()
{
cout << "x=" << x << " y=" << y << " z=" << z << " w=" << w;
}

void MyFun::fun()
{
w = (pow(abs(cos(x) - cos (y)),(1+2*pow(sin(y),2)))) * (1+z+(z*z/2)+(pow(z,3)/3)+(pow(z,4)/4));
}

int main()
{
double a, b, c;
MyFun F;
cout << "Put x" << endl; cin >> a;
cout << "Put y" << endl; cin >> b;
cout << "Put z" << endl; cin >> c;
F.set(a, b, c);
F.fun();
F.print();
system("pause");
return 0;
}

Результат:


Лабораторная работа №3
Классы. Программирование линейных алгоритмов
с использованием конструктора, деструктора, friend – функции инициализации set() и функции вывода результатов print()

Цель работы – изучить основные способы работы по созданию конструктора класса с захватом динамической памяти и деструктора для ее освобождения, применение friend – функции и изучение ее особенностей.

Пользовательский класс Х должен содержать необходимые элементы – данные x, y, а класс Y – переменную z, которые создаются в динамической области памяти, конструкторы для их создания (операция new) и установки их начальных значений соответственно: Х(), Y(), деструкторы: ~ Х(), ~ Y(), friend – функция печати: friend void print(), функция, решающая поставленную задачу: friend void Run().
Код методов и функций – вне пространства определения класса.

Листинг
// 3.cpp: определяет точку входа для консольного приложения.
//

#include "stdafx.h"
#include <iostream>
#include <math.h>
#include <stdlib.h>
#include <conio.h>

using namespace std;

class yClass;
class xClass
{
double *x,*y,*c;
public:
xClass (double X, double Y);
~xClass();
friend void print(xClass&,yClass&);
friend void run(xClass&,yClass&); };

class yClass
{
double *z;
public:
yClass (double Z);
~yClass();
friend void print(xClass&,yClass&);
friend void run(xClass&,yClass&);
};

xClass::xClass(double X, double Y)
{
x = new double;
y = new double;
c = new double;
*xClass::x=X;
*xClass::y=Y;
*xClass::c=0;
};

yClass::yClass(double Z)
{
z = new double;
*yClass::z=Z;
};

xClass::~xClass()
{
delete x,y,c;
}

yClass::~yClass()
{
delete z;
}

void run(xClass& a, yClass& b)
{
*a.c =(pow(8+pow(abs(a.x-a.y),2)+1,0.33))/(a.x*a.x+a.y*a.y+2) - exp(abs(a.x-a.y))*pow(tan(b.z)*tan(b.z)+1,a.x);
}

void print(xClass& a, yClass& b)
{
cout << "X = " << *a.x <<", Y = " << *a.y << ", Z = " << *b.z << endl;
cout << "Rezultat: u = " << *a.c << endl;
}

int main()
{
xClass X (3.251,0.325);
yClass Y (0.0000466);
run(X,Y);
print(X,Y);
getch();
return 0;

}
Результат:


Лабораторная работа №4
Класс «Динамическая строка» и перегрузка операций

Цель работы – изучить методику создания одномерных динамических символьных массивов при помощи конструкторов с захватом динамической памяти и деструкторов для их уничтожения, а также способа работы со строковыми объектами, познакомиться с механизмом перегрузки операций.

Пользовательский класс String должен содержать необходимые элементы-данные, которые создаются в динамической области памяти.
Конструктор для создания строк: String (…);
Деструктор: ~String();
Метод ввода исходной строки: Set();
Метод печати: void print(…);
Код методов – вне пространства определения класса. Программа иллюстрирует прямой и косвенный способы обращения к методам.
Ввести с клавиатуры строку символов S1. Признак окончания ввода строки – нажатие клавиши «Ввод». Программа должна содержать перегруженную операцию «=», использование которой скопирует S1 в S2 .
Исходную и преобразованную строки вывести в файл. В программе необходимо использовать стоковые и файловые потоки.
Если длина L >5 и <30, изменить регистр символов (aBcDeF в AbCdEf).

Листинг
// 4.cpp: определяет точку входа для консольного приложения.
//

#include "stdafx.h"
#include <iostream>
#include <algorithm>
using namespace std;
#include <stdlib.h>
#include <stdio.h>
#include <conio.h>
#include <string.h>
#include <math.h>
#define SIZE 256

class String
{
private:
char *str;
public:
//Конструктор
String(char *s = "");
//Деструктор
~String();
//Длина строки
int length();
//Установка новой строки
void set(char *s);
//Функция вывода строки на экран
void print();
//Функция выполнения действия
char* run();
char operator[](int i);
String& operator=(String &ob);
friend istream &operator>>(istream &stream, String &ob);
};

//Конструктор
String::String(char *s)
{
str=new char[SIZE];
str=s;
}
//Деструктор
String::~String()
{
delete [] str;
}
//Размер строки
int String::length()
{
return strlen(str);
}

//Установка нового значения строки
void String::set(char *s)
{
unsigned int i;
for (i = 0;i < strlen(s); i++)
str[i] = s[i];
str[i] = '\0';
}

//Вывод строки на экран
void String::print()
{
cout << str;
}
//меняем регистр
char *String::run()
{
char *s;
int i = 0;
if (strlen(str)>5 && strlen(str)<30)
{
s=strlwr(str);

}
return s;
}

String& String::operator=(String &ob)
{
str= ob.str;
return *this;
}

char String::operator[](int i)
{
if (i<0 ||i>=length())
return '\0';
return str[i];
}

istream &operator>>(istream &stream, String &ob)
{
stream.getline(ob.str, SIZE);
return stream;
}

void main()
{
String a;
//Ввод строки
cout << "Type anything and press \"Enter\":\n";
cin>>a;
a.run();
system("pause");
}


Лабораторная работа №5
Наследование классов, механизм виртуальных функций

Цель работы – изучить одну из базовых концепций ООП, наследование классов в С++, заключающуюся в построении цепочек классов, связанных иерархически, познакомиться с механизмом виртуальных функций.
Общая постановка. Программа должна содержать:
- базовый класс Х, включающий два элемента х1, х2 типа int,
- конструктор с параметрами для создания объектов в динамической области памяти,
деструктор,
- виртуальные методы просмотра текущего состояния и переустановки объектов базового класса в новое состояние.
- производный класс У, включающий один элемент у типа int ,
- конструктор с параметрами и списком инициализаторов, передающий данные конструктору базового класса,
- переопределенные методы просмотра текущего состояния объектов и их переустановки в новое состояние.
Произведение переменных классов

Листинг
// 5.cpp: определяет точку входа для консольного приложения.
//

#include "stdafx.h"
#include <iostream>
using namespace std;

class X
{
public:
int *x;
//Конструктор
X(int x1 = 0, int x2 = 0)
{
x = new int[2];
x[0] = x1;
x[1] = x2;
}
//Деструктор
~X()
{
delete [] x;
}
//Установка новых значений
virtual void set(int x1, int x2)
{
x[0] = x1;
x[1] = x2;
}
virtual void print()
{
cout << "X1 = " << x[0] << "\nX2 = " << x[1] << endl;
}
};

class Y: public X
{

public:
int res, y;
Y(int x1 = 0, int x2 = 0, int y = 0): X(x1, x2)
{
this->y = y;
}
//Установка новых значений
virtual void set(int x1, int x2, int y)
{
//Вызов метода базового класса
X::set(x1, x2);
this->y = y;
}

virtual void print()
{
X::print();
//Для повышения точности преобразуем типintк типуdouble
double res = (double)x[0] * (double)x[1] * (double)y;
cout << "Y = " << y;
cout << "\nResult = " << res << endl;
}
};

void main()
{
X *xptr;
Y a(17, 5, 26);
xptr = &a;
xptr->print();
cin.ignore();
}

Результат работы

Лабораторная работа №6
Программирование шаблона классов

Цель работы – изучить приемы создания и использования шаблонов классов.

Дано: число N и последовательность a1, a2, … aN. Создать шаблон класса, порождающий динамические одномерные массивы с элементами различных типов (вещественные, целочисленные, символьные). Тип данных и результат являются параметрами по отношению к классу, программа должна иметь методы инициализации, конструктор, деструктор, метод просмотра значений созданного массива согласно заданному алгоритму.
Для упрощения работы с массивами использовать возможности библиотеки шаблонов STL.
(a1*a1), (a1*a2), …, (a1*aN);

Листинг
// 6.cpp: определяет точку входа для консольного приложения.
//

#include "stdafx.h"
#include <iostream>
using namespace std;
template <class T>
class vector
{
private:
int N;
T *a;
public:
//Конструктор
vector(int n)
{
if (n > 0)
a = new T[n];
N = n;
}
//Деструктор
~vector()
{
delete [] a;
}
T& operator[](int i)
{
return a[i];
}
void set()
{
int i;
for(i = 0; i < N; i++)
{
cout << "Enter a[" << i+1 << "]:\n";
cin >> a[i];
}
}
//Вывод на экран преобразованного массива
void print()
{
int i;
for(i = 0; i < N ; i++)
{
cout << "(" << a[i] * a[i] << "), ";
}
cout<<endl;
}
};

void main()
{
int n;
//Ввод числа N
cout << "Enter N:\n";
cin >> n;
vector <float> a(n);
//Ввод массива чисел
cout << "Enter vector(" << n << " float numbers):\n";
a.set();
//Вывод на экран
cout << "Vector:\n";
a.print();
cin.ignore(2);
}

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