{$N+}program lab8;
uses crt;
type q=record
f:string [10];
p:string [10];
g:integer;
r:integer;end;
var w:fileof q;
m:q;
i, r_max, s:integer;
Begin
assign(w,'t.txt');
rewrite(w);
for i:=1to10dobegin
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:=1to10dobegin
read(w,m);
write (m.f, m.p, m.g, m.r);
end;
s:=1;
seek(w,0);
for i:=1to10dobeginif 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);
whilenot EoF(w) with m dobegin
Read(w,m);
if r>r_max thenbegin
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);
whilenot EoF(w) with m dobegin
Read(w,m);
if r>r_max then r_max:=r;
writeln(f:20, p:10, g:10, r:10)
end;
Reset(w);
whilenot EoF(w) with m dobegin
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 мин. спасиб народ!!!
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.