{$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.
Задача на файл, Помогите, что здесь не так?
Вот само задание: Запись имеет вид: фамилия, пол, год рождения, рост. Вывести данные о самом высоком спрорцмене.
amega
25.10.2009 0:45
Цитата
Задача на файл, Помогите, что здесь не так?
с чего ты решил что здесь что то не так, можеш поведать свою мисль
dae-woo
25.10.2009 0:49
Ну поппробуй ее запустить она компилиться, но нехрена неправельно работает=((
Lapp
25.10.2009 9:06
Цитата(dae-woo @ 24.10.2009 21:49)
Ну поппробуй ее запустить она компилиться, но нехрена неправельно работает=((
Чисто дружеский совет: ты гораздо быстрее и надежнее получишь помощь, если будешь точнее указывать основные симптомы неправильной работы программы. Ты пойми: что большинство (кто даже смог бы помочь), просто поленится скачивать, компилировать и запускать (как я, например), если не будет иметь зацепки.
В нижнем куске у тебя ошибка на ошибке. Ты перематываешь файл на начало (хотя, лучше писать просто 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;
dae-woo
25.10.2009 15:26
ой что-то я непонял=((( куда это все лепить
volvo
25.10.2009 15:36
Цитата
куда это все лепить
Лепить никуда ничего не надо в программировании. Надо разобраться, как работает предложенный код, и исправить свою программу соответствующим образом... Что именно непонятно по коду?
Lapp
25.10.2009 15:39
Цитата(dae-woo @ 25.10.2009 11:26)
ой что-то я непонял=((( куда это все лепить
Ну я же ясно выразился (см. выше): "Этот код заменяет ОБА последних цикла"!! Читать умеешь? очки надень..
dae-woo
25.10.2009 17:53
выдает ошибки на этой строчки: while not EoF(w) with m do begin и незнает команды Search или хрен его что он несет((
Lapp
25.10.2009 17:56
Цитата(dae-woo @ 25.10.2009 13:53)
этой строчки: while not EoF(w) with m do begin и незнает команды Search или хрен его что он несет((
1. я пропустил do 2. спутал, надо seek извиняюсь. Что ж ты, такие простые ошибки не можешь сам исправить?..
dae-woo
25.10.2009 18:01
do вставил я тут загнал себя в угол=))
Добавлено через 8 мин. спасиб народ!!!
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.