Помощь - Поиск - Пользователи - Календарь
Полная версия: Borland Pascal. Задача. Работа с файлами. > Информатика / Программирование
Образовательный студенческий форум > Другие дисциплины > Информатика / Программирование
zoo
Имеется текстовый файл(не менее 5 строк). Напечатать номер самой длинной строки. Напечатать все строки, содержащие в качестве фрагмента текст "ба".
Inspektor
А вопрос-то какой? Это типичная школьная задача на трояк.
zoo
Составить программу,которая выводит номер самой длинной строки и строки, содержащие фрагмент. Я пропустил пару уроков и тему не понял. Это контрольная задача. Помоги, пожалуйста.
Inspektor
Помочь мы всегда рады, но решать за тебя не будем. Пиши свой вариант решения, а мы его подправим.
zoo
у меня вообще нет вариантов. я не знаю,как работать с отдельными строками,как их сравнивать. могу только оболочку программы:
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
Цитата(zoo @ 16.10.2008, 12:36) *

дальше не знаю,какой нужен счетчик,оператор. для вычисления самой длинной строки наверно нужен length но что с чем сравнивать? напишите хотя бы основные строчки и счетчики. пожалуста, завтра уже надо!

т.е., если я правильно понимаю, вам надо при помощи оператора length найти длину всех строк и сравнить их между собой. Хотя могу и ошибаться.
Inspektor
Цитата
т.е., если я правильно понимаю, вам надо при помощи оператора 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
Цитата(Inspektor @ 16.10.2008, 14:47) *

Исходя из формулировки задачи этот вариант не корректен. Длинна строки в файле не ограничена, а функция Length работает только с типом данных string, размер которого ограничен 256 байтами- 255 слотов под символы.

спасибо, буду знать.
zoo
что такое 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
Цитата
что такое 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 © 2001-2025 Invision Power Services, Inc.