IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

2 страниц V < 1 2  
 Ответить  Открыть новую тему 
> модули элементов в двумерном массиве
мисс_граффити
сообщение 14.11.2006 22:41
Сообщение #21


просто человек
******

Группа: Модераторы
Сообщений: 3 641
Пол: Женский
Реальное имя: Юлия

Репутация: -  55  +


это формальный параметр.
вместо него при вызоые подставляется фактический - i.


--------------------
Все содержимое данного сообщения (кроме цитат) является моим личным скромным мнением и на статус истины в высшей инстанции не претендует.
На вопросы по программированию, физике, математике и т.д. в аське и личке не отвечаю. Даже "один-единственный раз" в виде исключения!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
18192123
сообщение 14.11.2006 22:55
Сообщение #22


Профи
****

Группа: Пользователи
Сообщений: 920
Пол: Женский
Реальное имя: Марина

Репутация: -  2  +


Цитата(мисс_граффити @ 14.11.2006 22:41) *

это формальный параметр.
вместо него при вызоые подставляется фактический - i.

большое спасибо!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
18192123
сообщение 15.11.2006 18:08
Сообщение #23


Профи
****

Группа: Пользователи
Сообщений: 920
Пол: Женский
Реальное имя: Марина

Репутация: -  2  +


Цитата(18192123 @ 14.11.2006 22:55) *

большое спасибо!

а у меня тут еще один вариант "родился", только, по-моему, где-то напутала с формальными и фактическими параметрами, т.к. программа не идет дальше вывода исходной матрицы...


program zach_6;
uses crt;

const
  n = 2;
  m = 3;

type
  matr= array [1..n, 1..m] of real;
  vect=array[1..n] of real;
procedure Input(var a:matr);
var
  i, j: Integer;
begin
  for i := 1 to n do
   for j := 1 to m do begin
     write('a[', i, ',', j, ']=');
     readln(a[i, j]);
   end;
end;

procedure Print(const a:matr);
var
  i, j: Integer;
begin
  for i := 1 to n do begin
    writeln;
    for j := 1 to m do write(a[i, j] : 3);
  end;
  writeln;
end;
procedure modyl(var a:matr; s:vect);
var k,i:1..n;
j:1..m;
t:real;
begin
for i:=1 to n do s[k]:=0;
t:=0;
for k:=1 to n do
for i:=1 to n do begin
for j:=1 to m do begin
s[k]:=abs(a[i,j]);
t:=t+s[k];
end;
s[k]:=t;
end;
end;
procedure poisk (var s:vect;a:matr);
var
k,j:integer;
max:real;
begin
max:=s[1];
for k:=1 to n do
if max<s[k] then for j:=1 to n do writeln (a[k,j])
end;
Var
   a:matr; k:integer; t:real;
   s:vect;
Begin
clrscr;
input(a);
print(a);
modyl(a,s);
poisk(s,a);
readkey;
end.



Сообщение отредактировано: 18192123 - 15.11.2006 18:31
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
18192123
сообщение 15.11.2006 22:46
Сообщение #24


Профи
****

Группа: Пользователи
Сообщений: 920
Пол: Женский
Реальное имя: Марина

Репутация: -  2  +


Цитата(18192123 @ 15.11.2006 18:08) *

а у меня тут еще один вариант "родился", только, по-моему, где-то напутала с формальными и фактическими параметрами, т.к. программа не идет дальше вывода исходной матрицы...


program zach_6;
uses crt;

const
  n = 2;
  m = 3;

type
  matr= array [1..n, 1..m] of real;
  vect=array[1..n] of real;
procedure Input(var a:matr);
var
  i, j: Integer;
begin
  for i := 1 to n do
   for j := 1 to m do begin
     write('a[', i, ',', j, ']=');
     readln(a[i, j]);
   end;
end;

procedure Print(const a:matr);
var
  i, j: Integer;
begin
  for i := 1 to n do begin
    writeln;
    for j := 1 to m do write(a[i, j] : 3);
  end;
  writeln;
end;
procedure modyl(var a:matr; s:vect);
var k,i:1..n;
j:1..m;
t:real;
begin
for i:=1 to n do s[k]:=0;
t:=0;
for k:=1 to n do
for i:=1 to n do begin
for j:=1 to m do begin
s[k]:=abs(a[i,j]);
t:=t+s[k];
end;
s[k]:=t;
end;
end;
procedure poisk (var s:vect;a:matr);
var
k,j:integer;
max:real;
begin
max:=s[1];
for k:=1 to n do
if max<s[k] then for j:=1 to n do writeln (a[k,j])
end;
Var
   a:matr; k:integer; t:real;
   s:vect;
Begin
clrscr;
input(a);
print(a);
modyl(a,s);
poisk(s,a);
readkey;
end.



ну почему мне никто не хочет помочь!
неужели трудно объяснить, что я делаю не так! пожалуйста, объясните, в чем я ошибаюсь!!!

Сообщение отредактировано: 18192123 - 15.11.2006 23:32
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
18192123
сообщение 15.11.2006 23:34
Сообщение #25


Профи
****

Группа: Пользователи
Сообщений: 920
Пол: Женский
Реальное имя: Марина

Репутация: -  2  +


Цитата(18192123 @ 15.11.2006 22:46) *

ну почему мне никто не хочет помочь!
неужели трудно объяснить, что я делаю не так! пожалуйста, объясните, в чем я ошибаюсь!!!

кто-нибудь меня слышит? wacko.gif !help.gif
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
мисс_граффити
сообщение 15.11.2006 23:53
Сообщение #26


просто человек
******

Группа: Модераторы
Сообщений: 3 641
Пол: Женский
Реальное имя: Юлия

Репутация: -  55  +


послушай:
1. никто не обязан круглосуточно следить за твоими темами. когда будет время - все всё увидят. крики вроде "кто-нибудь меня слышит?" ничего, кроме раздражения, не вызывают. тем более с огромными скопированными кусками кода.
2. тебе дали рабочую программу? она тебе не нравится? тогда переделывай САМА. отлаживай. сравнивай с тем, что дали.

procedure modyl(var a:matr; s:vect);

ты хочешь тут изменять только a, оставляя s неизменным? нет? вот и пиши, что это var.


--------------------
Все содержимое данного сообщения (кроме цитат) является моим личным скромным мнением и на статус истины в высшей инстанции не претендует.
На вопросы по программированию, физике, математике и т.д. в аське и личке не отвечаю. Даже "один-единственный раз" в виде исключения!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
18192123
сообщение 16.11.2006 0:15
Сообщение #27


Профи
****

Группа: Пользователи
Сообщений: 920
Пол: Женский
Реальное имя: Марина

Репутация: -  2  +


Цитата(мисс_граффити @ 15.11.2006 23:53) *

послушай:
1. никто не обязан круглосуточно следить за твоими темами. когда будет время - все всё увидят. крики вроде "кто-нибудь меня слышит?" ничего, кроме раздражения, не вызывают. тем более с огромными скопированными кусками кода.
2. тебе дали рабочую программу? она тебе не нравится? тогда переделывай САМА. отлаживай. сравнивай с тем, что дали.

procedure modyl(var a:matr; s:vect);

ты хочешь тут изменять только a, оставляя s неизменным? нет? вот и пиши, что это var.

вот я и переделываю!


Цитата(18192123 @ 16.11.2006 0:09) *


согласна, это я погорячилась. понимаю, что мне здесь никто ничего не должен

теперь о задаче:
я делаю, как ты говоришь, но теперь прога выдает элементы 2-й строки, причем всегда и только первые два
????????????

 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Lapp
сообщение 16.11.2006 5:28
Сообщение #28


Уникум
*******

Группа: Модераторы
Сообщений: 6 823
Пол: Мужской
Реальное имя: Лопáрь (Андрей)

Репутация: -  159  +


Первое замечание: соблюдай отступы! после каждого begin текст идет на 2 позиции правее, после end - левее. Посмотри на мой код внизу - сразу видно, где задаются переменные, где тело процедуры, а где тело цикла, правда?

В процедуре Модыл (modyl) понаворочено..
1. В тройном цикле самый внешний (по k) - лишний.
2. Соответственно, сам параметр k - лишний. Все k заменить на i.
3. Тело цикла упростить так: s[i]:=s[i]+abs(a[i,j])
4. Тогда переменная t больше не нужна - убрать (она все равно неправильно использовалась)
5. Для краткости, убери цикл с занулением s[i] и сделай зануление во внешнем цикле двойного перед внутренним.

Должно получиться что-то вроде этого:
procedure modyl(var a:matr; var s:vect);
var
  i:1..n;
  j:1..m;
begin
  for i:=1 to n do begin
    s[k]:=0;
    for j:=1 to m do t:=t+abs(a[i,j])
  end
end;

В процедуре Поиск что-то совсем странное..
Ты печатаешь ВСЕ строчки, у которых s[k] больше чем s[1]. При этом первую строчка не напечатается, даже если s[1] больше всех остальных значений. Кроме того, ты перепутала n и m, поэтому выводятся не 3, а 2 элемента..
Как нужно делать:
1. Запоминаешь s[1] в max (это у тебя есть).
2. Заводишь еще один параметр (скажем, L) для номера искомой строки.
3. Кладешь в L единицу (номер первой строки).
4. Устраиваешь цикл по строчкам со 2-й (потому что первый элемент сравнивать с самим собой бессмысленно) до m.
5. В этом цикле, если s[k] больше чем max, то запоминаешь параметр цикла в L.
6. Выходишь из цикла и печатаешь строку с номером L.

Последнее замечание: почему ты в процедуре Модыл параметры цикла определяла диапазоном, а в процедуре Поиск аналогичные параметры у тебя integer? Типа при поиске проверка диапазона тебе не важна? Вот потому-то у тебя и получаются ошибки от путаницы m и n. Уж если делаешь диапазоном, делай везде. Когда перестанешь делать очевидные ошибки (или хотя бы научишься их искать) - тогда делай intrger.. smile.gif


--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
18192123
сообщение 16.11.2006 19:31
Сообщение #29


Профи
****

Группа: Пользователи
Сообщений: 920
Пол: Женский
Реальное имя: Марина

Репутация: -  2  +


Цитата(lapp @ 16.11.2006 5:28) *

Первое замечание: соблюдай отступы! после каждого begin текст идет на 2 позиции правее, после end - левее. Посмотри на мой код внизу - сразу видно, где задаются переменные, где тело процедуры, а где тело цикла, правда?

В процедуре Модыл (modyl) понаворочено..
1. В тройном цикле самый внешний (по k) - лишний.
2. Соответственно, сам параметр k - лишний. Все k заменить на i.
3. Тело цикла упростить так: s[i]:=s[i]+abs(a[i,j])
4. Тогда переменная t больше не нужна - убрать (она все равно неправильно использовалась)
5. Для краткости, убери цикл с занулением s[i] и сделай зануление во внешнем цикле двойного перед внутренним.

Должно получиться что-то вроде этого:
procedure modyl(var a:matr; var s:vect);
var
  i:1..n;
  j:1..m;
begin
  for i:=1 to n do begin
    s[k]:=0;
    for j:=1 to m do t:=t+abs(a[i,j])
  end
end;

В процедуре Поиск что-то совсем странное..
Ты печатаешь ВСЕ строчки, у которых s[k] больше чем s[1]. При этом первую строчка не напечатается, даже если s[1] больше всех остальных значений. Кроме того, ты перепутала n и m, поэтому выводятся не 3, а 2 элемента..
Как нужно делать:
1. Запоминаешь s[1] в max (это у тебя есть).
2. Заводишь еще один параметр (скажем, L) для номера искомой строки.
3. Кладешь в L единицу (номер первой строки).
4. Устраиваешь цикл по строчкам со 2-й (потому что первый элемент сравнивать с самим собой бессмысленно) до m.
5. В этом цикле, если s[k] больше чем max, то запоминаешь параметр цикла в L.
6. Выходишь из цикла и печатаешь строку с номером L.

Последнее замечание: почему ты в процедуре Модыл параметры цикла определяла диапазоном, а в процедуре Поиск аналогичные параметры у тебя integer? Типа при поиске проверка диапазона тебе не важна? Вот потому-то у тебя и получаются ошибки от путаницы m и n. Уж если делаешь диапазоном, делай везде. Когда перестанешь делать очевидные ошибки (или хотя бы научишься их искать) - тогда делай intrger.. smile.gif


кажется, я в очередной раз запуталась в процедурах modyl и poisk , программа мне выводит три строчки по 2 элемента, я наверное снова путаю m и n?
вот кусок для этих процедур:

procedure modyl(var a:matr; var s:vect);
var i:1..n;
j:1..m;
begin
  for i:=1 to n do 
    begin 
      s[i]:=0;
      for j:=1 to m do 
        begin
          s[i]:=s[i]+abs(a[i,j]);
         end; 
     end; 
 end;
procedure poisk (var s:vect;a:matr);
var
j:1..m;l,i:1..n;
max:integer;
begin
  max:=s[1];  
  l:=1;
  for i:=2 to n do 
   begin
     if max<s[i] then l:=i; 
   end;  
for    j:=1  to m  do writeln  (s[l]);
end;



wink.gif ох! wacko.gif

Сообщение отредактировано: 18192123 - 16.11.2006 19:37
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
18192123
сообщение 16.11.2006 21:27
Сообщение #30


Профи
****

Группа: Пользователи
Сообщений: 920
Пол: Женский
Реальное имя: Марина

Репутация: -  2  +


Цитата(18192123 @ 16.11.2006 19:31) *

кажется, я в очередной раз запуталась в процедурах modyl и poisk , программа мне выводит три строчки по 2 элемента, я наверное снова путаю m и n?
вот кусок для этих процедур:

procedure modyl(var a:matr; var s:vect);
var i:1..n;
j:1..m;
begin
  for i:=1 to n do 
    begin 
      s[i]:=0;
      for j:=1 to m do 
        begin
          s[i]:=s[i]+abs(a[i,j]);
         end; 
     end; 
 end;
procedure poisk (var s:vect;a:matr);
var
j:1..m;l,i:1..n;
max:integer;
begin
  max:=s[1];  
  l:=1;
  for i:=2 to n do 
   begin
     if max<s[i] then l:=i; 
   end;  
for    j:=1  to m  do writeln  (s[l]);
end;



wink.gif ох! wacko.gif

теперь поняла в чем ошибка: вместо
for    j:=1  to m  do writeln  (s[l]);

нужно
for j:=1 to m  do write(a[L,j],' ');


 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Lapp
сообщение 17.11.2006 7:26
Сообщение #31


Уникум
*******

Группа: Модераторы
Сообщений: 6 823
Пол: Мужской
Реальное имя: Лопáрь (Андрей)

Репутация: -  159  +


Цитата(18192123 @ 16.11.2006 22:27) *

теперь поняла в чем ошибка

Уррррааа!
smile.gif smile.gif smile.gif
Ты делаешь громадные успехи, кроме шуток. Продолжай в том же духе!

PS
При ответе, пожалуйста, оставляй из цитаты сообщения, на которое отвечаешь, только то, что нужно, а остальное удаляй - вот как я сейчас сделал, видишь?


--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

2 страниц V < 1 2
 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 

- Текстовая версия 18.07.2025 0:42
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"