Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 15.05.2011, 22:14   #1
asphyxiat
Новичок
Джуниор
 
Регистрация: 15.05.2011
Сообщений: 2
Вопрос Паскаль, работа с текстовыми файлами.

Задача:Посчитать количество строк, находящихся между строками максимальной и минимальной длины текстового файла. Вывести эти строки на экран в обратном порядке.
Получилось найти строку с минимальным количеством символов и строку с максимальным количеством символов, а вот как выполнить остальные условия задачи ума не приложу. Решите плиз.

Код:
Program text1;
uses crt;
var f:text;
s:string;
a,k,i,max,min,maxs,mins,l,m,b:integer;
begin
 clrscr;
 assign (f,'C:\pascal.txt');
 reset(f);
max:=0;
min:=256;
while not Eof(f) do
 begin
 readln(f,s);
 for i:=1 to length(s) do
 begin
 b:=b+1;{счётчик букв}
 end;
 k:=k+1;{счётчик строк}
 if b>max then begin max:=b; maxs:=k; end;{*нахождение строки с max количеством букв}
 if b<min then begin min:=b; mins:=k; end;{нахождение строки с min количеством букв}
 b:=0;
 end;
writeln('*nomer max stroki',maxs);
writeln('*nomer min stroki', mins);
close(f);
readln;
end.


___________
Код нужно оформлять по правилам:
тегом [CODE]..[/СODE] (это кнопочка с решёточкой #)
Не забывайте об этом!
Модератор.

Последний раз редактировалось Serge_Bliznykov; 16.05.2011 в 08:54.
asphyxiat вне форума Ответить с цитированием
Старый 16.05.2011, 09:06   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

1)
Цитата:
Код:
 for i:=1 to length(s) do  b:=b+1;{счётчик букв}
это не счётчик букв, а счётчик символов.
И, если Вы уж используете функцию получения длины строки,
так к чему этот безумный цикл?!!
достаточно так:
Код:
b := Length(s);
2) по хорошему, все переменные в начале программы надо иницилизировать.
я понимаю, что компилятор Паскаля уже сделал так, что в переменной K в начале выполнения занесён ноль, но, хороший программист должен заботится об этом сам.
т.е. перед циклом желательно
Код:
   k:=0;

3) теперь по сути того, что Вам нужно доделать...
Нужно создать в памяти динамическую структуру (хоть тот же двухсвязный список).
Открыть файл на повторное чтение.
И во втором цикле занести в эту структуру все строки с номерами от mins до maxs
(или от maxs до mins - в зависимости от того, какой индекс больше)
Потом в цикле вывести строки из этой структуры в обратном порядке.
Всё.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 16.05.2011, 12:28   #3
asphyxiat
Новичок
Джуниор
 
Регистрация: 15.05.2011
Сообщений: 2
По умолчанию

Спасибо конечно, но у меня проблема как раз в том что я не могу распечатать строки в обратном порядке, с двумерными массивами это как то было проще, а вот как это сделать с текстом я не знаю. Вот я открыл файл на чтение второй раз, распечатал строки между mins и maxs
Код:
 for i:=1 to k do
             begin
               readln(f,s);
               if (i>mins) and (i<maxs) then writeln(s);
              end;
если я задаю условие
Код:
 i:=k downto 1
для чтения строк в обратном порядке, то получается фигня какая то или я чтото неправильно делаю. Объясни пожалуйста или напиши код я посмотрю в чём моя ошибка.
asphyxiat вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Работа с текстовыми файлами Fastah Помощь студентам 7 03.11.2010 18:06
Работа с текстовыми файлами A_Orlov Паскаль, Turbo Pascal, PascalABC.NET 1 14.06.2010 14:49
Работа с текстовыми файлами Dareami Общие вопросы C/C++ 3 20.04.2010 10:21
Работа с текстовыми файлами в Паскаль galka_kiss Помощь студентам 1 26.02.2010 15:33
Работа с текстовыми файлами galka_kiss Фриланс 18 24.02.2010 22:00