Как найти сумму модулей отрицательных элементов

Tyler_Fox

4 / 4 / 2

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

Сообщений: 83

1

26.12.2017, 22:08. Показов 2949. Ответов 8

Метки нет (Все метки)


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

Найти сумму модулей отрицательных элементов одномерного массива из N элементов. Хелпаните, плиз!

Добавлено через 1 час 26 минут
Сделал сам. Спасибо мне за помощь!

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
#include "stdafx.h"
#include <iostream>
#include <ctime>
#include <cstdlib>
using namespace std;
 
 
int main()
{
    setlocale(LC_ALL, "ru");
    int k = 0;
    srand(time(0));
    int mass[10] = {};
    for (int i = 0; i < 10; i++)
    {
        mass[i] = rand() % 11 - 5;
        cout << mass[i] << endl;
    }
 
    for (int i = 0; i < 10; i++)
    {
        if (mass[i] < 0)
            k = k + mass[i];
    }
    k = abs(k);
 
    cout << "Сумма равна " << k << endl;
 
 
    system("pause");
 
 
    return 0;
}



1



4024 / 3279 / 921

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

Сообщений: 12,259

Записей в блоге: 1

26.12.2017, 22:17

2

неверно, LOL!



0



7427 / 5021 / 2891

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

Сообщений: 15,694

27.12.2017, 01:27

3

Цитата
Сообщение от Kuzia domovenok
Посмотреть сообщение

неверно, LOL!

Kuzia domovenok, поделитесь что не так ( я бы только N заводил в соответствии с условием и сам массив)



0



Новичок

1642 / 1091 / 487

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

Сообщений: 5,345

27.12.2017, 05:33

4

Цитата
Сообщение от Kuzia domovenok
Посмотреть сообщение

неверно, LOL!

А что действительно не так? Кодстайл не супер, но программа выглядит правильной.

Цитата
Сообщение от Tyler_Fox
Посмотреть сообщение

C++
25
k = abs(k);

Я бы написал

C++
25
k *= -1;



0



Kuzia domovenok

4024 / 3279 / 921

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

Сообщений: 12,259

Записей в блоге: 1

27.12.2017, 06:26

5

Цитата
Сообщение от Новичок
Посмотреть сообщение

А что действительно не так? Кодстайл не супер

за кодстайл я бы не стал говорить LOL. Я никогда не предъявляю новичкам чего-то выше их возможностей. Просто решение и вправду неверное.

Цитата
Сообщение от Tyler_Fox
Посмотреть сообщение

C++
1
2
3
4
5
6
for (int i = 0; i < 10; i++)
{
 if (mass[i] < 0) 
    k = k + mass[i]; 
} 
k = abs(k);
C++
1
2
3
4
5
for (int i = 0; i < 10; i++)
{
 if (mass[i] < 0) 
    k = k +abs(mass[i]); 
}

-2, -1, 0, 1, 2
Ответ автора 0
правильный ответ 6



0



7427 / 5021 / 2891

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

Сообщений: 15,694

27.12.2017, 06:35

6

если такой массив

Цитата
Сообщение от Kuzia domovenok
Посмотреть сообщение

-2, -1, 0, 1, 2

ответ и не 0 и не 6. Ответ 3. Что собственно и выдаёт программа.



0



1642 / 1091 / 487

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

Сообщений: 5,345

27.12.2017, 06:36

7

Цитата
Сообщение от Kuzia domovenok
Посмотреть сообщение

Ответ автора 0

И как там 0 вышел? Прибавит -2, прибавит -1, выйдет -3. И потом взяли модуль, вышло 3, почему правильный ответ 6? Если сумма модулей всех элементов то как раз 6, но надо ж только отрицательные. Может я чего-то не понимаю, потому что уже утро, а я до сих пор здесь сижу…



0



4024 / 3279 / 921

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

Сообщений: 12,259

Записей в блоге: 1

27.12.2017, 07:34

8

Новичок, невнимателен, бывает. Ну вот, всё LOLOLOLнастроение обломали…



0



4 / 4 / 2

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

Сообщений: 83

27.12.2017, 16:41

 [ТС]

9

Всё нормально. Найти ведь нужно сумму модулей ОТРИЦАТЕЛЬНЫХ элементов. И это программа и делает. Вот парочка тестов и результаты.



0



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

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

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

Дан двухмерный массив 5×5. Найти сумму модулей отрицательных нечетных элементов.
Я написал код и столкнулся с такой проблемой, отрицательные числа между собой должны прибавляться , например : -5 -5 – 4 = -14 . А у меня выходит совсем другая сумма . Либо я чего-то не понимаю , либо у меня код не правильный . Помогите пожалуйста , буду благодарен за любой ответ !
Вот мой код :

 int n = 5, m = 5;
            int[,] matrix = new int[n, m];
            int sum = 0;
           
            Random rnd = new Random();
            for (int i = 0; i < n; i++)
            {
                for (int j = 0; j < m; j++)
                {
                    matrix[i, j] = rnd.Next(-10, 10);
                    Console.Write($" {matrix[i, j]}  ");
                }
                Console.WriteLine();

            }
            Console.WriteLine("Нечетные отрицательные елементы");
            for (int i = 0; i < n; i++)
            {
                for (int j = 0; j < m; j++)
                {
                    if ((matrix[i, j] < 0) && (matrix[i, j] % 2 != 0))
                    {
                        sum = matrix[i, j];
                        Console.Write($"{sum}");
                    }
                }
            }
            Console.Write(" Сумма: ");
            for (int i = 0; i < n; i++)
            {
                for (int j = 0; j < m; j++)
                {
                    if (matrix[i, j] < 0 && matrix[i, j] % 2 == 1)
                        sum += Math.Abs(matrix[i, j]);
                }
            }
            Console.WriteLine($"{sum} ");

задан 17 окт 2020 в 11:46

Aligat's user avatar

0

Когда второй цикл заканчивает работу, в памяти в переменной sum остается значение последнего элемента массива, который вывелся на экран. И к этому значению вы прибавляете все остальные элементы.
Таким образом, нужно обнулять переменную Sum перед 3-м циклом либо суммировать нечетные отрицательные элементы в другую переменную.

 int n = 5, m = 5;
            int[,] matrix = new int[n, m];
            int sum = 0;
           
            Random rnd = new Random();
            for (int i = 0; i < n; i++)
            {
                for (int j = 0; j < m; j++)
                {
                    matrix[i, j] = rnd.Next(-10, 10);
                    Console.Write($" {matrix[i, j]}  ");
                }
                Console.WriteLine();

            }
            Console.WriteLine("Нечетные отрицательные елементы");
            for (int i = 0; i < n; i++)
            {
                for (int j = 0; j < m; j++)
                {
                    if ((matrix[i, j] < 0) && (matrix[i, j] % 2 != 0))
                    {
                        sum = matrix[i, j];
                        Console.Write($"{sum}");
                    }
                }
            }
            sum = 0;
            Console.Write(" Сумма: ");
            for (int i = 0; i < n; i++)
            {
                for (int j = 0; j < m; j++)
                {
                    if (matrix[i, j] < 0 && matrix[i, j] % 2 == 1)
                        sum += Math.Abs(matrix[i, j]);
                }
            }
            Console.WriteLine($"{sum} ");

Другие комментарии:

  1. Если размер массива всегда 5х5, то зачем создавать 2 дополнительных переменных, если можно обойтись одной: int[,] matrix = new int[n, n] или вообще 0: int[,] metrix = new int[5,5]
  2. Так как все элементы, которые вы ищите, отрицательны, то окончательная сумма будет противоположна модулю суммы отрицательных нечетных чисел, следовательно вы можете не использовать Math, а просто прибавлять число: sum += matrix[i, j], а в конце умножить sum *= -1, чтобы получить модуль – неторицательное число.

ответ дан 17 окт 2020 в 12:49

Максим Фисман's user avatar

Максим ФисманМаксим Фисман

4,0582 золотых знака11 серебряных знаков38 бронзовых знаков

2

uses crt;
var
   mas:array[1..100,1..100]of real;
   i,j,n,m,a,b,kol,kol1:integer;
   sum,min,el:real;
begin
   clrscr;
   write('n=');
   read(n);
   write('m=');
   read(m);
   for i:=1 to n do
   for j:=1 to m do
    begin
       write('mas[',i,',',j,']=');
       read(mas[i,j]);
    end;
   writeln;
   for i:=1 to n do
    begin
       for j:=1 to m do
        write(mas[i,j]:2:2,'  ');
       writeln;
    end;
   writeln;
   write('a=');
   read(a);
   write('b=');
   read(b);
   sum:=0;
   kol:=0;
   for i:=1 to n do
   for j:=1 to m do
    if mas[i,j]<0 then sum:=sum+abs(mas[i,j]);
   writeln('a) summa =',sum);
   if a>b then writeln('neverniy interval!')
    else
     begin
        for i:=1 to n do
        for j:=1 to m do
         if (mas[i,j]<a)or(mas[i,j]>b) then kol:=kol+1;
        writeln('b) kol-vo elementov ne (a,b)=',kol);
        min:=1000;
        for i:=1 to n do
        for j:=1 to m do
         if (mas[i,j]>=a)and(mas[i,j]<=b)and(mas[i,j]<min) then min:=mas[i,j];
        writeln('c) min iz otrezka [a,b] =',min:2:2);
     end;
   kol1:=0;
   el:=mas[1,1];
   for i:=1 to n do
   for j:=1 to m do
    if mas[i,j]=el then kol1:=kol1+1;
   writeln('d) kol-vo ',el:2:2,' = ',kol1);
   readkey;
end.

Ответ:

PascalABC.NET

begin

 var A := ReadArrInteger(‘введите массив с клавиатуры: ‘, 13);

 A.Where(x-> x < 0).Select(x -> abs(x)).Sum.Println;

end.

using System;

namespace ConsoleApp1

{

   class Program

   {

       static void Main(string[] args)

       {

           int n = 13;

           int[] array = new int[n];

           int result = 0;

           for (int i = 0; i < n; i++)

           {

               array[i] = int.Parse(Console.ReadLine());

               if (array[i] < 0)

                   result += Math.Abs(array[i]);

           }

           Console.WriteLine(“Cумма модулей отрицательных элементов равна {0}”, result);

           Console.ReadKey();

       }

   }

}

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