IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

3 страниц V < 1 2 3 >  
 Ответить  Открыть новую тему 
> Текстовые файлы, Совершенно не понятно...
Ozzя
сообщение 25.03.2006 18:33
Сообщение #21


Гуру
*****

Группа: Пользователи
Сообщений: 1 220
Пол: Мужской

Репутация: -  16  +


Можно проще. Сразу при считывании строк из файла находи минимальные из них.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Clerick
сообщение 25.03.2006 18:43
Сообщение #22


студент..
***

Группа: Пользователи
Сообщений: 287
Пол: Мужской
Реальное имя: Дмитрий

Репутация: -  2  +


Считывание строк в цикле?


--------------------
После дождя обязательно выглянет солнце)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Ozzя
сообщение 25.03.2006 18:48
Сообщение #23


Гуру
*****

Группа: Пользователи
Сообщений: 1 220
Пол: Мужской

Репутация: -  16  +


Ну да

while not eof(f) do
  begin
    readln(f,s);
    n:=length(s);
    if n< min then
      min:=n;
     ....
  end;
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
мисс_граффити
сообщение 25.03.2006 18:59
Сообщение #24


просто человек
******

Группа: Модераторы
Сообщений: 3 641
Пол: Женский
Реальное имя: Юлия

Репутация: -  55  +


"найти самые короткие строки" - это вывести их номера или их сами?

Сообщение отредактировано: мисс_граффити - 25.03.2006 19:02


--------------------
Все содержимое данного сообщения (кроме цитат) является моим личным скромным мнением и на статус истины в высшей инстанции не претендует.
На вопросы по программированию, физике, математике и т.д. в аське и личке не отвечаю. Даже "один-единственный раз" в виде исключения!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Clerick
сообщение 25.03.2006 19:22
Сообщение #25


студент..
***

Группа: Пользователи
Сообщений: 287
Пол: Мужской
Реальное имя: Дмитрий

Репутация: -  2  +


Цитата(мисс_граффити @ 25.03.2006 20:59)
вывести их номера или их сами

Номера! smile.gif

to Оззя
uses
 crt;
var 
  f:text;
  j, i, n, c, min:integer;
  s:string;
begin
   assign (f, 'text.txt');
   reset (f);
   Readln (f,s);
   min:=length(s);
      while not eof(f) do
 	 begin
 	    readln(f,s);
	    n:=length(s);
	    if n<min then
	      min:=n;
     end;
   close(f);
   Writeln (min);
   readln;
end.


Выводит 4. text.txt:

6 5 4 5 6 4 4 5 6
2 3 6 7 7 8
3 4 4 1 3
4 4 2 3 3 3 3 3
3 1

Где опять лопухнулся?

Сообщение отредактировано: volvo - 2.11.2006 12:50


--------------------
После дождя обязательно выглянет солнце)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
мисс_граффити
сообщение 25.03.2006 19:23
Сообщение #26


просто человек
******

Группа: Модераторы
Сообщений: 3 641
Пол: Женский
Реальное имя: Юлия

Репутация: -  55  +


если номера - тогда лучше правда массив...

она тебе выводит длину минимальной строки...
а чему она должна быть равна?
у меня с тем же текстом выводит 3: то есть правильно (последняя строка: 3 пробел 1).
может, у тебя там еще какой-то символ?

Сообщение отредактировано: мисс_граффити - 25.03.2006 19:30


--------------------
Все содержимое данного сообщения (кроме цитат) является моим личным скромным мнением и на статус истины в высшей инстанции не претендует.
На вопросы по программированию, физике, математике и т.д. в аське и личке не отвечаю. Даже "один-единственный раз" в виде исключения!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Clerick
сообщение 25.03.2006 19:49
Сообщение #27


студент..
***

Группа: Пользователи
Сообщений: 287
Пол: Мужской
Реальное имя: Дмитрий

Репутация: -  2  +


Цитата(мисс_граффити @ 25.03.2006 21:23) *

у меня с тем же текстом выводит 3: то есть правильно (последняя строка: 3 пробел 1).
может, у тебя там еще какой-то символ?

Да нет вроде ничего нет. Хотя сейчас посмотрю.

Все теперь все в норме!

А как вывести номер строки?

Сообщение отредактировано: Clerick - 25.03.2006 19:56


--------------------
После дождя обязательно выглянет солнце)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
мисс_граффити
сообщение 25.03.2006 20:16
Сообщение #28


просто человек
******

Группа: Модераторы
Сообщений: 3 641
Пол: Женский
Реальное имя: Юлия

Репутация: -  55  +


для этого его надо отслеживать.
например, делай так, как изначально собирался - через массив и выводи номера минимальных элементов.
только здесь возникнет вопрос по поводу размера массива...


--------------------
Все содержимое данного сообщения (кроме цитат) является моим личным скромным мнением и на статус истины в высшей инстанции не претендует.
На вопросы по программированию, физике, математике и т.д. в аське и личке не отвечаю. Даже "один-единственный раз" в виде исключения!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
hardcase
сообщение 25.03.2006 21:10
Сообщение #29


code warrior
****

Группа: Пользователи
Сообщений: 484
Пол: Мужской
Реальное имя: Славен

Репутация: -  8  +


Нужно просто считать итерации и запоминать итерацию, на которой обнаружена самая короткая сторока.

кроме того у вас ошибка вот здесь:
   assign (f, 'text.txt');
   reset (f);
   Readln (f,s);  //уберите эту строку! вдруг файл пустой? - будет ошибка
   min:=length(s); // замените на min:=MaxInt; или на min:=$7FFFFFFF;



--------------------
ИзВ ин ИтЕ зА нЕ рОв НЫй П оч ЕРк
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
мисс_граффити
сообщение 25.03.2006 22:48
Сообщение #30


просто человек
******

Группа: Модераторы
Сообщений: 3 641
Пол: Женский
Реальное имя: Юлия

Репутация: -  55  +


Цитата(hardcase @ 25.03.2006 21:10) *

Нужно просто считать итерации и запоминать итерацию, на которой обнаружена самая короткая сторока.
кроме того у вас ошибка вот здесь...

у нас по условию таких строк несколько.
сколько именно - заранее не знаем.

по-хорошему, надо проверять, есть ли вообще этот файлик ;)


--------------------
Все содержимое данного сообщения (кроме цитат) является моим личным скромным мнением и на статус истины в высшей инстанции не претендует.
На вопросы по программированию, физике, математике и т.д. в аське и личке не отвечаю. Даже "один-единственный раз" в виде исключения!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
hardcase
сообщение 25.03.2006 23:16
Сообщение #31


code warrior
****

Группа: Пользователи
Сообщений: 484
Пол: Мужской
Реальное имя: Славен

Репутация: -  8  +


Цитата(мисс_граффити @ 25.03.2006 22:48) *

у нас по условию таких строк несколько.
сколько именно - заранее не знаем.

Так в чём проблема? Формируем список, каждый элемент которого будет содержать индекс строки.
Вот и алгоритм: Если нашли строку короче, чем были до этого, то гробим предидущий список, и создаём новый (из 1 элемента) который заносим текущй индекс, если строка по длине такая же, то добавляем в текущий список.

В конце просто выбрасываем этот список на печать.
program FindAllMinStrings;

type
  PElement = ^TElement;
  TElement = record
    index: integer;  //здесь будет храниться номер строки
    str: string;  // сама строка
    next: PElement; //следующий элемент в списке
  end;

const InputFileName = 'test.txt';

var lst: PElement = nil;

// процедура будет разрушать список - возвращаем память
procedure KillList;
   // обычный рекурсивный проход по элементам списка
   // можно, конечно, и в цикле, но я привык к SML
    procedure Kill(El: PElement);
     begin
       if El = nil then Exit;
       Kill(El^.next);
       Dispose(El)
     end;
  begin
     Kill(lst);  
     lst:=nil;  
  end;

// выделяет память под новый элемент списка и возвращает указатель
// на него
function NewElement(AIndex: integer; const AStr: string): PElement;
  var El: PElement;
  begin
    New(El);
    El^.index:=AIndex;
    El^.str:=AStr;
    El^.next:=nil;
    NewElement:=El;
  end;

// цепляет к новому элементу список lst
// cons - это в LISP :-) была такая операция
procedure Cons(El: PElement);
  begin
     El^.next:=Lst;
     Lst:=El;
  end;

// выводит на печать список - тоже рекурсивно
// люблю я рекурсию :-)
procedure PrintList;
     procedure Print(El: PElement);
       begin
          if El = nil then Exit;

      // так как список наш сформирован с номерами строк (index)
      // задом на перёд, то сначала нада напечатать то, что было ранешнее
          Print(El^.next);
      // а потом текущий элемент
          WriteLn(El^.index, ': ', El^.str)
       end;
  begin
    Print(lst);
  end;

var InputFile: textfile; // файло со строками
    minlen: integer = MaxInt; // текущая минимальная длина строки её инициализируем максимальным целым
    curstr: string;  // текущая строка
    curlen: integer; // длина текущей строки
    i: integer = 0;  // индексатор строк - нумерация с 0 начинается
begin
  Assign(InputFile, InputFileName);
  Reset(InputFile);
  while not EOF(InputFile) do begin
    ReadLn(InputFile, curstr);
    curlen:=Length(curstr);
    if curlen < minlen then begin
   // нашли строку короче, чем уже имеем - гробим список
     KillList;
   // и строим его заново
     Cons(NewElement(i, curstr))
    end else if curlen = minlen then begin
  // нашли строку по длине совпадающую с текущим минимумом
  // благополучно запоминаем её и индекс
     Cons(NewElement(i, curstr))
    end;
    inc(i); // не забываем считать строки :-)
  end;
  Close(InputFile);
 // печатаем что есть
  PrintList;
 // и чистим память (хотя можно и без этого)
  KillList;
end.

Вот собсна. Делфю грузить неохота, но должно работать.

Сообщение отредактировано: volvo - 2.11.2006 12:51


--------------------
ИзВ ин ИтЕ зА нЕ рОв НЫй П оч ЕРк
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
мисс_граффити
сообщение 26.03.2006 9:07
Сообщение #32


просто человек
******

Группа: Модераторы
Сообщений: 3 641
Пол: Женский
Реальное имя: Юлия

Репутация: -  55  +


Цитата(hardcase @ 26.03.2006 0:16) *

Вот собсна. Делфю грузить неохота, но должно работать.

Возможно... хотя у меня делфи на Assign ругается - предпочитает AssignFile.
Но проблема в том, что списки в школе и в неспециализированных вузах не дают обычно. Сомневаюсь, что Clerick с ними сталкивался... соответственно, так решенная задача может вызвать подозрения препода.


--------------------
Все содержимое данного сообщения (кроме цитат) является моим личным скромным мнением и на статус истины в высшей инстанции не претендует.
На вопросы по программированию, физике, математике и т.д. в аське и личке не отвечаю. Даже "один-единственный раз" в виде исключения!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Clerick
сообщение 26.03.2006 11:00
Сообщение #33


студент..
***

Группа: Пользователи
Сообщений: 287
Пол: Мужской
Реальное имя: Дмитрий

Репутация: -  2  +


Цитата(мисс_граффити @ 26.03.2006 11:07) *

Но проблема в том, что списки в школе и в неспециализированных вузах не дают обычно. Сомневаюсь, что Clerick с ними сталкивался... соответственно, так решенная задача может вызвать подозрения препода.


Это предыдущая тема, которую мы прошли(физмат профиль в школе)! Но решали лишь элементарные задачи. Поэтому большая просьба к Hardcase: поясни свой код!!! !mol1.gif !mol1.gif !mol1.gif

Зы: мой компилятор BP7

Сообщение отредактировано: Clerick - 26.03.2006 11:04


--------------------
После дождя обязательно выглянет солнце)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
hardcase
сообщение 26.03.2006 11:27
Сообщение #34


code warrior
****

Группа: Пользователи
Сообщений: 484
Пол: Мужской
Реальное имя: Славен

Репутация: -  8  +


Коментарии добавил. (вроде там и комментировать-то нечего - чай не Win32 API)

BP7 не имею - я его ВООБЩЕ никогда не имел и в глаза только в школе видел пару раз. Вот такие мы сирые и необразованные. FPC - нету, да и собсна, он мне не нужен. TMT лежал где-то, но и он, скорее, как экспонат лежит.

Думаю, скомпилироваться должно, я только не знаю, BP7 поддерживает динамические строки, или нет?

Цитата(мисс_граффити @ 26.03.2006 9:07) *

Возможно... хотя у меня делфи на Assign ругается - предпочитает AssignFile.

есть у класса TPersistent метод Assign - вот и ругается делфи на него. Можно писать System.Assign(FileVariable, FileName);


BP и TP это не откомпилируют 100 %, hardacase, тебе на кажется что раздел 32 битные компиляторы находится в другом месте ?

Сообщение отредактировано: klem4 - 26.03.2006 11:47


--------------------
ИзВ ин ИтЕ зА нЕ рОв НЫй П оч ЕРк
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Clerick
сообщение 26.03.2006 18:13
Сообщение #35


студент..
***

Группа: Пользователи
Сообщений: 287
Пол: Мужской
Реальное имя: Дмитрий

Репутация: -  2  +


Цитата(klem4 @ 26.03.2006 13:27) *

BP и TP это не откомпилируют 100 %, hardacase, тебе на кажется что раздел 32 битные компиляторы находится в другом месте ?


Не откомпилируют что?


--------------------
После дождя обязательно выглянет солнце)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
hardcase
сообщение 26.03.2006 18:23
Сообщение #36


code warrior
****

Группа: Пользователи
Сообщений: 484
Пол: Мужской
Реальное имя: Славен

Репутация: -  8  +


Не знаю- не знаю, всё должно скомпилиться - вот посмотрел предыдущий вариант решения задачи - Clerick это скомпилит.

Только при чём тут вообще разрядность?
На дворе 2006 год! Тут уже переходят на 64 разрядные машины.
Мне казалось, что 16-бит компилеры благополучно вышли из употребления (померли) ещё 10 лет назад... Зачем вообще акцентироватся на этом?


--------------------
ИзВ ин ИтЕ зА нЕ рОв НЫй П оч ЕРк
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Clerick
сообщение 26.03.2006 18:48
Сообщение #37


студент..
***

Группа: Пользователи
Сообщений: 287
Пол: Мужской
Реальное имя: Дмитрий

Репутация: -  2  +


Начались проблемы...

var lst: PElement ; = nil; Требует поставить ; в указанном месте...

После того как ставлю, требует begin, а дальше говорит error in statement....


--------------------
После дождя обязательно выглянет солнце)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
hardcase
сообщение 26.03.2006 19:13
Сообщение #38


code warrior
****

Группа: Пользователи
Сообщений: 484
Пол: Мужской
Реальное имя: Славен

Репутация: -  8  +


А проинициализировать переменные в begin .. end - не светит?


--------------------
ИзВ ин ИтЕ зА нЕ рОв НЫй П оч ЕРк
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Clerick
сообщение 26.03.2006 20:14
Сообщение #39


студент..
***

Группа: Пользователи
Сообщений: 287
Пол: Мужской
Реальное имя: Дмитрий

Репутация: -  2  +


Что значит проинициализировать и как это сделать?


--------------------
После дождя обязательно выглянет солнце)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
hardcase
сообщение 26.03.2006 21:00
Сообщение #40


code warrior
****

Группа: Пользователи
Сообщений: 484
Пол: Мужской
Реальное имя: Славен

Репутация: -  8  +


Я не знаю, что такое BP7, он похоже не поддерживает инициализацию переменных при объявлении
Код

var lst: PElement = nil;

поэтому стоит заменить на
Код

var lst: PElement;
...
begin
  lst:=nil;
  ....
  Assign(...)
  ...  
end.

с другими переменными - аналогично


--------------------
ИзВ ин ИтЕ зА нЕ рОв НЫй П оч ЕРк
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

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

 

- Текстовая версия 17.07.2025 19:03
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"