Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

ТРПОСУ 3 семестр 11 вариант

.doc
Скачиваний:
47
Добавлен:
01.04.2014
Размер:
123.9 Кб
Скачать

Задание № 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);

}

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