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

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

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

> подпрограммы, Разделить элементы каждой строки матрицы на максимальный элемент этой
футбик
сообщение 17.10.2008 15:30
Сообщение #1


Новичок
*

Группа: Пользователи
Сообщений: 17
Пол: Мужской

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


помогите разобраться пожалуйста
необходимо разделить элементы каждой строки матрицы на максимальный элемент этой строки
Оформить как подпрограммы:
1. ввод двумерного массива
2. алгоритм обработки массива
3. Вывод двумерного массива на экран
Все процедуры должны иметь параметры.

type matrix=array[1..7,1..7] of real;
var
i,j,n,m:integer;

Procedure input( var a:matrix); //ввод массива
begin
writeln('введите число строк и столбцов массива:');
read(n,m);
writeln('введите элементы массива: ');
for i:=1 to n do
for j:=1 to m do
begin
read(a[i,j]);
end;
end;

Procedure go ( a:matrix); //обработка
var
i,j,n,m:integer;
amax:array[1..7] of real;
c:real;
begin
for i:=1 to n do
begin //обработка массива не идет
c:=a[i,1];
for j:=1 to m do
if amax[i]>c then amax[i]:=c;
if amax[i]<>0 then a[i,j]:=a[i,j]/amax[i];
end;
end;

Procedure output ( var a:matrix); //вывод
begin
for i:=1 to n do
begin
for j:=1 to m do
write(a[i,j]);
writeln;
end;
end;
var a:matrix;

begin
input(a);
go; // пишет неверное количество фактических параметров (
output(a);
end.




 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
volvo
сообщение 17.10.2008 17:43
Сообщение #2


Гость






Хм... Скажи спасибо, что программа не вылетает вообще. Смотри, что ты делаешь:

Procedure go (var a:matrix);
var
i,j,n,m:integer;
amax:array[1..7] of real;
c:real;
begin
for i:=1 to n do { <--- идешь по всем строкам... Допустим... }
begin
{
Запомнил первый элемент, наверное для того, чтобы с ним сравнивать
остальные...
}
c:=a[i,1];

for j:=1 to m do
{
Но что с чем сравниваешь? Массив amax вообще неинициализирован.
Что там хранится сейчас? Мусор...
}
if amax[i]>c then amax[i]:=c;

if amax[i]<>0 then a[i,j]:=a[i,j]/amax[i];
end;
end;


А теперь - что надо делать:
Procedure Go(var a: matrix);
{ тут переменные }
begin
for i := 1 to n do begin { Пока все то же - идем по строкам... }

{ В каждой строке делаем: }
max := a[i, 1];
for j := 2 to m do begin
{ Здесь сравниваешь A[i, j] с max и ... Ну, дальше ты знаешь, что делать... }
end;

{
Когда пришли сюда, в Max уже хранится макс. элемент текущей строки...
Запускаешь еще один цикл по J, в котором делишь все элементы строки на Max
(не забудь предотвращать деление на 0)
}
end;
end;


Как результат - избавляешься от лишнего массива в процедуре.
 К началу страницы 
+ Ответить 

Сообщений в этой теме


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

 



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