|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
24.04.2009, 19:54 | #1 |
Пользователь
Регистрация: 12.04.2009
Сообщений: 31
|
Ошибка 202
Здравствуйте, люди добрые! Наставьте на путь истинный!
Задание: Сформировать двумерный массив F размером 2 x 8 с помощью генератора случайных чисел и вывести элементы массива на экран и в файл. В строке матрицы F, содержащей максимальный элемент, заменить все отрицательные числа нулями (оформить нахождение максимального элемента в виде функции). Вывести на экран и в файл номер этой строки и максимальный элемент. Я пошёл следующим путём: uses crt; type mass=array [1..2,1..8] of real; func=function (b:mass): real; var F:mass; procedure preobr (var a:mass); var x,y: integer; max: func; begin x:=1; for y:=1 to 8 do if (max(f)=a[x,y]) and (a[x,y]<0) then a[x,y]:=0 else x:=2; for y:=1 to 8 do a[x,y]:=0; end; function max (b:mass): real; far; var x,y: integer; begin max:=b[1,1]; for x:=1 to 2 do for y:=1 to 8 do if b[x,y]>max(b) then max:=b[x,y]; end; var x,y: integer; c: text; begin assign (c,'f:\'); rewrite (c); clrscr; randomize; for x:=1 to 2 do for y:=1 to 8 do f[x,y]:=random*20-10; x:=1; for y:=1 to 8 do write (f[x,y]:7:3); writeln; x:=2; for y:=1 to 8 do write (f[x,y]:7:3); x:=1; for y:=1 to 8 do write (c,f[x,y]:7:3); x:=2; for y:=1 to 8 do write (c,f[x,y]:7:3); writeln; writeln (c); max (f); preobr (f); writeln ('максимальный элемент=',max (f):5:3,' в строке:',x); append (c); close (c); x:=1; for y:=1 to 8 do write (f[x,y]:7:3); writeln; x:=2; for y:=1 to 8 do write (f[x,y]:7:3); end. Запускаю всё это дело и выдаётся: "Not enough to run program." В чём я не прав и где ошибка, подскажите? |
24.04.2009, 20:26 | #2 |
Форумчянин
Форумчанин
Регистрация: 05.04.2009
Сообщений: 446
|
program XXX в начале написал?
Nobody expects Spanish Inquisition!
|
24.04.2009, 20:53 | #3 |
Пользователь
Регистрация: 01.12.2008
Сообщений: 58
|
Поправил прогу...правил в дельфи поэтому чтобы запустилось в Паскале придётся убрать строчку {$APPTYPE CONSOLE}.
Код:
1. Зачем тебе в проге был нужен uses.crt? (я его отключил...clrscr тоже) 2. откомментируй строчку Код:
Код:
Код:
Код:
6. построчно напиши комментарии к функции Код:
П.С. У тебя очень необычный вывод двумерного массива.... Последний раз редактировалось Troi666; 24.04.2009 в 21:05. |
25.04.2009, 16:00 | #4 |
Пользователь
Регистрация: 12.04.2009
Сообщений: 31
|
Я попытаюсь ответить на вопросы и прошу сделать снисхождение поскольку, пока ещё, сам "чайник", почему,собственно, и обратился за помощью. И всё же:
1. С первым пунктом согласен, даже ответить нечего. 2. append (c) - инициирует запись в ранее существовавший текстовый файл для его расширения. 3. assign (c,f:\) - стандартная процедура, в результате которой файловая переменная (с) связывается с именем файла (f:\). Но здесь я имя файла не дописал, только путь обозначил, т.к. имя может быть любым, в принципе. 4. writeln (c) - переводит курсор на следующую строку в текстовом файле. 5. На этот вопрос ответить не могу, честно говоря, не знаю. 6. Я пытался вычислить максимальное число, если что не так, то подскажите. А far - стандартная директива, для установления правильных связей функции с процедурой, ведь я пытался обозначить параметр-функцию. Если и здесь что не так, прошу подсказать в чём ошибка. Указанная функция должна передаваться в качестве фактических параметров вызова. А вывод массива такой потому, что так попросили, я не указал это условие в задании. В любом случае я благодарю Вас, Troi666, за подсказки!!! Я воспользовался Вашими советами и отредактировал программу. В результате её выполнения всё время получается, что максимальный элемент находится в строке 2, даже если он в строке 1.Почему так? Последний раз редактировалось Сэм; 25.04.2009 в 17:30. |
25.04.2009, 16:31 | #5 |
Пользователь
Регистрация: 01.12.2008
Сообщений: 58
|
по пунктам
2 - понимаешь в чём штука... append(имя_файла) - открывает файл с установкой курсора в его конец...А ты файл-то и не закрывал до этого места. А во-вторых после ввода в файл массива Код:
3. ты прав...только одно "но"...если ты хочешь работать с любым файлом, тебе нужно указать имя переменной, в которой будет храниться его имя, а не букву диска! допустим так: Код:
5-понимаешь в чём фишка..раз ты массив объявил глобально, тогда тебе его не нужно передавать в функции и процедуры Они его и так будут знать 6 - Код:
Последний раз редактировалось Troi666; 25.04.2009 в 16:33. |
25.04.2009, 17:32 | #6 |
Пользователь
Регистрация: 12.04.2009
Сообщений: 31
|
Я понял! ОГРОМНОЕ СПАСИБО!!!
|
25.04.2009, 17:35 | #7 |
Пользователь
Регистрация: 12.04.2009
Сообщений: 31
|
Я ПОНЯЛ! ОГРОМНОЕ СПАСИБО!!!
Я отредактировал прогу и в результате её выполнения почему-то получается, что максимальный элемент всегда в строке 2. Почему? |
25.04.2009, 17:51 | #8 |
Пользователь
Регистрация: 01.12.2008
Сообщений: 58
|
Отредактированный код в студию
|
10.05.2009, 19:13 | #9 |
Пользователь
Регистрация: 12.04.2009
Сообщений: 31
|
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. |
10.05.2009, 20:03 | #10 | ||
Oldschool geek
Форумчанин
Регистрация: 09.03.2009
Сообщений: 611
|
Цитата:
Цитата:
|
||
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Nero - ошибка драйвера DMA. ошибка CRC | NecRoMat | Софт | 5 | 09.05.2012 01:29 |
...Ошибка 101 (net::ERR_CONNECTION_RESET): Неизвестная ошибка... | infrared | Помощь студентам | 0 | 16.04.2009 17:44 |
Ошибка!! | Blackmore | БД в Delphi | 0 | 10.05.2008 11:43 |
ОШИБКА | YLIANOVA83 | Microsoft Office Word | 5 | 07.03.2008 15:02 |