1. Заголовок темы должен быть информативным. В противном случае тема удаляется ... 2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения. 3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали! 4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора). 5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM! 6. Одна тема - один вопрос (задача) 7.Проверяйте программы перед тем, как разместить их на форуме!!! 8.Спрашивайте и отвечайте четко и по существу!!!
{$N+} program lab8; uses crt; type q=record f:string [10]; p:string [10]; g:integer; r:integer;end; var w:file of q; m:q; i, r_max, s:integer;
Begin assign(w,'t.txt'); rewrite(w); for i:=1 to 10 do begin writeln('familya'); readln (m.f); writeln('pol'); readln (m.p); writeln('god rojdeniya'); readln (m.g); writeln('rost v cm'); readln (m.r); write(w, m); end; reset(w); for i:=1 to 10 do begin read(w,m); write (m.f, m.p, m.g, m.r); end; s:=1; seek(w,0); for i:=1 to 10 do begin if m.r>s then r_max:=m.r; writeln(m.f, m.p, m.g, m.r); writeln (r_max); end; readln; end.
Задача на файл, Помогите, что здесь не так?
Вот само задание: Запись имеет вид: фамилия, пол, год рождения, рост. Вывести данные о самом высоком спрорцмене.
Ну поппробуй ее запустить она компилиться, но нехрена неправельно работает=((
Чисто дружеский совет: ты гораздо быстрее и надежнее получишь помощь, если будешь точнее указывать основные симптомы неправильной работы программы. Ты пойми: что большинство (кто даже смог бы помочь), просто поленится скачивать, компилировать и запускать (как я, например), если не будет иметь зацепки.
В нижнем куске у тебя ошибка на ошибке. Ты перематываешь файл на начало (хотя, лучше писать просто Reset(w) вместо Search(w,0) ), но ты его не читаешь больше никогда. Читай заново каждую запись в цикле (хотя, это можно было сделать и в предыдущем цикле, в котором ты выврдишь записи на печать).
Ты запутался в переменных s и r_max. Я полагаю, s - номер нужной записи в файле. Тебе надо сравнивать рост и запоминать его, но еще тебе нужен номер записи спортмена с макс ростом, чтоб потом ее прочитать и вывести.
Короче, примерно так (не проверял).. Этот код заменяет ОБА последних цикла. Я заменил for на while для большей гибкости.
i:=0; r_max:=0; Reset(w); while not EoF(w) with m do begin Read(w,m); if r>r_max then begin r_max:=r; s=i end; Inc(i); writeln(i:3,' : ',f:20, p:10, g:10, r:10) end; Search(w,s); Read(w,m); with m do writeln('Max hight sportsmen is ',f:20, p:10, g:10, r:10);
И закрывай файл в конце.. Если что неясно - спрашивай
Добавлено через 17 мин. И еще вопрос: если макмимальный рост имеют ДВА (или больше) спортсмена - выводить только перврго или всех? Если всех, то нужен второй цикл. Счетчик записей тогда становится не нужен, и тот кусок будет выглядеть приметно так:
r_max:=0; Reset(w); while not EoF(w) with m do begin Read(w,m); if r>r_max then r_max:=r; writeln(f:20, p:10, g:10, r:10) end; Reset(w); while not EoF(w) with m do begin Read(w,m); if r=r_max then writeln('Max hight sportsmen is ',f:20, p:10, g:10, r:10); end;
--------------------
я - ветер, я северный холодный ветер я час расставанья, я год возвращенья домой
Лепить никуда ничего не надо в программировании. Надо разобраться, как работает предложенный код, и исправить свою программу соответствующим образом... Что именно непонятно по коду?