Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 16.04.2013, 23:09   #1
darkshade
 
Регистрация: 24.02.2013
Сообщений: 8
По умолчанию подпрограмма: Дана матрица. Подсчитать количество строк, в которых элемент побочной диагонали четный

помогите пжлста найти ошибку
вот условие
1. Дана матрица А(6,6). Подсчитать количество строк, в которых элемент побочной диагонали четный.работать не с одной матрицей, а с двумя А1 и А2. В основной программе предусмотреть вызовы подпрограмм к обеим матрицам

Код:
Uses crt;
Type
  mas=array [1..25,1..25]of integer;
Var
  a,b: mas;
  n:integer;
Procedure Vvod (var msv:mas;var nn:integer);
Var
i,j:integer;
Begin
 for i:=1 to nn do
 begin
 writeln;
  for j:=1 to nn do
  begin
   msv [i,j]:=random(50)-25;
   write(msv[i,j]:4);
  end;
 end; 

end;
Procedure vivod ( msv:mas; nn:integer);
Var
  i,j:integer;
Begin
  for i:=1 to nn do begin
     for j:=1 to nn do
       write (msv [i,j]:5);
       writeln;
       end;
 End;
 Function Kol (msv:mas; nn:integer):integer;
 Var
   k,i,j:integer;
 Begin
   k:=0;
    for i:=1 to nn do
      for j:=1 to nn do
        if(j=n-i+1)and (a[i,j] mod 2=0) then k:=k+1;
         Kol:=k;
end;
Begin
 clrscr;
 write('ВВедите размер матрицы А=');
 read(n);
 Vvod (a,n);
 writeln;
 

 Writeln('Количество строк с четным элементом на побочной диагонали=',Kol(a,n));
 write ('Введите размер матрицы B=');
 Read(n);
 Vvod (b,n);
 
 writeln;
 Writeln(''Количество строк с четным элементом на побочной диагонали=',Kol(b,n));
end.


___________
1) Название темы должно адекватно отражать суть решаемой задачи/проблемы.

2) Код нужно оформлять по правилам:
тегом [CODE]..[/СODE]
(кнопочка на панели форматирования с решёточкой #)

Не забывайте об этом!

Модератор.

Последний раз редактировалось Serge_Bliznykov; 17.04.2013 в 09:32.
darkshade вне форума Ответить с цитированием
Старый 17.04.2013, 09:40   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

для того чтобы пройти по диагонали НЕ НУЖНО два цикла!
Нужен ОДИН цикл.
Поэтому процедура kol будет выглядеть так:

Код:
function Kol(msv: mas; nn: integer): integer;
var
  k, i : integer;
begin
  k := 0;
  for i := 1 to nn do
     if (a[i, nn - i + 1] mod 2 = 0) then k := k + 1;
  Kol := k;
end;

p.s. а ещё, будьте внимательны - старайтесь не использовать глобальные переменные внутри функций (вы используете n - а нужно использовать nn )
Serge_Bliznykov вне форума Ответить с цитированием
Старый 17.04.2013, 19:26   #3
darkshade
 
Регистрация: 24.02.2013
Сообщений: 8
По умолчанию

Все равно когда я вожу размер матрицы B программа не правильно считает
darkshade вне форума Ответить с цитированием
Старый 17.04.2013, 21:43   #4
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Сообщение от darkshade Посмотреть сообщение
Все равно когда я вожу размер матрицы B программа не правильно считает
ещё раз ваш код после всех изменений, скриншот того, что Вы вводите и что выдаёт программа.
Иначе это разговор про пустой мешок...
Serge_Bliznykov вне форума Ответить с цитированием
Старый 17.04.2013, 21:52   #5
darkshade
 
Регистрация: 24.02.2013
Сообщений: 8
По умолчанию

Безымянный.jpg

Код:
Program laba6;
Uses crt;
Type
  mas=array [1..25,1..25]of integer;
Var
  a,b: mas;
  n:integer;
Procedure Vvod (var msv:mas;var nn:integer);
Var
i,j:integer;
Begin
 for i:=1 to nn do
 begin
 writeln;
  for j:=1 to nn do
  begin
   msv [i,j]:=random(50)-25;
   write(msv[i,j]:4);
  end;
 end; 

end;
Procedure vivod ( msv:mas; nn:integer);
Var
  i,j:integer;
Begin
  for i:=1 to nn do begin
     for j:=1 to nn do
       write (msv [i,j]:5);
       writeln;
       end;
 End;
 Function Kol (msv:mas; nn:integer):integer;
 Var
   k,i:integer;
  begin
  k := 0;
  for i := 1 to nn do
     if (a[i, nn - i + 1] mod 2 = 0) then k := k + 1;
  Kol := k;
end;
Begin
 clrscr;
 write('Введите размер Матрицы А=');
 read(n);
 Vvod (a,n);
 writeln;
 

 Writeln('Количество строк с четным элементом на побочной диагонали=',Kol(a,n));
 write ('Введите размер матрицы B=');
 Read(n);
 Vvod (b,n);
 
 writeln;
 Writeln('Количество строк с четным элементом на побочной диагонали=',Kol(b,n));
 end.
darkshade вне форума Ответить с цитированием
Старый 17.04.2013, 22:13   #6
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,292
По умолчанию

Картинку лучше загрузить на http://www.radikal.cc/, например, или другой фотохостинг, а то она, кхм, скукожилась до полной невозможности ее разобрать.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 17.04.2013, 22:31   #7
darkshade
 
Регистрация: 24.02.2013
Сообщений: 8
По умолчанию

http://s019.radikal.ru/i633/1304/2c/e3110cc5ac8f.png
darkshade вне форума Ответить с цитированием
Старый 17.04.2013, 23:14   #8
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,292
По умолчанию

Код:
Function Kol (msv:mas; nn:integer):integer;
 Var
   k,i:integer;
begin
  k := 0;
  for i := 1 to nn do
     if (msv[i, nn - i + 1] mod 2 = 0) then k := k + 1;
  Kol := k;
end;
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 18.04.2013, 00:27   #9
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Код:
if (msv[i, nn - i + 1] mod 2 = 0) then k := k + 1;
BDA, точно так!
а я прозевал (и повторил ошибку TC в своём примере)! Позор на мою седую голову!

darkshade, на будущее. рекомендую ВСЕ переменные описывать ПОСЛЕ функций и процедур.
т.е. вот так:
Код:
Program laba6;
Uses crt;
Type
  mas=array [1..25,1..25]of integer;

Procedure Vvod (var msv:mas;var nn:integer);
Var
i,j:integer;
Begin
..
end;
Procedure vivod ( msv:mas; nn:integer);
Var
  i,j:integer;
Begin
..
End;
Function Kol (msv:mas; nn:integer):integer;
Var
   k,i:integer;
begin
....
end;

Var
  a,b: mas;
  n:integer;
Begin
 clrscr;
 write('Введите размер Матрицы А=');
 read(n);
 Vvod (a,n);
 writeln;
 

 Writeln('Количество строк с четным элементом на побочной диагонали=',Kol(a,n));
 write ('Введите размер матрицы B=');
 Read(n);
 Vvod (b,n);
 
 writeln;
 Writeln('Количество строк с четным элементом на побочной диагонали=',Kol(b,n));
end.
это позволит автоматически избежать ошибок и опечаток (т.е. процедура kol уже НЕ скомпилируется со строкой
Код:
if (a[i, nn - i + 1] mod 2 = 0) then
Serge_Bliznykov вне форума Ответить с цитированием
Старый 18.04.2013, 23:05   #10
darkshade
 
Регистрация: 24.02.2013
Сообщений: 8
По умолчанию

спасибо большое
darkshade вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Дана матрица С в строках с положительным элементом на побочной диагонали найти сумму всех элементов. greml Паскаль, Turbo Pascal, PascalABC.NET 0 02.12.2012 18:55
Дана квадратная матрица А порядка М. Найти сумму элементов каждой её диагонали, параллельной побочной(начиная с одноэлементной диа Richik123 Паскаль, Turbo Pascal, PascalABC.NET 1 31.05.2012 16:15
Массив 7х7 целого типа в каждом столбце поменять max элемент и элемент побочной диагонали Sheport Паскаль, Turbo Pascal, PascalABC.NET 1 20.06.2011 23:30
элемент, лежащий на побочной диагонали Violleta Помощь студентам 2 15.11.2010 22:29
Дана прямоугольная матрица. Определить количество столбцов, произведение элементов которых меньше 5 Sweeney Паскаль, Turbo Pascal, PascalABC.NET 0 10.12.2008 01:41