Помощь - Поиск - Пользователи - Календарь
Полная версия: Задача на файл
Форум «Всё о Паскале» > 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 мин.
спасиб народ!!!
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.