Форум программистов, компьютерный форум, киберфорум
Pascal (Паскаль)
Войти
Регистрация
Восстановить пароль
 
0 / 0 / 0
Регистрация: 16.12.2010
Сообщений: 4
1

Матрицы. Не могу найти ошибку.

08.01.2011, 23:00. Просмотров 480. Ответов 2
Метки нет (Все метки)

Для каждой строки матрицы А(6*5) и В (4*8) вычислить сумму и произведение отрицательных элементов. Для каждой матрицы так же определить количество строк, в которых сумма отрицательных элементов меньше их произведения.
Всегда выдает и сумму и произведение равное нулю, не могу понять в чем ошибка, подскажите.
Вот код:
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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
 program Zk_r_2;
Type matr=array[1..6,1..8] of real;
procedure Enter(n,m:integer;name:char;Var Z:matr);
var i,j:integer;
begin
writeln('vvedite',name,n,'*',m);
for i:=1 to n do
for j:=1 to m do
read (Z[i,j]);
readln;
end;
 
procedure Vich(n,m:integer;Var Z:matr;var k:integer);
var i,j:integer;
Var s,p:real;
begin
writeln('matrica Z:');
k:=0;
s:=0;
p:=1;
for i:=1 to n do
begin
for j:=1 to m do
begin
if (Z[i,j])<0 then
begin
s:=s+Z[i,j];
p:=p*Z[i,j];
end;
end;
end;
if s<p then
k:=k+1;
writeln;
end;
 
procedure Output(k:integer;s,p:real);
begin
Writeln('строк,где сумма отрицательных элементов меньше их произведения: ',k);
Writeln('сумма отрицательных элементов: ',s);
Writeln('произведения отрицательных элементов: ',p);
end;
 
Var A,B:matr;
kA,kB:integer;
s:real;
pA,pB:real;
begin
Enter(6,5,'A',A);
Enter(4,8,'B',B);
Vich(6,5,A,kA);
Vich(4,8,B,kB);
Output(kA,s,pA);
Output(kB,s,pB);
readln;
end.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
08.01.2011, 23:00
Ответы с готовыми решениями:

Не могу найти ошибку в расчете матрицы
Добрый день, господа! Суть проблемы в том, что при попытке решить СЛАУ с помощью матриц, получаю...

В функции обратной матрицы, не могу найти ошибку
У меня есть программа для нахождения обратной матрицы написанная на Dev C++. #include &lt;iostream&gt;...

Нужно упорядочить главную диагональ матрицы. Не могу найти ошибку в коде. P.S. я только начинаю потому, еслиш
#include &lt;iostream&gt;; #include &lt;math.h&gt;; using namespace std; int main() { int const n =...

Двумерный массив. Поиск нулей.Не могу найти ошибку ошибку в коде
Вот,например массив 5 5 0 1 0 1 0 1 1 1 1 1 0 0 0 0 1 0 0 1 0 0 1 0 0 0 0 считываются два...

2
179 / 179 / 81
Регистрация: 18.12.2010
Сообщений: 346
09.01.2011, 05:21 2
Цитата Сообщение от Djel Посмотреть сообщение
не могу понять в чем ошибка
Ошибки в целом две.
1. Ты не передаешь назад значения суммы и произведения из подпрограммы. Нужно сделать параметр var, как ты сделал для k.
2. Неправильно считаешь количество k (его нужно считать для КАЖДОЙ строки).
Вот полностью исправленный код..
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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
program Zk_r_2;
Type
  matr= array [1..6,1..8] of real;
 
procedure Enter(n,m: integer; name: char; Var Z: matr);
var
  i,j:integer;
begin
  writeln('vvedite',name,n,'*',m);
  for i:=1 to n do for j:=1 to m do
  //read (Z[i,j]);
  //readln;
  z[i,j]:= (Random-0.5)*10
end;
 
procedure Vich(n,m: integer; Var Z: matr; var k: integer; var s,p: real);
var
  i,j: integer;
  s1,p1: real;
begin
  writeln('matrica Z:');
  k:=0;
  s:=0;
  p:=1;
  for i:=1 to n do begin
    s1:=0;
    p1:=1;
    for j:=1 to m do if (Z[i,j])<0 then begin
      s1:=s1+Z[i,j];
      p1:=p1*Z[i,j];
    end;
    if s1<p1 then k:=k+1;
    s:=s+s1;
    p:=p*p1
  end;
  writeln;
end;
 
procedure Output(k: integer; s,p: real);
begin
  Writeln('строк,где сумма отрицательных элементов меньше их произведения: ',k);
  Writeln('сумма отрицательных элементов: ',s);
  Writeln('произведение отрицательных элементов: ',p);
end;
 
procedure Show(Z: matr; n,m: integer);
var
  i,j: integer;
begin
  for i:=1 to n do begin
    for j:=1 to m do write(Z[i,j]:6:2);
    writeln
  end
end;
 
Var
  A,B:matr;
  kA,kB:integer;
  sA,sB,pA,pB:real;
begin
  Randomize;
  Enter(6,5,'A',A);
  Enter(4,8,'B',B);
  Show(A,6,5);
  writeln;
  writeln;
  Show(B,4,8);
  Vich(6,5,A,kA,sA,pA);
  Vich(4,8,B,kB,sB,pB);
  Output(kA,sA,pA);
  Output(kB,sB,pB);
  readln;
end.
Кроме того, я тут сделал случайный ввод матриц (извини, набирать руками было в лом) и добавил вывод самих матриц.

PS
обрати внимание на форматирование кода.. без него ты дальше 1 страницы не уедешь.
1
0 / 0 / 0
Регистрация: 16.12.2010
Сообщений: 4
09.01.2011, 13:10  [ТС] 3
Спасибо большое за помощь)
Только вопрос, зачем добавляем s1 и p1?
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
09.01.2011, 13:10

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Не могу найти ошибку. Нажимаю на клавишу, выдает ошибку
uses ABCObjects,GraphABC; const Image_0 = '0_765e9_6a3e424a_S.png'; var...

Не могу найти ошибку в программе(для просмотра картинок):кнопка НАЗАД не работает(не становится активной) Найдите ошибку.

Не могу найти ошибку!! не могу не как разобраться! надо до завтра.
условие: Для 7 человек, среди которых есть мужчины и женщины, хранятся следующие данные: имя, пол...

Не могу разобраться с If-ами. Не могу найти ошибку
Только начал знакомство с программированием. Преподаватель задал задание, написать программу в VLC...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.