Tyler_Fox 4 / 4 / 2 Регистрация: 24.12.2017 Сообщений: 83 |
||||
1 |
||||
26.12.2017, 22:08. Показов 2949. Ответов 8 Метки нет (Все метки)
Найти сумму модулей отрицательных элементов одномерного массива из N элементов. Хелпаните, плиз! Добавлено через 1 час 26 минут
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 |
неверно, LOL! Kuzia domovenok, поделитесь что не так ( я бы только N заводил в соответствии с условием и сам массив)
0 |
Новичок 1642 / 1091 / 487 Регистрация: 17.07.2012 Сообщений: 5,345 |
||||||||
27.12.2017, 05:33 |
4 |
|||||||
неверно, LOL! А что действительно не так? Кодстайл не супер, но программа выглядит правильной.
Я бы написал
0 |
Kuzia domovenok 4024 / 3279 / 921 Регистрация: 25.03.2012 Сообщений: 12,259 Записей в блоге: 1 |
||||||||
27.12.2017, 06:26 |
5 |
|||||||
А что действительно не так? Кодстайл не супер за кодстайл я бы не стал говорить LOL. Я никогда не предъявляю новичкам чего-то выше их возможностей. Просто решение и вправду неверное.
-2, -1, 0, 1, 2
0 |
7427 / 5021 / 2891 Регистрация: 18.12.2017 Сообщений: 15,694 |
|
27.12.2017, 06:35 |
6 |
если такой массив
-2, -1, 0, 1, 2 ответ и не 0 и не 6. Ответ 3. Что собственно и выдаёт программа.
0 |
1642 / 1091 / 487 Регистрация: 17.07.2012 Сообщений: 5,345 |
|
27.12.2017, 06:36 |
7 |
Ответ автора 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
breakif 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 ineg=-1
for i=N-1 to 0 step -1
if arr[i] < 0 then
neg = i
endif
next iif 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
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} ");
Другие комментарии:
- Если размер массива всегда 5х5, то зачем создавать 2 дополнительных переменных, если можно обойтись одной:
int[,] matrix = new int[n, n]
или вообще 0:int[,] metrix = new int[5,5]
- Так как все элементы, которые вы ищите, отрицательны, то окончательная сумма будет противоположна модулю суммы отрицательных нечетных чисел, следовательно вы можете не использовать Math, а просто прибавлять число:
sum += matrix[i, j]
, а в конце умножитьsum *= -1
, чтобы получить модуль – неторицательное число.
ответ дан 17 окт 2020 в 12:49
Максим ФисманМаксим Фисман
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();
}
}
}