|
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 |
|||
|
РешениеНу насчет 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 |
|
РешениеЕсли отрицательных элементов нет, то их сумма равна 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.

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