Задача на файлы записей(Паскаль)

Ответить
Duru
Сообщения: 2
Зарегистрирован: 05 май 2008, 18:53

Здравстуйте! Очень надеюсь на Вашу помощь.
1.Багаж пассажира характеризуется количеством вещей и общим весом вещей. Дан файл f, содержащий информацию о багаже нескольких пассажиров. Дать сведения о багаже, число вещей в котором не меньше, чем в любом другом багаже, а вес вещей не больше, чем в любом другом багаже с этим же числом вещей.

И ещё одна задачка. Она написана, но на компе не работает. Где закралась ошибка, а? Подскажите...
Дан txt файл. Преобразовать строки файла, удалив после каждой цифры два символа, если эти символы не буквы.
Var f:text;
j,i,n,:integer;
z,s:string;
begin
s:='c:\fff.txt';
assing(f,s);
rewrite(f);
readln(n);
for i:=1 to n do begin
readln(z);
writln(f,z);
end;
close(f);
reset(f);
for i:=1 to n do begin
read(f,z);
for j:=1 to length(z) do
if ((z[j]<'0') and (z[j]>'9')) and (((not((z[j+1]>'A') and (z[j+1]<'Z'))) and (z[j+1]=z[j+2]))
then delet(z,i+1,2);
end;
close(f);
reset(f);
while not(eof(f)) do begin
read(f,z);
write(n);
end;
close(f);
end.
MOTOCoder
Сообщения: 548
Зарегистрирован: 14 янв 2008, 20:27
Откуда: Россия, Псков

Вы неверно подошли к решению задачи.
Судя по всему нужно использовать тип "запись".
Для начала, посмотрите решение в этой http://forum.developing.ru/showthread.php?t=14005 теме, задача почти аналогична.
Ни что так не ограничивает фантазию программиста, как компилятор...
Duru
Сообщения: 2
Зарегистрирован: 05 май 2008, 18:53

Спасибо большое, что посмотрели задачи. Непонятно, та задача, на которую Вы указали аналогична 1(?). А со второй то что не так, где там ошибка?
MOTOCoder
Сообщения: 548
Зарегистрирован: 14 янв 2008, 20:27
Откуда: Россия, Псков

Я че-то думал, что это решение второй задачи...
Здесь, как минимум, не нужно ничего вводить, нужно работать с готовым файлом.
Ни что так не ограничивает фантазию программиста, как компилятор...
BBB
Сообщения: 1298
Зарегистрирован: 27 дек 2005, 13:37

Duru писал(а):Она написана, но на компе не работает. Где закралась ошибка, а? Подскажите...
Вот только в этом фрагменте МАССА ошибок. Как в алгоритме, так и "опечаток":
Duru писал(а):for i:=1 to n do begin
read(f,z);
for j:=1 to length(z) do
if ((z[j]<'0') and (z[j]>'9')) and (((not((z[j+1]>'A') and (z[j+1]<'Z'))) and (z[j+1]=z[j+2]))
then delet(z,i+1,2);
end;

1. Не delet, а delete.
2. Если у вас счетчик по символом строки - j, то кой черт вы удаляете символы, начиная с i-й позиции?
3. Условие ((z[j]<'0') and (z[j]>'9')) НИКОГДА не будет истинным. Ибо не можно быть меньше нуля, при и этом одновремеменно быть больше девяти.
4. ((z[j+1]>'A') and (z[j+1]<'Z')) То есть, 'A' и 'Z' буквами уже не являются? (не говоря уже о строчных буквах и буквах кириллицы)
5. for j:=1 to length(z). В процессе цикла вы удаляете символы из строки, тем не менее, счетчик цикла у вас стоит до ПЕРВОНАЧАЛЬНОЙ длины строки.
6. Даже если опустить замечание из п.5, то в проходах цикла при j = <длина строки> - 1 и j = <длина строки> куда вас занесут обращения z[j+2] и z[j+1]?
7. По-моему, все-таки, строки из текстового файла стоит читать как readln(f,z);, а не read(f,z);.
Ответить