|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
19.01.2014, 02:12 | #1 |
Регистрация: 16.01.2014
Сообщений: 5
|
Помоги решить ошибку программы по сортировке массивов.
Задача: вывести на экран информацию о студенте его фамилию и имя, а так же три оценки по модулям. Отсортировать прямым выбором и записать в файл. В части кода, когда идет перезапись в поле writln высвечивается ошибка Program4.pas(42) : Ошибка времени выполнения: Ссылка на объект не указывает на экземпляр объекта. Помоги решить проблему пожалуйста.
Код:
Последний раз редактировалось Stilet; 19.01.2014 в 11:19. |
19.01.2014, 02:33 | #2 |
Старожил
Регистрация: 02.03.2008
Сообщений: 2,499
|
Может быть в конце вместо
Код:
Код:
|
19.01.2014, 02:42 | #3 |
Регистрация: 16.01.2014
Сообщений: 5
|
Нет все равно пишет что ссылка не указывает на экземпляр объекта...
|
19.01.2014, 03:03 | #4 |
Старожил
Регистрация: 02.03.2008
Сообщений: 2,499
|
Reset - открывает существующий файл, ReWrite - создает новый и открывает для записи, а если есть такой файл - уничтожает и создает пустой.
И может быть, использовать не текстовый файл, а типизированный - file of Tstudent ? Непонятно: - имеется исходный файл или надо создать, вводя с клавиатуры данные? Если имеется, то какого типа ( текстовый, типизированный)? - как отсортировать (по .key или по .name или по оценкам .mod1 .. )? - после сортировки в какой файл записать? В исходный, вместо старых записей, или в новый файл ? Последний раз редактировалось type_Oleg; 19.01.2014 в 03:32. |
19.01.2014, 03:30 | #5 |
Регистрация: 16.01.2014
Сообщений: 5
|
Если поменять тип переменной то при открытии файла в поле read(f, g) появляется ошибка Program4.pas(34) : Ошибка времени выполнения: Чтение после конца потока невозможно.
Исходный файл есть со всей информацией. Текстовый файл по заданию сказано. Отсортировать ключом mod2. И записать в исходный файл. Последний раз редактировалось fallen1124; 19.01.2014 в 03:36. |
19.01.2014, 12:21 | #6 | |
Старожил
Регистрация: 09.01.2008
Сообщений: 26,229
|
во-первых, вы читаете из файла ТОЛЬКО имя:
Цитата:
Это если Вы не ошибаетесь и Вам действительно нужно читать именно ТЕКСТОВЫЙ файл (а не типизированный, что было бы многократно эффективней и удобней). во-вторых, читать нужно в массив P. Вы в него ничего не прочитали, а потом пытаетесь его сортировать. в-третьих, прочитаться может число записей ОТЛИЧНОЕ от 20. Нужно фиксировать в переменной, сколько у Вас реально записей в массиве и дальше сортировать/обрабытывать/выводить только это количество. в-четвёртых, операция - read ( p[i].name) - полностью БЕССМЫСЛЕНА (это ввод значения с клавиатуры)! ну и в пятых, в пост #4 type_Oleg задал ряд уточняющих вопросов. Ответьте на них (для себя в первую очередь)... |
|
19.01.2014, 14:55 | #7 |
Регистрация: 16.01.2014
Сообщений: 5
|
Я понимаю что легче типизированный использовать, но требуют именно текстовой. Я просто не понимаю как организовать запись в файл, и чтобы процедура работала, потому что когда я отдельно делаю с вводом с клавиатуры сортировка работает..
|
19.01.2014, 15:12 | #8 |
Старожил
Регистрация: 09.01.2008
Сообщений: 26,229
|
И что?..я не увидел у Вас в сообщении вопроса.
Да Вы и на поставленные Вам вопросы не отвечаете... |
19.01.2014, 15:17 | #9 | |
Регистрация: 16.01.2014
Сообщений: 5
|
я ответил на все вопросы в посте #5
Исходный файл есть со всей информацией. Текстовый файл по заданию сказано. Отсортировать ключом mod2. И записать в исходный файл. У меня вопрос состоит в следующем, как мне организовать запись в файл отсортированный массив, и мне еще непонятно что это значит Цитата:
const n=20; type tst = record key : integer; name: string[30]; mod1: integer; mod2: integer; mod3: integer; end; st = array [1..n] of tst; var t:st; f,f1:text; tmp:tst; i:integer; s:string[30]; procedure sort( var t:st; i:integer); var j,k : integer; begin for i:=1 to n-1 do begin k:=i; tmp:=t[k]; for j:=i+1 to n do if t[j].mod2<tmp.mod2 then begin k:=j; tmp:=t[k] end; t[k]:=t[i]; t[i]:=tmp; end; end; begin assign (f,'C:\FPC\2.6.0\1234.txt'); reset(f); while not Eof (f) do begin readln(f, s); writeln(s); end; sort(t,i); assign (f1,'C:\FPC\2.6.0\12345.txt'); rewrite(f1); for i:=1 to n do begin read(t[i].name); writeln(f1, t[i]); end; close(f1); end. Последний раз редактировалось fallen1124; 19.01.2014 в 22:35. |
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Здравствуйте,помоги решить задачи на массив. | Зухра89 | Помощь студентам | 0 | 10.02.2012 23:11 |
требуется написать программу по сортировке числовых массивов в паскале | Antoxa93 | Помощь студентам | 4 | 29.04.2011 20:47 |
О сортировке массивов в C++ | Frame1992 | Помощь студентам | 6 | 28.10.2009 16:50 |
[Turbo Pascal] Помогите найти ошибку в сортировке, пожалуйста. | Pork6 | Помощь студентам | 3 | 08.10.2008 21:29 |
Люди помоги решить задачку плиззззз!!!! | mad777 | Фриланс | 3 | 03.06.2008 12:34 |