Как найти сумму модулей элементов массива

Перейти к содержанию

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

Просмотров 4.6к. Обновлено 20 октября 2021

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

Сначала находим первый отрицательный элемент и запоминаем его индекс (например, в переменной 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-го отриц.: %dn", neg+1);
sum = 0;
for (i=neg+1; i< N; i++) sum += abs(arr[i]);
printf("сумма: %dn", 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. Поэтому поиск первого отрицательного элемента массива осуществляется перебором массива с конца.

0 / 0 / 0

Регистрация: 27.05.2010

Сообщений: 23

1

Сумма модулей элементов массива

27.05.2010, 19:06. Показов 2906. Ответов 7


Студворк — интернет-сервис помощи студентам

в одномерном массиве, состоящем из n вещественных элементов, вычислить:
1) количество отрицательных элементов массива;
2) сумму модулей элементов массива, расположенных после минимального по модулю элемента.
заменить все отрицательные элементы массива их квадратами и упорядочить элементы массива по возрастанию.

Буду очень благодарна Вам, если мне поможете решить.



0



Qwerty_coder

29 / 29 / 6

Регистрация: 14.12.2009

Сообщений: 79

28.05.2010, 17:21

2

Держи код..

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
#include "stdafx.h"
#include <stdio.h>
#include <conio.h>
#include <iostream>
#include <math.h>
 
using namespace std;
 
int i, k = 0, minimum = 0, minind = 0, sum = 0;
 
 
int _tmain(int argc, _TCHAR* argv[])
{
    double a[10] = {0};
    cout << "Vvedite elementy massiva:" << "n";
    for (int i = 0; i < 10; i++)
        cin >> a[i];
    //Подсчет кол-ва отрицательных элементов массива
    for (int i = 0; i < 10; i++)
        if (a[i] < 0)
            k++;
    //Сумму модулей элементов массива, расположенных после минимального по модулю элемента
    for (int i = 0; i < 10; i++)
        if (abs(a[i]) < a[minimum])
        {
            a[minimum] = abs(a[i]);
            minind = i;
        }
    for (int i = minind + 1; i < 10; i++)
        sum += abs(a[i]);
 
    cout << "Kol-vo otricatelnyx elementov massiva = " << k << "n";
    cout << "Min. po modulu element: " << a[minind] << "n";
    cout << "Summa = " << sum;
 
    //Заменить все отрицательные элементы массива их квадратами
    cout << "nMassiv: " << "n";
    for (int i = 0; i < 10; i++)
    {
        if (a[i] < 0)
            a[i] = pow(a[i],2);
        cout << " " << a[i];
    }
 
    //Сортировка массива
    cout << "nOtsortirovanny massiv: " << "n";
    int r, k = 10;
    for (int i = 0; i < k - 1; i++)
    {
        for (int j = i + 1; j < k; j++)
        {
            if (a[i] > a[j])
            {
                r = a[i];
                a[i] = a[j];
                a[j] = r;
            }
        }
    }
 
    for (int i = 0; i < 10; i++)
        cout << " " << a[i];
 
    scanf("%d");
        return 0;
}



1



0 / 0 / 0

Регистрация: 27.05.2010

Сообщений: 23

28.05.2010, 19:27

 [ТС]

3

извините пожалуйста,он пишит ошибку в первой строчке



0



Qwerty_coder

29 / 29 / 6

Регистрация: 14.12.2009

Сообщений: 79

28.05.2010, 19:45

4

тусся,

C++
1
#include "stdafx.h"

можно убрать

или попробуй сделать так:

Чтобы все заработало, создай новый проект (console application), после чего появится окошко, нажми Next и в пункте “Additional options” поставь галку на “Precompiled header”.

После чего вставляй туда мой код.



0



0 / 0 / 0

Регистрация: 27.05.2010

Сообщений: 23

28.05.2010, 20:02

 [ТС]

5

но у меня visual studio6.0, скажите пожалуста, что мне делать



0



Qwerty_coder

29 / 29 / 6

Регистрация: 14.12.2009

Сообщений: 79

28.05.2010, 20:07

6

тусся, ладно, будет действовать попроще. Для начала создайте пустой консольный проект (empty project) и вставьте туда вот этот вот код. Я его немного подправил, поэтому теперь должно все отлично запускаться:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
#include <stdio.h>
#include <conio.h>
#include <iostream>
#include <math.h>
 
using namespace std;
 
int i, k = 0, minimum = 0, minind = 0, sum = 0;
 
int main()
{
    double a[10] = {0};
    cout << "Vvedite elementy massiva:" << "n";
    for (int i = 0; i < 10; i++)
        cin >> a[i];
        //Подсчет кол-ва отрицательных элементов массива
        for (int i = 0; i < 10; i++)
                if (a[i] < 0)
                        k++;
        //Сумму модулей элементов массива, расположенных после минимального по модулю элемента
        for (int i = 0; i < 10; i++)
                if (abs(a[i]) < a[minimum])
                {
                        a[minimum] = abs(a[i]);
                        minind = i;
                }
       for (int i = minind + 1; i < 10; i++)
           sum += abs(a[i]);
 
        cout << "Kol-vo otricatelnyx elementov massiva = " << k << "n";
        cout << "Min. po modulu element: " << a[minind] << "n";
        cout << "Summa = " << sum;
 
        //Заменить все отрицательные элементы массива их квадратами
        cout << "nMassiv: " << "n";
        for (int i = 0; i < 10; i++)
        {
                if (a[i] < 0)
                        a[i] = pow(a[i],2);
                cout << " " << a[i];
        }
 
        //Сортировка массива
        cout << "nOtsortirovanny massiv: " << "n";
        int r, k = 10;
        for (int i = 0; i < k - 1; i++)
        {
                for (int j = i + 1; j < k; j++)
                {
                        if (a[i] > a[j])
                        {
                                r = a[i];
                                a[i] = a[j];
                                a[j] = r;
                        }
                }
        }
 
        for (int i = 0; i < 10; i++)
                cout << " " << a[i];
 
        scanf("%d");
        return 0;
}



1



0 / 0 / 0

Регистрация: 27.05.2010

Сообщений: 23

28.05.2010, 20:19

 [ТС]

7

СПАСИБО БОЛЬШОЕ, ПОЛУЧИЛОСЬ=)))))))))))



0



29 / 29 / 6

Регистрация: 14.12.2009

Сообщений: 79

28.05.2010, 20:20

8

Рад за вас =)



1



Нахождение суммы модулей элементов массива размещённых после ноля

На чтение 2 мин Просмотров 100 Опубликовано 22.11.2012
Обновлено 30.01.2023

В этой статье я расскажу вам как найти сумму элементов массива, которые размещены после ноля (ну или любого другого символа).
Прежде всего отмечу, что мы не будем использовать никаких сторонних библиотек. Эта задача проста и не трубет особо громоздкого кода.

#include <iostream>
using namespace std;

В главной функции программы оприделим наш массив:

int a[10] = {1,-3,5,0,-5,6,8,9,-8,6};

Зарезервируем переменную для суммы:

int summa = 0;

Теперь в цикле будем проходить массив до нахождения необходимого элемента:

for (int i=0; i<10; i++){
        if (a[i]==0) {
            for (i=i+1; i<10; i++)   ////обратите внимание, что проход начинается со следующего элемента! Ноль проходить нам  ненужно.. 
                summa += (a[i] > 0) ? a[i]: -a[i];
            break;
        }
}

После нахождения необходимого элемента добавляем в переменную суммы модули элементов.
Модуль числа можно найти при помощи функции abs(), но это очень просто реализовать при помощи тернарного оператора. Рассмотрим его суть.

(a[i]>0) ? a[i] : -a[i];

Если будет выполнено условие (a[ i ] > 0) т.е. число положительное, то к сумме будет добавлен элемент a[ i ]; если элемент отрицателен (a[ i ] > 0) — необходимо изменить знак ( -a[ i ] ).
После прохода вложенного массива необходимо остановить проход проход главного. Это делается при помощи ключевого слова break.
Теперь осталось только вывести на экран результат:
cout << «Cумма элементов после 0 = » << summa;
У меня после компиляции получилось вот так:

Cумма элементов после 0 = 42

Наша программа готова.

Похожий код:

Avatar photo

Программист, разработчик с 5 летним опытом работы. Учусь на разработчика игр на Unity и разработчика VR&AR реальности (виртуальной реальности). Основные языки программирования: C#, C++.

Николай Веселуха

Высший разум

(334025)


11 лет назад

// _69761031
#include <iostream>
using namespace std;

int main()
{
int a[] = {-3, 2, -8, 2, 0, -4, 4, -6, -5, 7, 9, -1};
int min = a[0], summa = 0;
for (int n = 0; n < sizeof(a) / sizeof(int); n++)
{
if (min > a[n]) min = a[n];
summa += abs(a[n]);
}
cout << “n Minimum = ” << min << “n Summa = ” << summa;
cin.get();
return 0;
}

ra

Высший разум

(113206)


11 лет назад

#include <stdlib.h>
#include <stdio.h>
#include <time.h>

int main() {
int a[10], c, min, sum = 0;
printf(“random array:”);
srand(time(NULL));
/* инициализация массива случайными числами */
for (c = 0; c < 10; ++c) {
printf(” %d”, a[c] = rand() % 101 – 50);
}
/* поиск минимума */
min = a[0];
for (c = 1; c < 10; ++c) {
if (min > a[c]) {
min = a[c];
}
}
/* подсчет суммы модулей */
printf(“nmin: %d”, min);
for (c = 0; c < 10; ++c) {
sum += a[c] < 0 ? -a[c] : a[c];
}
printf(“nsum: %dn”, sum);
return 0;
}

Задача — Сумма модулей элементов массива, расположенных после первого отрицательного
— программирование на Pascal, Си, Кумир, Basic-256, Python

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

Например, в массиве [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-го отриц.: %dn”, neg+1);
        sum = 0;
        for (i=neg+1; i<N; i++) sum += abs(arr[i]);
        printf(“сумма: %dn”, 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
    все
кон

В языке КуМир функция abs() возвращает вещественное число. Поэтому ее нельзя использовать в выражении добавления значения к переменной sum (последняя целочисленная). Кроме abs() в языке предусмотрена функция iabs(), возвращающая целочисленное значение.

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. Поэтому поиск первого отрицательного элемента массива осуществляется перебором массива с конца.

Did you find apk for android? You can find new Free Android Games and apps.

Добавить комментарий