Untitled

 avatar
unknown
c_cpp
4 years ago
6.8 kB
11
Indexable
#include <iostream>
#include <math.h>
#include <time.h>
#include <string>
#include <iomanip>
using namespace std;

void PositionOfFirstEqualNumber();
//MagicNumbers - числа, которые меньше разности двух предыдущих в массиве. Как их ещё лаконично назвать?
void TaskWithMagicNumbers();
void SubsequenceTask();
void TransposeMatrix();
void Distance();

int* CreateArray(int);
int** CreateMatrix(int, int);
void SetArray(int, int*);
void SetMatrix(int, int, int**);
void PrintArray(int, int*);
void PrintMatrix(int, int, int**);
void SearchEqualElement(int, int, int*);
string SearchMagicNumbers(int, int*);
int CountGreatestSubsequence(int, int*);
void TransposeMainDiagonal(int, int, int**);
void TransposeSideDiagonal(int, int, int**);
double CompareCoordinats(int, int**);
void DeleteMatrix(int, int**);

int main()
{
	setlocale(LC_ALL, "rus");
	srand(time(0));

	int taskNumber;
	cout << "Введите номер задания" << endl;
	cin >> taskNumber;

	switch (taskNumber)
	{
	case 1:
		PositionOfFirstEqualNumber();
		break;
	case 2:
		TaskWithMagicNumbers();
		break;
	case 3:
		SubsequenceTask();
		break;
	case 4:
		TransposeMatrix();
		break;
	case 5:
		Distance();
		break;
	default:
		cout << "Вы ввели некорректный номер задания";
		break;
	}
}

void PositionOfFirstEqualNumber()
{
	int size;

	cout << "Введите размер массива ";
	cin >> size;
	size = abs(size);

	int* array = CreateArray(size);
	SetArray(size, array);
	PrintArray(size, array);

	int element;
	cout << "Введите искомый элемент ";
	cin >> element;

	SearchEqualElement(element, size, array);

	delete[]array;
}

void TaskWithMagicNumbers()
{
	int size;

	do
	{
		cout << "Введите размер массива (не меньше трёх элементов) ";
		cin >> size;
		size = abs(size);
	} while (size < 3);

	int* array = CreateArray(size);
	SetArray(size, array);
	PrintArray(size, array);

	cout << SearchMagicNumbers(size, array);

	delete[]array;
}

void SubsequenceTask()
{
	int size;

	cout << "Введите размер массива ";
	cin >> size;
	size = abs(size);

	int* array = CreateArray(size);
	SetArray(size, array);
	PrintArray(size, array);

	cout << CountGreatestSubsequence(size, array);

	delete[]array;
}

void TransposeMatrix()
{
	int size;

	cout << "Введите размер для квадратной матрицы (n)" << endl;
	cin >> size;

	int** array = CreateMatrix(size, size);
	SetMatrix(size, size, array);
	cout << "Матрица: " << endl;
	PrintMatrix(size, size, array);

	cout << "Матрица, транспонированная по главной диагонали:" << endl;
	TransposeMainDiagonal(size, size, array);

	cout << "Матрица, транспонировання по побочной диагонали:" << endl;
	TransposeSideDiagonal(size, size, array);

	DeleteMatrix(size, array);
}

void Distance()
{
	int coordinateColumn, row = 2;

	do
	{
		cout << "Введите количество точек (больше одной) ";
		cin >> coordinateColumn;
	} while (coordinateColumn < 2);

	int** array = CreateMatrix(row, coordinateColumn);
	SetMatrix(row, coordinateColumn, array);

	cout << "строка x и строка y соответственно: " << endl;
	PrintMatrix(row, coordinateColumn, array);

	double maxDistance = CompareCoordinats(coordinateColumn, array);
	cout << "наибольшее расстояние : " << maxDistance;

	DeleteMatrix(row, array);
}

int* CreateArray(int size)
{
	int* array = new int[size];

	return array;
}

int** CreateMatrix(int row, int column)
{
	int** array = new int* [row];
	for (int i = 0; i < row; i++)
	{
		array[i] = new int[column];
	}

	return array;
}

void SetArray(int size, int* array)
{
	for (int i = 0; i < size; i++)
	{
		array[i] = rand() % 21 - 10;
	}
}

void SetMatrix(int row, int column, int** array)
{

	for (int i = 0; i < row; i++)
	{
		for (int j = 0; j < column; j++)
			array[i][j] = rand() % 21 - 10;
	}
}

void PrintArray(int size, int* array)
{
	for (int i = 0; i < size; i++)
	{
		cout << array[i] << " ";
	}
	cout << endl;
}

void PrintMatrix(int row, int column, int** array)
{
	for (int i = 0; i < row; i++)
	{
		for (int j = 0; j < column; j++)
		{
			cout << setw(4) << array[i][j];
		}
		cout << endl;
	}
}


void SearchEqualElement(int element, int size, int* array)
{
	bool isEqual = false;
	int i;

	for (i = 0; i < size; i++)
	{
		if (array[i] == element)
		{
			isEqual = true;
			break;
		}
	}

	if (isEqual)
	{
		cout << "Позиция элемента: " << i;
	}
	else
	{
		cout << "В данном массиве нет такого элемента";
	}
}

string SearchMagicNumbers(int size, int* array)
{
	string magicNumbers;
	int numberToCheck, numberToCompare;
	bool hasNumbers = false;

	for (int i = 2; i < size; i++)
	{
		numberToCompare = array[i - 1] - array[i - 2];
		numberToCheck = array[i];
		if (numberToCheck < numberToCompare)
		{
			magicNumbers += to_string(numberToCheck);
			magicNumbers += " ";
			hasNumbers = true;
		}
	}

	return hasNumbers ? magicNumbers : "В массиве нет таких чисел";
}

int CountGreatestSubsequence(int size, int* array)
{
	int i;
	int totalSubsequence = 1; int greatestSubsequence = 1;

	if (size == 1)
	{
		return greatestSubsequence;
	}
	else
	{
		for (i = 0; i < size; i++)
		{
			while (array[i] == array[i + 1])
			{
				totalSubsequence += 1;
				i++;
			}
			if (totalSubsequence > greatestSubsequence)
			{
				greatestSubsequence = totalSubsequence;
			}

			i++;
		}
	}

	return greatestSubsequence;
}

void TransposeMainDiagonal(int row, int column, int** array)
{

	for (int i = 0; i < row; i++)
	{
		for (int j = 0; j < column; j++)
		{
			cout << setw(4) << array[j][i];
		}
		cout << endl;
	}
}

void TransposeSideDiagonal(int row, int column, int** array)
{
	for (int i = 0; i < row; i++)
	{
		for (int j = 0; j < column; j++)
		{
			cout << setw(4) << array[row - 1 - j][column - 1 - i];
		}
		cout << endl;
	}
}

double CompareCoordinats(int column, int** array)
{
	double xDistance, yDistance, totalDistance, maxDistance = 0;

	for (int i = 0; i < column - 1; i++)
	{
		int j = 1;
		while (i + j < column)
		{
			xDistance = (array[0][i] - array[0][i + j]) * (array[0][i] - array[0][i + j]);
			yDistance = (array[1][i] - array[1][i + j]) * (array[1][i] - array[1][i + j]);

			totalDistance = sqrt(xDistance + yDistance);

			if (totalDistance > maxDistance)
			{
				maxDistance = totalDistance;
			}

			j++;
		}
	}

	return maxDistance;
}

void DeleteMatrix(int row, int** array)
{
	for (int i = 0; i < row; i++)
	{
		delete[] array[i];
	}
	delete[] array;
}
Editor is loading...