Помощь - Поиск - Пользователи - Календарь
Полная версия: Задача на файл
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
dae-woo
 
{$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
Цитата
Задача на файл, Помогите, что здесь не так?

с чего ты решил что здесь что то не так, можеш поведать свою мисль
dae-woo
Ну поппробуй ее запустить она компилиться, но нехрена неправельно работает=((
Lapp
Цитата(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);

И закрывай файл в конце..
Если что неясно - спрашивай smile.gif

Добавлено через 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
ой что-то я непонял=((( куда это все лепить
volvo
Цитата
куда это все лепить
dry.gif Лепить никуда ничего не надо в программировании. Надо разобраться, как работает предложенный код, и исправить свою программу соответствующим образом... Что именно непонятно по коду?
Lapp
Цитата(dae-woo @ 25.10.2009 11:26) *
ой что-то я непонял=((( куда это все лепить
Ну я же ясно выразился (см. выше): "Этот код заменяет ОБА последних цикла"!!
Читать умеешь? очки надень..
dae-woo
выдает ошибки на
этой строчки: while not EoF(w) with m do begin
и незнает команды Search или хрен его что он несет((
Lapp
Цитата(dae-woo @ 25.10.2009 13:53) *
этой строчки: while not EoF(w) with m do begin
и незнает команды Search или хрен его что он несет((

1. я пропустил do
2. спутал, надо seek
извиняюсь. Что ж ты, такие простые ошибки не можешь сам исправить?..
dae-woo
do вставил я тут загнал себя в угол=))

Добавлено через 8 мин.
спасиб народ!!!
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.