IPB

Здравствуйте, гость ( Вход | Регистрация )

 
Ответить в эту темуОткрыть новую тему
> Borland Pascal. Задача. Работа с файлами., Borland Pascal. Задача. Работа с файлами.
zoo
сообщение 15.10.2008, 14:32
Сообщение #1


Новичок
*

Группа: Продвинутые
Сообщений: 4
Регистрация: 15.10.2008
Город: уфа



Имеется текстовый файл(не менее 5 строк). Напечатать номер самой длинной строки. Напечатать все строки, содержащие в качестве фрагмента текст "ба".
Пользователь в офлайнеКарточка пользователяОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Inspektor
сообщение 15.10.2008, 17:17
Сообщение #2


Аспирант
***

Группа: Активисты
Сообщений: 384
Регистрация: 11.6.2008
Город: Крыжополь
Учебное заведение: БГТУ
Вы: студент



А вопрос-то какой? Это типичная школьная задача на трояк.
Пользователь в офлайнеКарточка пользователяОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
zoo
сообщение 15.10.2008, 17:50
Сообщение #3


Новичок
*

Группа: Продвинутые
Сообщений: 4
Регистрация: 15.10.2008
Город: уфа



Составить программу,которая выводит номер самой длинной строки и строки, содержащие фрагмент. Я пропустил пару уроков и тему не понял. Это контрольная задача. Помоги, пожалуйста.
Пользователь в офлайнеКарточка пользователяОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Inspektor
сообщение 15.10.2008, 17:56
Сообщение #4


Аспирант
***

Группа: Активисты
Сообщений: 384
Регистрация: 11.6.2008
Город: Крыжополь
Учебное заведение: БГТУ
Вы: студент



Помочь мы всегда рады, но решать за тебя не будем. Пиши свой вариант решения, а мы его подправим.
Пользователь в офлайнеКарточка пользователяОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
zoo
сообщение 16.10.2008, 9:36
Сообщение #5


Новичок
*

Группа: Продвинутые
Сообщений: 4
Регистрация: 15.10.2008
Город: уфа



у меня вообще нет вариантов. я не знаю,как работать с отдельными строками,как их сравнивать. могу только оболочку программы:
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
Сообщение #6


Академик
********

Группа: Преподаватели
Сообщений: 15 617
Регистрация: 15.12.2007
Город: Украина, Запорожье
Учебное заведение: ЗНУ
Вы: преподаватель



Цитата(zoo @ 16.10.2008, 12:36) *

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

т.е., если я правильно понимаю, вам надо при помощи оператора length найти длину всех строк и сравнить их между собой. Хотя могу и ошибаться.
Пользователь в офлайнеКарточка пользователяОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Inspektor
сообщение 16.10.2008, 11:47
Сообщение #7


Аспирант
***

Группа: Активисты
Сообщений: 384
Регистрация: 11.6.2008
Город: Крыжополь
Учебное заведение: БГТУ
Вы: студент



Цитата
т.е., если я правильно понимаю, вам надо при помощи оператора 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
Сообщение #8


Академик
********

Группа: Преподаватели
Сообщений: 15 617
Регистрация: 15.12.2007
Город: Украина, Запорожье
Учебное заведение: ЗНУ
Вы: преподаватель



Цитата(Inspektor @ 16.10.2008, 14:47) *

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

спасибо, буду знать.
Пользователь в офлайнеКарточка пользователяОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
zoo
сообщение 16.10.2008, 16:34
Сообщение #9


Новичок
*

Группа: Продвинутые
Сообщений: 4
Регистрация: 15.10.2008
Город: уфа



что такое 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
Сообщение #10


Аспирант
***

Группа: Активисты
Сообщений: 384
Регистрация: 11.6.2008
Город: Крыжополь
Учебное заведение: БГТУ
Вы: студент



Цитата
что такое 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 раза подрят, а ввести ещё одну переменную.
Пользователь в офлайнеКарточка пользователяОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения

Ответить в эту темуОткрыть новую тему
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия Сейчас: 25.5.2025, 10:42

Книжки в помощь: "Сборник заданий по высшей математике" Кузнецов Л.А., "Сборник заданий по высшей математике" Чудесенко В.Ф., "Индивидуальные задания по высшей математике" Рябушко А.П., и другие.




Зеркало сайта Решебник.Ру - reshebnik.org.ru