https://pastein.ru/t/w7

  скопируйте уникальную ссылку для отправки


#include <iostream>
#include <math.h>
#include <sstream>
#include <iomanip>

using namespace std;

int Convert(float input) //Метод, который получает 5 цифр после запятой и преобразует их в число типа int
{
	int temp = input;			//таким методом
	input = fabs(input - temp); //избавляемся от целой части
	stringstream ss;		//это нужно чтобы преобразовать тип float в string
	string str;
	ss << setprecision(5) << input; // ставим ограничение на количество символов после запятой
	ss >> str;						// и записываем в переменную типа string
	if (str != "0")					// если в строке не "0",
	{
		str = str.substr(2);		//то уберем первые 2 символа, то есть из строки "0.12345" получим "12345"
	}
	return atoi(str.c_str());		//а здесь строку "12345" преобразуем в целое число 12345
}

bool Uslovie(float input) //метод в котором проверяется условие, в нашем случае кратность 3
{
	int convert_input = Convert(input); //вызываем метод Convert (см.выше)
	int sum = 0;
	while (convert_input != 0) //считаем сумму цифр
	{
		sum += convert_input % 10;
		convert_input /= 10;
	}
	if (sum % 3 == 0) //если сумма делится на 3
	{
		return true; //вернем true
	}
	return false; //иначе false
}

int ReverseSearch(float input[], int length) //метод, который проходит по массиву с конца, так как в задаче сказано "последний слева элемент", что значит первый справа
{
	for (int i = length - 1; i >= 0; i--) //проходим массив в обратном порядке
	{
		if (Uslovie(input[i])) //если элемент подходит по условию (см.выше)
		{
			return i; //вернем его индекс
		}

	}
	return length; //если не один не подошел, то вернем длину массива (позже поясню)
}

float GetNumber()
{
	cout << "Enter a float ";
	float o;
	cin >> o;
	return o;
}
int main()
{
	//Smirnova
	//i,m-индексы для сортировки/вывода массива
	//r-дополнительная временная переменная для сортировки массива "Пузырьком"
	//o-используется для получения числа с клавиатуры
	float S[10] = { 12.9,-12.0,-34.87,6.45,0.4,-8.98978,-56.8,7.56,42.8, 21.4 };
	int length = sizeof(S) / sizeof(*S); // sizeof - возвращает  длину в байтах, а * - это указатель на что-либо, нагуглил, что если сделать "sizeof(S) / sizeof(*S);" , то получится длина массива
	cout << "Massive" << "\n";
	cout.precision(5);
	for (int i = 0; i < length; i++)
	{
		cout << S[i] << " ";
	}
	cout << "\n";
	cout << "Sorted massive" << "\n";
	for (int i = 0; i < length - 1; i++)
	{
		for (int m = i + 1; m < length; m++)
		{
			if (S[i] < S[m])
			{
				float r;
				r = S[i];
				S[i] = S[m];
				S[m] = r;
			}
		}
	}
	for (int i = 0; i < length; i++)
	{
		cout << S[i] << " ";
	}
	cout << "\n";
	int deleted = ReverseSearch(S, length); // запускаем поиск с конца
	if (deleted != length) //как я писал выше, если мы не найдем нужный элемент, то вернем длину массива, тут нам это пригодилось, если мы получили индекс элемента, то
	{
		cout << "We should delete S[" << deleted << "] = " << S[deleted] << "\n"; //пишем какой элемент мы должны удалить
	}
	else
	{
		cout << "We should not delete anything!" << "\n"; //иначе мы ничего не удаляем
	}
	float o = GetNumber();
	if (deleted != length) //(см.выше)
	{
		S[deleted] = o; //заменяем элемент, который нужно удалить, на элемент, который ввели с клавиатуры
	}
	else //иначе приходится увеличивать массив
	{
		length++; //увеличиваем переменную длины
		float * temp;				//эти 2 строки
		temp = new float[length];	//нужны чтобы создать временный массив не от константы, а от переменной (в качестве длины я имею ввиду) 
		for (int i = 0; i < length - 1; i++) //переносим элементы
		{
			temp[i] = S[i];
		}
		temp[length - 1] = o; //добавляем элемент в конец
		delete[] S; //удаляем из памяти первоначальный массив
		float * S;				//и выделяем для него память снова
		S = new float[length];	//но только уже больше чем было (было 10 ячеек, стало 11)
		for(int i = 0; i < length; i++) //переносим элементы
		{
			S[i] = temp[i];
		}
		delete[] temp; //удаляем временный массив
	}
	for (int i = 0; i < length - 1; i++)
	{
		for (int m = i + 1; m < length; m++)
		{
			if (S[i] < S[m])
			{
				float r;
				r = S[i];
				S[i] = S[m];
				S[m] = r;
			}
		}
	}
	cout << "Sorted massive with number from User" << "\n";
	for (int i = 0; i < length; i++)
	{
		cout << S[i] << " ";
	}
	cout << "\n";
}