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