Не работает чтение текстового файла
Вложений: 1
всем привет. когда пытаюсь подключить внешний текстовы файл выдает вместо табличных данных то что в файле, все 0. прошу помогите исправить плиз . нужно было считать с текстового файла информацию (файл прикрепил) и отсортировать ее по сумме балов. вот программа: я вас умоляю помогите исправить вместо данных одни 0, что то не то записалось. вот код:
Код:
const |
Вложений: 1
Цитата:
Но прежде всего замечу, что такой лавины ошибок и нелепостей я давненько не видел. Поймите главное: девиз программиста - точность, аккуратность, скрупулезность. А всяких литературных эссе на тему "ну, что-то типа, авось железяка разберется и сообразит, что я имел в виду" компьютер не понимает. Абсолютно. Ну ладно, теперь к программе. 1. Зачем в файле данных последняя графа (сумма)? Программа ее сосчитает сама, значит в текстовом файле ей делать нечего. 2. Первая строка текстового файла - заголовок. Его небходимо при считывании данных пропустить, чего у Вас не сделано. Для этого после Reset(f); нужно вставить Readln(f); 3. Число студентов, заданных константой (4), не соответствует числу строк в файле (3). Возникает ошибка. И что Вы делаете? Командой $R- Вы просто маскируете ошибку, а то, что при этом возможно "налезание" одних данных на другие при внутренней разметке памяти - Вам, извините, пофиг. Нет, не пойдет. Не надо подобного варварства. В том варианте программы, который я Вам предложу в конце, число студентов заранее не определено, задано лишь максимальное количество. 4. Поля записи - безобразно-неряшливы. Что за Alg, например? 5. Теперь приступим к анализу процесса считывания данных. Тут вообще такой кошмар, что только за голову хватаешься. Ошибка на ошибке. а) Ну зачем Вы оставляете экранный вывод строк-комментариев для консольного ввода, если данные считываются из файла?! Убрать! б) Вы определяете поле Prizv, как открытую строку, и наивно полагаете, что, дойдя до конца фамилии, компьютер "сообразит", что нужно остановиться? Уверяю Вас, и не подумает, а прочешет всю строку целиком до последнего значащего символа. Проблема снимается заданием типа поля Prizv в виде строки ограниченной длины. в) Дальше - всё интереснее и интереснее. Вместо того, чтобы считывать оценки прямо в числовом формате, Вы их пытаетесь считывать в виде строк, причем опять же неограниченной длины! Зачем такие сложности? 6. Что за метод упорядочения Вы применили? По-моему, весьма сомнительный. Во всяком случае, я такого не знаю, поэтому (на всякий случай) заменил обычным "пузырьком". Нет, я не утверждаю, что это неправильно, может быть так и можно. Если преподы с вас требуют упорядочивать именно так - исправьте. Уф, ну, вроде, в первом приближении - всё. Текст исправленной и отлаженной программы выкладываю, исправленный файл прилагаю. Код:
const |
благодарю вас, буду подробно изучать еще ваш код, с файлами совсем не понимал, с типизированным более менее нормально работаю, с текстовыми были проблемы, СПАСИБО )
|
Часовой пояс GMT +4, время: 14:54. |
Powered by vBulletin® Version 4.5.3
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.