
7,14,21,28 |
Дан массив M, размерность задать в программе с помощью именованной константы. Указать элемент-границу (ввести номер с клавиатуры). Найти S1 – сумму положительных элементов массива в справа от границы и S2 – сумму отрицательных элементов массива слева от границы. |
#include <iostream>
#include <clocale>
#include<time.h>
#define SIZE 10
using namespace std;
void array_infill(int *array, int size)
{
for(int i = 0; i < size; i++)
{
int rn = rand() % 100;
while (true)
{
if (rand() % 2 != 0) rn = -rn;
for (int j = 0; j < i; j++)
{
if (array[j] == rn)
{
int rn = rand() % 100;
continue;
}
}
break;
}
array[i] = rn;
printf("%d ", array[i]);
}
printf("\n\r");
}
int border_input(int *array)
{
int border_value = 0;
printf("Введите граничное значение элемента с индексом 1 (чтобы хотябы один элемент остался в начале) до %d (чтобы хотябы один элемент остался в конце):", int(SIZE - 2));
while (true)
{
if (scanf("%d", &border_value) != 1)
{
printf("Ошибка при вводе граничного значения.%cВведите граничное значение снова:", '\n');
while (getchar() != '\n');
continue;
}
int border = -1;
for (int *i = &array[0]; i < &array[SIZE]; i++)
{
if (*i == border_value) border = 10 -(&array[SIZE] - i);
}
if(border < 1 || border > int(SIZE - 2))
{
printf("Ошибка при вводе граничного значения.%cВведите граничное значение снова:", '\n');
continue;
}
printf("Выбран элемент с индексом %d\r\n", border);
return border;
}
}
int pos_summ(int *array, int size, int border) //right
{
int summ = 0;
for(int *i = &array[border+1]; i<&array[SIZE]; i++)
{
if (*i > 0) summ += *i;
}
return summ;
}
int neg_summ(int *array, int size, int border) //left
{
int summ = 0;
for (int* i = &array[0]; i < &array[border]; i++)
{
if (*i < 0) summ += *i;
}
return summ;
}
int main()
{
setlocale(LC_ALL, "RUS");
printf("Подсчёт суммы отрицательны чисел слева и положительных справа от граничного элемента, введенного с клавиатуры.%c", '\n');
time_t k;
srand(time(&k));
int M[SIZE];
array_infill(&M[0], SIZE);
int border = border_input(M);
printf("Сумма отрицательных слева: %d\r\nСумма отрицательных справа: %d", neg_summ(M, SIZE, border), pos_summ(M, SIZE, border));
return 0;
}