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

samurr

0 / 0 / 0

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

Сообщений: 50

1

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

22.08.2014, 13:55. Показов 8984. Ответов 6

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


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

Задана матрица А(n,m). Для выполнения действий над элементами матрицы в соответствии с данными, приведенными в таблице написать программу на языке Pascal. Количество строк n=50 Количество столбцов m=20 Результат – одномерный массив Найти сумму отрицательных элементов в каждой строке матрицы отдельно.

Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
var A:array [1..50,1..20] of integer;
    Sum:array [1..50] of integer;
    i,j:integer;
    s:integer;
begin
writeln;
writeln('Vvedite elementy massiva:');
for i:=1 to 50 do
for j:=1 to 20 do
read(A[i,j]);
 
for i:=1 to 50 do begin
s:=0;
for j:=1 to 20 do
if A[i,j]<0 then s:=s+A[i,j];
Sum[i]:=s;
end;
writeln;
for i:=1 to 50 do
writeln(sum[i]);
readln;
end.

Не знаю что ввести:

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



0



Почетный модератор

64287 / 47586 / 32739

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

Сообщений: 115,182

22.08.2014, 14:02

2

И что, 1000 элементов будешь вводить с клавиатуры?



0



0 / 0 / 0

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

Сообщений: 50

22.08.2014, 14:08

 [ТС]

3

помоги плиз, что не так тут?



0



Puporev

Почетный модератор

64287 / 47586 / 32739

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

Сообщений: 115,182

22.08.2014, 14:12

4

Лучший ответ Сообщение было отмечено samurr как решение

Решение

Ну насчет 50 строк сам думай, а в принципе решение такое.

Pascal
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
const n=50;
      m=20;
var A:array [1..n,1..m] of integer;
    Sum:array [1..n] of integer;
    i,j:integer;
    s:integer;
begin
randomize;
writeln('Матрица');
for i:=1 to n do
 begin
  Sum[i]:=0;
  for j:=1 to m do
   begin
    A[i,j]:=-9+random(19);
    write(A[i,j]:3);
    if A[i,j]<0 then inc(Sum[i],A[i,j]);
   end;
  writeln;
 end;
writeln('Массив');
for i:=1 to n do
write(Sum[i]:4);
readln;
end.



2



0 / 0 / 0

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

Сообщений: 50

22.08.2014, 14:24

 [ТС]

5

Puporev, я новичок , и задания на Pascal достались совсем случайно(

Добавлено через 6 минут
Puporev, спасибо, еще 2 задания осталось)



0



dess

Заблокирован

22.08.2014, 20:13

6

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



0



Почетный модератор

64287 / 47586 / 32739

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

Сообщений: 115,182

22.08.2014, 21:00

7

Лучший ответ Сообщение было отмечено samurr как решение

Решение

Если отрицательных элементов нет, то их сумма равна 0.

Добавлено через 29 секунд
Также и положительных.



1



program z;
uses crt;
var i,j,s:integer;
const a:array [1..4,1..4] of integer=((-12,1,2,-21),
                                      (11,-14,13,8),
                                      (9,7,1,3),
                                      (5,0,-10,2));
begin
     clrscr;
     s:=0;
     for i:=1 to 4 do
         for j:=1 to 4 do
             if a[i,j]<0
                then
                    s:=s+a[i,j];
     writeln('Сумма отрицательных элементов матрицы: ',s);
     readln;
end.

Для квадратной матрицы с M * M чисел определить сумму элементов, расположенных ниже главной диагонали, среди строк, начинающихся с отрицательного элемента.

Вот код, но он не правильно находит сумму. Что не так?

#include <iostream>
#include <iomanip>
#include <ctime>
using namespace std;
int main()
{
    setlocale(0, "");
    int i = 0, j = 0, M, sum = 1;
    cout << "Введите кол-во строк в матрице: ";
    cin >> M;
    int** A = new int* [M];
    for (int i = 0; i < M; i++)
        A[i] = new int[j];
    srand(time(NULL));
    cout << "Матрица: " << endl;
    for (int i = 0; i < M; i++)
    {
        for (int j = 0; j < M; j++)
        {
            A[i][j] = (5 - rand() % 10);
            cout << setw(3) << A[i][j];
        }
        cout << endl;
    }
    for (int i = 0; i < M; j++)
        for (int j = 0; j < M; j++)
            if ((A[i][j] < 0) && (i > j)) {
                sum = sum + A[i][j];
            }

    cout << "Сумма элементов строки= " << sum << endl;
    delete[]A;
} 

задан 29 ноя 2020 в 12:59

oktavagg's user avatar

0

У Вас в коде несколько проблем:

  1. Переменные i и j не нужны. Вы в циклах обьявляете свои локальные переменные.
  2. Почему sum инициализируется еденицей? Должна ведь быть нулём.
  3. Строка A[i] = new int[j]; должна иметь вид A[i] = new int[M];. Матрица ведь должна быть квадратная. Ещё й j в данной точке программы равно нулю.
  4. В цикле суммирования Вы обходите всю матрицу, хотя этого можно и не делать. Да и с проверками беда. Вот возможная реализация:
for (int i = 1; i < M; i++)           // Начинаем сразу со второй строки матрицы
{
    if (A[i][0] >= 0)                 // Будем считать, только если первый элемент строки >= 0
    {
        for (int j = 0; j < i; j++)   // Идет по строке до элемента диагонали
        {
            sum += A[i][j];
        }
    }
}
  1. Удалять двумерный динамический массив нужно в обратном порядке его создания:
// Удаляем каждую строку матрицы
for (int i = 0; i < M; i++)
{
    delete[] A[i];
}

// Удаляем массив, который хранил указатели на строки матрицы
delete[] A;

ответ дан 29 ноя 2020 в 13:48

nemp
10 лет назад

Светило науки — 72 ответа — 932 помощи

Program matritsa;
Uses crt;
Var s:integer; {Переменная S — сумма}
m:array[1..6,1..4]of integer; {матрица}
i,j:byte; {Для использования циклов}
Begin clrscr; {Очистка экрана}
S:=0; {Обнуляем s}
For i:=1 to 6 do {проходит столбцы}
For j:=1 to 4 do {проходит строки}
m[i,j]:=random(101)-50; {присваивает случайное значение от -50 до 50}
For i:=1 to 6 do {проходит столбцы}
Begin {начало операторных скобок}
Writeln; {пропуск строки}
For j:=1 to 4 do {проходит строки}
Write(m[i,j]:4); {вывод значения}
End; {конец операторных скобок}
Writeln;
For i:=1 to 6 do {проходит столбцы}
For j:=1 to 4 do {проходит строки}
If m[i,j]<0 then {Проверка значения(меньше нуля?)}
S:=s+m[i,j]; {увеличивает сумму на значение данного элемента}
Writeln(‘Сумма отрицательных элементов матрицы =’,s); {Вывод}
End.

program ghf;

uses crt;

const
  kolN = 4;

var
  A: array [1 .. 100, 1 .. 100] of integer; { инициализация массива }
  i, j: integer;

function kolvo(i: integer): integer;
{ функция, определ-яя кол-во отрицательных элементов }
var
  rez: integer;
begin
  rez := 0;
  for j := 1 to kolN do
    if A[i, j] < 0 then
      inc(rez);
  kolvo := rez;
end; { --- конец функции }

function summa: integer; { функция, определ-яя сумму отрицательных элементов }
var
  rez: integer;
begin
  rez := 0;
  for i := 1 to kolN do
    for j := 1 to kolN do
      if A[i, j] < 0 then
        rez := rez + A[i, j];
  summa := rez;
end; { --- конец функции }

{ ----------------начало программы--------------------------------------- }
begin

  for i := 1 to kolN do
    for j := 1 to kolN do
    begin
      write('A[', i, ',', j, ']=');
      readln(A[i, j]);
    end; { считывыаем массив с экрана }
  clrscr;
  write('Vot vvedennyy vami massiv N:');
  for i := 1 to kolN do
  begin
    writeln;
    for j := 1 to kolN do
      write(A[i, j]:3, ' ');
  end; { выводим массив на экран }
  writeln;
  writeln;

  writeln('Kol-vo otric. kazhdoi stroki massiva:');
  for i := 1 to kolN do
    write(kolvo(i), ' ');
  { выводим кол-во отрицательных элементов в каждой строке }
  writeln;
  writeln;

  writeln('Summa otric. cisel: ', summa);
  { выводим сумму отрицательных элементов }

  readln;

end.

Понравилась статья? Поделить с друзьями:
  • Как найти добрую хорошую девушку
  • Как составить уравнение окружности если дано 3 точки
  • Выключатель света работает наоборот как исправить
  • Как вас найти перевод на английский
  • Как найти запись звонка в телефоне редми