В одномерном массиве, состоящем из n вещественных элементов, вычислить:
1.Максимальный по модулю элемент массива.
2. Сумму элементов массива, расположенных между первым и вторым положительными элементами.
3. Преобразовать массив таким образом, чтобы элементы, равные нулю, располагались после всех остальных.
Y[i]=sin(2i)+cos(i) i∈[1,50]
Ответы
Ответ:
include <iostream>
using namespace std;
//декларации функций
void InitArray(int *a, int length);
void FindMaximum(int* a, int length, int* out, int* index);
bool FindSum(int* a, int length, int* sum, int* index1, int* index2);
int SortArray(int* a, int length, int numberstoend);
int main()
{
int *a, length = 100; //массив переменной длины
//далее массив инициализируется для данного примера
//вы можете брать эти данные из другого места и другим способом
//не забудьте стереть этот коментарий, если вам этот код нужен для ВУЗовского задания
a = new int[length];
int Minus = 1; //переменная для создания отрицательных элементов массива
for (int i = 0; i < length; i++)
{
if ((i % 5) / 4 == 1) { Minus = 1; } //каждый пятый элемент - полжительное число
else
{
if ((i % 6) / 5 == 1) { Minus = 0; } //каждый шестой элемент - ноль
else {Minus = -1; } //остальные - отрицательные
}
a[i] = Minus * ((i * 37) % 50); //псевдослучайное заполнение элементов массива
}
//просмотреть элементы массива
for (int i = 0; i < length; i++)
{
cout << a[i] << " ";
}
cout << endl;
int Maximum, MaximumIndex;
//Ищем максимальный по модулю элемент и индекс первого максимального по модулю элемента
FindMaximum(a, length, &Maximum, &MaximumIndex);
cout << "Maximum Module Element: " << Maximum << endl;
cout << "First Maximum Module Element Index: " << MaximumIndex << endl;
int Sum, Index1, Index2;
//Ищем сумму элементов, расположенных между первым и вторым положительными элементами
if (FindSum(a, length, &Sum, &Index1, &Index2))
{
cout << "Sum: " << Sum << endl;
cout << "First Positive Element Index: " << Index1 << endl;
cout << "Second Positive Element Index: " << Index2 << endl;
}
else
{
//между положительными элементами массива нет элементов (стоят подряд)
cout << "Cannot Find Sum" << endl;
}
//Перемещение всех нулей в конец массива
cout << "Array Have " << SortArray(a, length, 0) << " Nulls" << endl;
}
//функция, возвращающая модуль числа
int IntegerModule(int integer)
{
if (integer < 0) { return -integer; }
else { return integer; }
}
//Функция поиска максимального по модулю элемента массива
//a - массив
//length - длина массива
//out - значение максимального по модулю элемента
//index - индекс первого максимального по модулю элемента в массиве. Если это вам не нужно, просто вырежте всё что с ним связано
void FindMaximum(int* a, int length, int* out, int* index)
{
//int maximum = 0;
*out = 0;
for (int i = 0; i < length; i++)
{
if (IntegerModule(a[i]) > *out)
{
*out = IntegerModule(a[i]);
*index = i; //если индекс не нужен, уберите эту строчку
}
}
}
//функция для подсчёта суммы элементов, расположенных между первым и вторым положительными элементами
//a - массив
//length - длина массива
//sum - сумма элементов, расположенных между первым и вторым положительными элементами
//index1 - индекс первого максимального по модулю элемента в массиве
//index2 - индекс второго максимального по модулю элемента в массиве
bool FindSum(int* a, int length, int* sum, int* index1, int* index2)
{
//ищем первый положительный элемент массива
for (int i = 0; i < length; i++)
{
if (a[i] > 0) //ноль не считается за положительное число, измените на ">=" если должен считаться
{
*index1 = i; //записываем индекс первого положительного элемента массива
break;//i = length; //завершаем цикл
}
}
//ищем второй положительный элемент массива
for (int i = *index1 + 1; i < length; i++)
{
if (a[i] > 0) //ноль не считается за положительное число, измените на ">=" если должен считаться
{
*index2 = i; //записываем индекс первого положительного элемента массива
break;//i = length; //завершаем цикл
}
}
//если между положительными элементами массива нет элементов, возвращаем false
if (*index1 + 1 == *index2) { return false; }
//считаем сумму
*sum = 0;
//for (int i = *index1; i <= *index2; i++) если полож-ные числа должны входить в сумму
for (int i = *index1 + 1; i < *index2; i++)
{
*sum += a[i]; //складываем элементы массива
}
return true;
}
//Функция для перемещения всех определённых элементов (например нулей) в конец массива
//a - массив
//length - длина массива
//numberstoend - элементы, которые следует переместить в конец массива.
//Если функция не должна быть универсальной, просто сотрите этот аргумент, а в функции замените его на 0
int SortArray(int* a, int length, int numberstoend)
{
int Last = length; //длина массива без отсортированных элементов
int Count = 0; //счётчик количества элементов, которые следует переместить в конец массива
for (int i = 0; i < Last; i++)
{
if (a[i] == numberstoend)
{
Count++; //увеличиваем счётчик
for (int i2 = i; i2 < Last; i2++)
{
a[i2] = a[i2 + 1]; //смещаем все последующие элементы на один элемент назад
}
Last--; //сдвигаем длину массива без отсортированных элементов
a[Last] = numberstoend; //записываем отсортированный элемент в конец массива
}
}
return Count; //возвращаем количество элементов, которые мы переместили в конец массива
}
Объяснение:
Если вам этот код нужен для ВУЗовского задания, не забудьте стереть коментарий в функции main, а не то спалитесь.