Версия для печати темы
Образовательный студенческий форум _ Информатика / Программирование _ Borland Pascal. Задача. Работа с файлами.
Автор: zoo 15.10.2008, 14:32
Имеется текстовый файл(не менее 5 строк). Напечатать номер самой длинной строки. Напечатать все строки, содержащие в качестве фрагмента текст "ба".
Автор: Inspektor 15.10.2008, 17:17
А вопрос-то какой? Это типичная школьная задача на трояк.
Автор: zoo 15.10.2008, 17:50
Составить программу,которая выводит номер самой длинной строки и строки, содержащие фрагмент. Я пропустил пару уроков и тему не понял. Это контрольная задача. Помоги, пожалуйста.
Автор: Inspektor 15.10.2008, 17:56
Помочь мы всегда рады, но решать за тебя не будем. Пиши свой вариант решения, а мы его подправим.
Автор: zoo 16.10.2008, 9:36
у меня вообще нет вариантов. я не знаю,как работать с отдельными строками,как их сравнивать. могу только оболочку программы:
program z24;
uses wincrt;
var f:text;x,k:integer;s:string;
begin assign(f,'C:\Program Files\PASCAL\BIN\44.text');
reset(f);
while not eof(f) do
begin
while not eoln(f) do
begin read(f,x);
дальше не знаю,какой нужен счетчик,оператор. для вычисления самой длинной строки наверно нужен length но что с чем сравнивать? напишите хотя бы основные строчки и счетчики. пожалуста, завтра уже надо!
Автор: tig81 16.10.2008, 9:57
Цитата(zoo @ 16.10.2008, 12:36)

дальше не знаю,какой нужен счетчик,оператор. для вычисления самой длинной строки наверно нужен length но что с чем сравнивать? напишите хотя бы основные строчки и счетчики. пожалуста, завтра уже надо!
т.е., если я правильно понимаю, вам надо при помощи оператора length найти длину всех строк и сравнить их между собой. Хотя могу и ошибаться.
Автор: Inspektor 16.10.2008, 11:47
Цитата
т.е., если я правильно понимаю, вам надо при помощи оператора length найти длину всех строк и сравнить их между собой. Хотя могу и ошибаться.
Исходя из формулировки задачи этот вариант не корректен. Длинна строки в файле не ограничена, а функция Length работает только с типом данных string, размер которого ограничен 256 байтами- 255 слотов под символы.
Самое простое это читать строки посимвольно.
Код
n:=0; {номер самой длинной строки}
k:=1; {текущая строка}
l:=0; {число символов в самой длинной строке}
while not eof(f) do
i:=0;
begin
while not eoln(f) do
begin
read(f,c);
Inc(i);
end;
if i>l then
begin
l:=i;
n:=k;
end;
Inc(k);
end;
В условии не сказано что делать при нескольких одинаково длинных строках, поэтому приоритет здесь у первых. Если предположить, что длинна строк в файле не привышает 255 символов, то задача сильно упрощается.
Автор: tig81 16.10.2008, 12:02
Цитата(Inspektor @ 16.10.2008, 14:47)

Исходя из формулировки задачи этот вариант не корректен. Длинна строки в файле не ограничена, а функция Length работает только с типом данных string, размер которого ограничен 256 байтами- 255 слотов под символы.
спасибо, буду знать.
Автор: zoo 16.10.2008, 16:34
что такое Inc(i), Inc(k)? вот такой вариант как вам:
program CW;
uses wincrt;
var F:text; i, x: integer; a:string;
begin
assign (F,'C:\Program Files\PASCAL\BIN\44.text');
reset(F);
read(F,a);
x:=length(a);
while not eof(F) do
begin
readln(F,a);
if x<length(a) then x:=length(a);
i:=pos('áà',a);
if i<>0 then writeln(a);
end;
writeln (x);
close(f);
end.
это мне решили, но не уверены.
Автор: Inspektor 16.10.2008, 17:49
Цитата
что такое Inc(i), Inc(k)?
Инкремент. Тоже самое что i:=i+1, только обрабатывается компилятором по-другому. i:=i+1 обрабатывается независимо от того, какого типа i, поэтому при целочисленном i выгоднее использовать inc, который компилятор странслирует в бинарный код как Inc или Add.
Теперь внимательно читаем седьмой пост и видим почему в данной формулировке это не верное решение.
Далее если предположить, что длинна строк меньше 256 символов то:
1) Зачем первая и вторая строки?
2) Полагаю, что в седьмой строке ReadLn.
3) Вы нашли число символов в самой длинной строке, а не её номер.
4)
Код
if x<length(a) then x:=length(a);
Лучше не вызывать функцию 2 раза подрят, а ввести ещё одну переменную.
Русская версия Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)