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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 10.05.2009, 12:56   #1
Сэм
Пользователь
 
Регистрация: 12.04.2009
Сообщений: 31
Восклицание Массив и процедура (Турбо Паскаль)

Здравствуйте, люди добрые! Всех с праздником!!!
У меня вот какая проблема:
1. Задание: Сформировать двумерный массив F размером 2 x 8 с помощью генератора случайных чисел и вывести элементы массива на экран и в файл. В строке матрицы F, содержащей максимальный элемент, заменить все отрицательные числа нулями (оформить нахождение максимального элемента в виде функции). Вывести на экран и в файл номер этой строки и максимальный элемент.
2. Вот текст программы:
Program Project;
Uses crt;
Type mass=array [1..2,1..8] of real;
Func=function (a: mass): real;
Var x,y: integer;
Procedure preobr (max: func; var a: mass);
Var nomer_stroki: integer; maximum: real;
Begin
Maximum:=max (a);
If maximum=a[x,y] then nomer_stroki:=x;
For y:=1 to 8 do
If a[nomer_stroki,y]<0 then a[nomer_stroki,y]:=0;
End;
Function max (b: mass): real; far;
Var x,y: integer; max1: real;
Begin
Max1:=b[1,1];
For x:=1 to 2 do
For y:=1 to 8 do
If b[x,y]>max1 then max1:=b[x,y];
Max:=max1;
End;
Var max_el: real; c: text; f: mass;
Begin
Assign (c, ‘f:\project.txt’);
Rewrite (c);
Clrscr;
Randomize;
For x:=1 to 2 do
For y:=1 to 8 do
F[x,y]:=random*20-10;
For x:=1 to 2 do
Begin
For y:=1 to 8 do
Begin
Write (f[x,y]:7:3);
End;
Writeln;
End;
For x:=1 to 2 do
Begin
For y:=1 to 8 do
Begin
Write (c, f[x,y]:7:3);
End;
Writeln (c);
End;
Max_el:=max (f);
Preobr (max,f);
Writeln (‘Максимальный элемент = ’, max_el:6:3, ‘в строке’, x);
Writeln (c, ‘Maximal element =’, max_el:6:3);
Writeln (c, ‘v stroke’, x);
Close (c);
For x:=1 to 2 do
Begin
For y:=1 to 8 do
Begin
Write (f[x,y]:7:3);
End;
Writeln;
End;
Readln;
End.
При вычислении номера строки в процедуре всегда показывает цифру 2, т.е. максимальное число всегда в строке 2, даже если оно фактически в строке 1.
Где я ошибся, подскажите, пожалуйста? Если можно, с комментариями!
Сэм вне форума Ответить с цитированием
Старый 10.05.2009, 14:29   #2
sby
Пользователь
 
Регистрация: 07.05.2009
Сообщений: 17
По умолчанию

помоему будет так:
Код:
Max1:=b[1,1];
For x:=1 to 2 do
For y:=1 to 8 do
If b[x,y]>max1 then
begin
max1:=b[x,y];
nomer:=x;
end;
Max:=max1;
Код:
Writeln (‘Максимальный элемент = ’, max_el:6:3, ‘в строке’, nomer);
sby вне форума Ответить с цитированием
Старый 10.05.2009, 15:30   #3
Скандербег
Форумчанин
 
Регистрация: 04.04.2009
Сообщений: 438
По умолчанию

В процедуре preobr несколько логических ошибок.
If maximum = a[x,y] then nomer_stroki := x;
В теле программы в циклах переменные x и y используются как управляющие. После выхода из цикла их значения равны 2 и 8 соответственно. Эти значения применяются в процедуре preobr.
Чему будет равно значение a[x,y] при проверке вышеприведенного условия? Вполне понятно чему. Отсюда всегда одна и та же цифра 2.

Другая ошибка: если условие (If maximum = a[x,y] then ...) не выполняется, то что происходит с переменной nomer_stroki? Она не определена и ее значение может быть каким угодно (в отладке это значение было и -5 и 23489). Какое угодно значение применяется как ни в чем не бывало дальше (If a[nomer_stroki,y] < 0 then).

Последний раз редактировалось Скандербег; 10.05.2009 в 15:33.
Скандербег вне форума Ответить с цитированием
Старый 10.05.2009, 18:43   #4
Сэм
Пользователь
 
Регистрация: 12.04.2009
Сообщений: 31
По умолчанию

И как это исправить?
Сэм вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Турбо Паскаль Maxsimo Паскаль, Turbo Pascal, PascalABC.NET 0 06.05.2009 17:05
Турбо паскаль Gabi Помощь студентам 2 24.12.2008 22:18
Турбо Паскаль Jondeer Помощь студентам 3 28.10.2007 12:42
Турбо Паскаль Jondeer Помощь студентам 5 27.10.2007 17:19