Сумма модулей элементов массива, расположенных после первого отрицательного

ЗАДАЧА
Вычислить сумму модулей элементов массива, расположенных после первого отрицательного элемента.
Например, в массиве [5, 3, -1, 8, 0, -6, 1] первый отрицательный элемент является третьим по счету, а сумма модулей стоящих после него элементов массива будет составлять 8 + 0 + 6 + 1 = 15.

Поиск первого отрицательного:

Сначала находим первый отрицательный элемент и запоминаем его индекс (например, в переменной neg). На случай, если в массиве вообще не будет отрицательных элементов, до цикла поиска присваиваем neg значение, выходящее за границы диапазона индексов данного массива.

В цикле осуществляем проверку элементов на отрицательность. Как только попадается первый такой элемент, его индекс присваивается переменной neg, а цикл следует прервать (с помощью команды break).

Вычисление суммы модулей:

Если neg содержит выходящее за границы диапазона значение, то выводим сообщение, что в массиве нет отрицательных элементов. Иначе считаем сумму модулей элементов, расположенных после первого отрицательного. Начинать следует с элемента с индексом на 1 больше, чем у найденного первого отрицательного.

Для хранения суммы вводим переменную (например, s) и присваиваем ей 0. В цикле перебираем массив от элемента с индексом neg+1 и до конца, находим абсолютное значение каждого элемента и добавляем его к sum. После выполнения цикла выводим значение sum на экран.

Pascal



const N = 10;
var
arr: array[1..N] of integer;
i,neg: byte;
sum: integer;
begin
randomize;
for i:=1 to N do begin
arr[i] := random(30)-5;
write(arr[i]:4);
end;
writeln;

neg := 0; // ищем первый отрицательный
for i:=1 to N do
if arr[i] < 0 then begin
neg := i;
break;
end;

if neg = 0 then
writeln('Отрицательных элементов нет')
else begin
writeln('Номер первого отрицательного: ', neg);
sum := 0; // считаем сумму модулей после первого отрицательного
for i:=neg+1 to N do
sum := sum + abs(arr[i]);
writeln('Сумма модулей элементов после него: ', sum);
end;
end.



17 4 11 9 -5 -2 22 3 8 0
Номер первого отрицательного: 5
Сумма модулей элементов после него: 35

Язык Си


#include < stdio.h>
#define N 10
main() {
int arr[N], sum;
char i,neg;
srand(time(NULL));
for (i=0; i< N; i++) {
arr[i] = rand()%30 - 5;
printf("%d ", arr[i]);
}
printf("\n");

neg = -1;
for (i=0; i < N; i++) {
if (arr[i] < 0) {
neg = i;
break;
}
}

if (neg == -1) printf("нет отрицательных\n");
else {
printf("номер I-го отриц.: %d\n", neg+1);
sum = 0;
for (i=neg+1; i< N; i++) sum += abs(arr[i]);
printf("сумма: %d\n", sum);
}
}

Python



from random import random
N = 10
arr = []
for i in range(N):
arr.append(int(random() * 30) - 5)
print(arr)

neg = -1
for i in range(N):
if arr[i] < 0:
neg = i
break

if neg == -1:
print('Отрицательных нет')
else:
print('Номер первого отриц.:', neg+1)
s = 0
for i in range(neg+1,N):
s += abs(arr[i])
print('Сумма: ', s)

КуМир


алг сумма после перв отриц
нач
цел N = 10
цел таб arr[1:N]
цел i,neg,sum
нц для i от 1 до N
arr[i] := irand(-5,30)
вывод arr[i]:4
кц
вывод нс

neg := 0
нц для i от 1 до N
если arr[i] < 0 то
neg := i
выход
все
кц

если neg=0 то
вывод "отриц. нет"
иначе
вывод "первый отриц.: ", neg, нс
sum := 0
нц для i от neg+1 до N
sum := sum + iabs(arr[i])
кц
вывод "сумма модулей после = ", sum
все
кон

Basic-256


N = 10
dim arr(N)
for i=0 to N-1
arr[i] = int(rand*30) - 5
print arr[i] + " ";
next i
print

neg=-1
for i=N-1 to 0 step -1
if arr[i] < 0 then
neg = i
endif
next i

if neg = -1 then
print "Нет отриц."
else
print "Номер перв. отриц.: " + (neg+1)
sum = 0
for i=neg+1 to N-1
sum = sum + abs(arr[i])
next i
print sum
endif

В языке basic256 нет команды break. Поэтому поиск первого отрицательного элемента массива осуществляется перебором массива с конца.

Оцените статью
Добавить комментарий

Pascal


const N = 10;
var
arr: array[1..N] of integer;
i,neg: byte;
sum: integer;
begin
randomize;
for i:=1 to N do begin
arr[i] := random(30)-5;
write(arr[i]:4);
end;
writeln;

neg := 0; // ищем первый отрицательный
for i:=1 to N do
if arr[i] < 0 then begin
neg := i;
break;
end;

if neg = 0 then
writeln('Отрицательных элементов нет')
else begin
writeln('Номер первого отрицательного: ', neg);
sum := 0; // считаем сумму модулей после первого отрицательного
for i:=neg+1 to N do
sum := sum + abs(arr[i]);
writeln('Сумма модулей элементов после него: ', sum);
end;
end.



17 4 11 9 -5 -2 22 3 8 0
Номер первого отрицательного: 5
Сумма модулей элементов после него: 35
Язык Си

#include < stdio.h>
#define N 10
main() {
int arr[N], sum;
char i,neg;
srand(time(NULL));
for (i=0; i< N; i++) {
arr[i] = rand()%30 - 5;
printf("%d ", arr[i]);
}
printf("\n");

neg = -1;
for (i=0; i < N; i++) {
if (arr[i] < 0) {
neg = i;
break;
}
}

if (neg == -1) printf("нет отрицательных\n");
else {
printf("номер I-го отриц.: %d\n", neg+1);
sum = 0;
for (i=neg+1; i< N; i++) sum += abs(arr[i]);
printf("сумма: %d\n", sum);
}
}
Python


from random import random
N = 10
arr = []
for i in range(N):
arr.append(int(random() * 30) - 5)
print(arr)

neg = -1
for i in range(N):
if arr[i] < 0:
neg = i
break

if neg == -1:
print('Отрицательных нет')
else:
print('Номер первого отриц.:', neg+1)
s = 0
for i in range(neg+1,N):
s += abs(arr[i])
print('Сумма: ', s)
КуМир

алг сумма после перв отриц
нач
цел N = 10
цел таб arr[1:N]
цел i,neg,sum
нц для i от 1 до N
arr[i] := irand(-5,30)
вывод arr[i]:4
кц
вывод нс

neg := 0
нц для i от 1 до N
если arr[i] < 0 то
neg := i
выход
все
кц

если neg=0 то
вывод "отриц. нет"
иначе
вывод "первый отриц.: ", neg, нс
sum := 0
нц для i от neg+1 до N
sum := sum + iabs(arr[i])
кц
вывод "сумма модулей после = ", sum
все
кон
Basic-256

N = 10
dim arr(N)
for i=0 to N-1
arr[i] = int(rand*30) - 5
print arr[i] + " ";
next i
print

neg=-1
for i=N-1 to 0 step -1
if arr[i] < 0 then
neg = i
endif
next i

if neg = -1 then
print "Нет отриц."
else
print "Номер перв. отриц.: " + (neg+1)
sum = 0
for i=neg+1 to N-1
sum = sum + abs(arr[i])
next i
print sum
endif

В языке basic256 нет команды break. Поэтому поиск первого отрицательного элемента массива осуществляется перебором массива с конца.