Модераторы: volvo877, Snowy, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Процедуры и функции, пару вопросов по программе 
:(
    Опции темы
Sergas
Дата 5.12.2008, 17:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 23.10.2008

Репутация: нет
Всего: нет



Задание: даны две матрицы, выбрать матрицу через функцию (большое количество нулей) через процедуру подсчитать максимальный элемент и его номер.
Код

program laba6;
type
matrica=array [1..6, 1..6] of real;
var
a, b, c: matrica;
i, j, sum1, sum2: integer;
max: real;
nmax: integer;
function summa1 (k: matrica; var sum: integer): real;
begin
 sum:=0;
 for i:=1 to 4 do
  if k[i,i]=0  then
   sum:=sum+1;
 write('kolichestvo nuley=');
 writeln(sum, '');
end;
procedure max1 (c:matrica; row: integer; var rmax:real; var n:integer); {row - столбец?! почему не i?}
begin
 n:= 1;
 for i:= 2 to 4 do
 if c[row, j] > c[row, n] then
   n := j;
   rmax := c[row, n];
end;

begin
 writeln ('matrica a');
  for i:=1 to 4 do
   for j:=1 to 4 do begin
     write ('a(',i,',',j,')=');
     readln (a[i,j]);
   end;
for i:=1 to 4 do begin
 for j:=1 to 4 do
  write(a[i,j]:1:0, ' ');
  writeln;
end;
 summa1 (a, sum1);
writeln ('matrica b');
for i:=1 to 4 do
 for j:=1 to 4 do begin
  write ('b(',i,',',j,')=');
  readln (b[i,j]);
end;
for i:=1 to 4 do begin
 for j:=1 to 4 do
  write(b[i,j]:1:0, ' ');
  writeln;
end;
summa1 (b, sum2);   

writeln ('матрица');
for i:=1 to 4 do begin
  if sum1>sum2 then max1 (a, i, max, nmax)
  else max1 (a, j, max, nmax);
  for j:=1 to 4 do
    write(b[i,j]:1:0, ' ');
    writeln ('   max=', max:1:0, ' n=', nmax);
  end;
end.


Почему матрица транспонируется?  И где?
PM MAIL   Вверх
kemiisto
Дата 5.12.2008, 17:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Дикий Кот. =^.^=
****
Награды: 1



Профиль
Группа: Участник Клуба
Сообщений: 3292
Регистрация: 29.7.2007

Репутация: нет
Всего: 160



Цитата(Sergas @  5.12.2008,  15:33 Найти цитируемый пост)
Почему матрица транспонируется?  И где?

Sergas, а с чего ты взял, что она где то транспонируется?


--------------------
PM MAIL WWW GTalk Jabber   Вверх
Sergas
Дата 5.12.2008, 18:32 (ссылка)   | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 23.10.2008

Репутация: нет
Всего: нет



Немножко изменил^^
но вопросов меньше не стало)
Код

program laba6;
type
matrica=array [1..6, 1..6] of real;
var
a, b, g: matrica;
i, j, sum1, sum2: integer;
max: real;
nmax: integer;
function summa1 (k: matrica; var sum: integer): real;
begin
 sum:=0;
 for i:=1 to 4 do
  if k[i,i]=0  then
   sum:=sum+1;
 write('kolichestvo nuley=');
 writeln(sum, '');
end;
procedure max1 (c:matrica; row: integer; var rmax:real; var n:integer); {   <--- Почему именно ров а не i?}
begin
 n:= 1;
 for i:= 2 to 4 do
 if c[row, j] > c[row, n] then
   n := j;
   rmax := c[row, n];
end;
begin
 writeln ('matrica a');
  for i:=1 to 4 do
   for j:=1 to 4 do begin
     write ('a(',i,',',j,')=');
     readln (a[i,j]);
   end;
for i:=1 to 4 do begin
 for j:=1 to 4 do
  write(a[i,j]:1:0, ' ');
  writeln;
end;
 summa1 (a, sum1);
writeln ('matrica b');
for i:=1 to 4 do
 for j:=1 to 4 do begin
  write ('b(',i,',',j,')=');
  readln (b[i,j]);
end;
for i:=1 to 4 do begin
 for j:=1 to 4 do
  write(b[i,j]:1:0, ' ');
  writeln;
end;
summa1 (b, sum2);
writeln ('matrica');
for i:=1 to 4 do begin
  if sum1>sum2
  then max1 (a, i, max, nmax)
  else max1 (b, j, max, nmax);
  for j:=1 to 4 do
    if sum1>sum2
    then write(a[i,j]:1:0, ' ')         {   <--- Почему крутиться между этой строчкой и предыдущей?}
    else write(b[i,j]:1:0, ' ');
    writeln ('   max=', max:1:0, ' n=', nmax);
  end;
end.

в итоге выоддится последняя строка, а хотелось чтобы вся матрица)

Это сообщение отредактировал(а) Sergas - 5.12.2008, 21:31
PM MAIL   Вверх
volvo877
Дата 7.12.2008, 10:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2073
Регистрация: 15.11.2004

Репутация: 2
Всего: 116



Цитата(Sergas @  5.12.2008,  17:32 Найти цитируемый пост)
в итоге выоддится последняя строка, а хотелось чтобы вся матрица)
Не надо пользоваться глобальными переменными, это приводит к трудноуловимым глюкам: у тебя глобальный i меняется в процедуре max, и 
Цитата(Sergas @  5.12.2008,  17:32 Найти цитируемый пост)
Код
for i:=1 to 4 do begin
  if sum1>sum2
  then max1 (a, i, max, nmax)
  else max1 (b, j, max, nmax);

  { Вот тут i уже равно 4, хотя до max1 было равно 1 !!! }

  for j:=1 to 4 do
    if sum1>sum2
    then write(a[i,j]:1:0, ' ')
    else write(b[i,j]:1:0, ' ');
    writeln ('   max=', max:1:0, ' n=', nmax);
  end;
Сделай в процедуре и функции переменные цикла локальными
PM MAIL   Вверх
Sergas
Дата 7.12.2008, 21:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 23.10.2008

Репутация: нет
Всего: нет



Код

program laba6;
type
matrica=array [1..6, 1..6] of real;
var
a, b, g: matrica;
i, j, sum1, sum2: integer;
max: real;
nmax: integer;
function summa1 (k: matrica; var sum: integer): real;
var
m: integer;
begin
 sum:=0;
 for m:=1 to 4 do
  if k[m,m]=0  then
   sum:=sum+1;
 write('kolichestvo nuley=');
 writeln(sum, '');
end;
procedure max1 (c:matrica; rol: integer; var rmax:real; var n:integer);
var
l: integer;
begin
 n:= 1;
 for l:= 2 to 4 do
 if c[rol, j] > c[rol, n] then
   n := j;
   rmax := c[rol, n];
end;
begin
 writeln ('matrica a');
  for i:=1 to 4 do
   for j:=1 to 4 do begin
     write ('a(',i,',',j,')=');
     readln (a[i,j]);
   end;
for i:=1 to 4 do begin
 for j:=1 to 4 do
  write(a[i,j]:1:0, ' ');
  writeln;
end;
 summa1 (a, sum1);
writeln ('matrica b');
for i:=1 to 4 do
 for j:=1 to 4 do begin
  write ('b(',i,',',j,')=');
  readln (b[i,j]);
end;
for i:=1 to 4 do begin
 for j:=1 to 4 do
  write(b[i,j]:1:0, ' ');
  writeln;
end;
summa1 (b, sum2);
writeln ('matrica');
for i:=1 to 4 do begin
  if sum1>sum2
  then max1 (a, i, max, nmax)
  else max1 (b, i, max, nmax);
  for j:=1 to 4 do
    if sum1>sum2
    then write(a[i,j]:1:0, ' ')
    else write(b[i,j]:1:0, ' ');
    writeln ('   max=', max:1:0, ' n=', nmax);
  end;
end.


например вот так?
и тепер ещё вопрос: где ошибка? (ишет максимальный элемент и его номер только для первых двух строк)
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi"
THandle
Rrader
volvo877

Запрещается!

1. Обсуждать и делится взломанными компонентами или программным обеспечением

2. Публиковать ссылки на варез

3. Оффтопить

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, THandle, Rrader, volvo877.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Object Pascal: кроссплатформенные технологии | Следующая тема »


 




[ Время генерации скрипта: 0.0667 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.