![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
#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. Где я ошибся, подскажите, пожалуйста? Если можно, с комментариями! |
![]() |
![]() |
![]() |
#2 |
Пользователь
Регистрация: 07.05.2009
Сообщений: 17
|
![]()
помоему будет так:
Код:
Код:
|
![]() |
![]() |
![]() |
#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. |
![]() |
![]() |
![]() |
#4 |
Пользователь
Регистрация: 12.04.2009
Сообщений: 31
|
![]()
И как это исправить?
|
![]() |
![]() |
![]() |
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Турбо Паскаль | 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 |