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

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

ТРПОСУ 3 семестр 11 вариант
Подробности о скачивании 05.12.2011, 20:14
Задание № 1
Общая постановка. Составить программы – одномерные массивы. Массивы создаются в динамической области памяти с использованием операций NEW и DELETE. Ввод исходных данных: реальный размер массивов и их значения. Обращение к элементам массива – через косвенную адресацию.
Заданы два массива – А(5) и В(5). Подсчитать в них количество элементов, больших значения t, и первым на печать вывести массив, имеющий наименьшее их количество.

Текст программы:
#include <iostream>
#include <conio.h>
using namespace std;

void main()
{
int *A = new int[5];
int *B = new int[5];
int i;
//Ввод первого массива
cout<<"Enter A (5 int):\n";
for(i = 0; i < 5; i++)
cin >> A[i];
//Ввод второго массива
cout << "Enter B (5 int):\n";
for(i = 0; i < 5; i++)
cin >> B[i];
int t;
//Ввод переменной t
cout << "Enter t:\n";
cin >> t;
int n = 0;//количество элементов в А, больше t
int m = 0;//количество элементов в В, больше t
//подсчет кол-ва элементов А и В, больше t
for(i = 0; i < 5; i++)
{
if (A[i] > t)
n++;
if (B[i] > t)
m++;
}
if (n < m)
{
cout << "A: ";
for(i = 0; i < 5; i++)
cout << A[i] <<" ";
cout << "\nB: ";
for(i = 0; i < 5; i++)
cout << B[i] << " ";
cout << "\n";
}
else
{
cout << "B: ";
for(i=0; i<5; i++)
cout<<B[i]<<" ";
cout<<"\nA: ";
for(i=0; i<5; i++)
cout<<A[i]<<" ";
cout<<"\n";
}
delete [] A;
delete [] B;
cout << "Press any key ... " << endl;
getch();
}

Результат выполнения:


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

При x=3,251, y=0,325, z=0,466 , c = 4,25.

Текст программы:
#include <iostream>
using namespace std;
#include <math.h>
#define pi 3.14

class my_Fun
{
private:
double *x, c;
public:
my_Fun(double X = 3.251, double Y = 0.325, double Z = 0.466e-4);
~my_Fun();
friend void run(my_Fun *);
friend void print(my_Fun *);
};
//Конструктор
my_Fun::my_Fun(double X, double Y, double Z)
{
x=new double[3];
x[0]=X;
x[1]=Y;
x[2]=Z;
c=0;
}
//Деструктор
my_Fun::~my_Fun()
{
delete[]x;
}
//Дружественная функция print
void print(my_Fun *m)
{
cout << "X = " << m->x[0];
cout << "\nY = " << m->x[1];
cout << "\nZ = " << m->x[2];
cout << "\nResult = " << m->c << endl;
}
//Дружественная функция run
void run(my_Fun *m)
{
m->c=pow(2.0, pow(m->x[1], m->x[0])) +
pow(pow(3.0, m->x[0]), m->x[1]) -
m->x[1]*(atan(m->x[2])-pi/6) /
(abs(m->x[0]) + 1/(pow(m->x[1], 2.0) + 1));
}

void main()
{
my_Fun *ptr;
ptr = new my_Fun;
run(ptr);
print(ptr);
delete ptr;
cin.ignore(1);
}

Результат выполнения:


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

Текст программы:
#include <iostream>
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];
strcpy(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()
{
int i = 0;
//Находим открывающую скобку
while(i < length() && str[i] != '{')
i++;
//Если конец строки
if (i == length())
return "";
int j = i;
//Находим закрывающую скобку
while(j < length() && str[j] != '}')
j++;
if (j == length())
return "";
char *s;
s = new char[j - i + 1];
strcpy(s, str + i + 1);
s[j - i - 1] = '\0';
return s;
}

String& String::operator=(String &ob)
{
strcpy(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";
scanf("%alf",&a);
//cin >> a;
if (a.length()>6)
{
cout << "Between {} - " << a.run();
}
else
cout << "Length - " << a.length();
cout << endl;
cout << "Press any key ... " << endl;
getch();

}

Задание № 4
Создать в производном классе метод Run, определяющий значение х1*х2/у.

Текст программы:
#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();
}

Результат выполнения:


Задание № 5
Общая постановка. Даны: число N и последовательность a1, a2, … aN. Создать шаблон класса, порождающий динамические одномерные массивы с элементами различных типов (вещественные, целочисленные, символьные). Тип данных и результат являются параметрами по отношению к классу, программа должна иметь методы инициализации, конструктор, деструктор, метод просмотра значений созданного массива согласно заданному алгоритму.
(a1+a2+a3), (a2+a3+a4), (a3+a4+a5), … (aN–2+aN-1+aN)

Текст программы:
#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 - 2; i++)
{
cout << "(" << a[i] + a[i+1] + a[i+2] << "), ";
}
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);
}

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