samurr 0 / 0 / 0 Регистрация: 19.08.2014 Сообщений: 50 |
||||
1 |
||||
Найти сумму отрицательных элементов в каждой строке матрицы22.08.2014, 13:55. Показов 8984. Ответов 6 Метки нет (Все метки)
Задана матрица А(n,m). Для выполнения действий над элементами матрицы в соответствии с данными, приведенными в таблице написать программу на языке Pascal. Количество строк n=50 Количество столбцов m=20 Результат – одномерный массив Найти сумму отрицательных элементов в каждой строке матрицы отдельно.
Не знаю что ввести:
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 строк сам думай, а в принципе решение такое.
2 |
0 / 0 / 0 Регистрация: 19.08.2014 Сообщений: 50 |
|
22.08.2014, 14:24 [ТС] |
5 |
Puporev, я новичок , и задания на Pascal достались совсем случайно( Добавлено через 6 минут
0 |
Заблокирован |
|
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
0
У Вас в коде несколько проблем:
- Переменные
i
иj
не нужны. Вы в циклах обьявляете свои локальные переменные. - Почему
sum
инициализируется еденицей? Должна ведь быть нулём. - Строка
A[i] = new int[j];
должна иметь видA[i] = new int[M];
. Матрица ведь должна быть квадратная. Ещё йj
в данной точке программы равно нулю. - В цикле суммирования Вы обходите всю матрицу, хотя этого можно и не делать. Да и с проверками беда. Вот возможная реализация:
for (int i = 1; i < M; i++) // Начинаем сразу со второй строки матрицы
{
if (A[i][0] >= 0) // Будем считать, только если первый элемент строки >= 0
{
for (int j = 0; j < i; j++) // Идет по строке до элемента диагонали
{
sum += A[i][j];
}
}
}
- Удалять двумерный динамический массив нужно в обратном порядке его создания:
// Удаляем каждую строку матрицы
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.