Предмет: Информатика, автор: kiryakap11

В одномерном массиве, состоящем из n вещественных элементов, вычислить:
1.Максимальный по модулю элемент массива.
2. Сумму элементов массива, расположенных между первым и вторым положительными элементами.
3. Преобразовать массив таким образом, чтобы элементы, равные нулю, располагались после всех остальных.
Y[i]=sin(2i)+cos(i) i∈[1,50]

Ответы

Автор ответа: thenp
0

Ответ:

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, а не то спалитесь.

Похожие вопросы
Предмет: Қазақ тiлi, автор: Meruert0502