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

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

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

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


Гуру
*****

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

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


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


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

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

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


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


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


Гуру
*****

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

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


Ну да

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


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

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

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


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

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


--------------------
Все содержимое данного сообщения (кроме цитат) является моим личным скромным мнением и на статус истины в высшей инстанции не претендует.
На вопросы по программированию, физике, математике и т.д. в аське и личке не отвечаю. Даже "один-единственный раз" в виде исключения!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #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 -


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


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

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

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


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

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

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


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


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

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

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


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

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

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

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

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

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


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


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

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

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


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


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


code warrior
****

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

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


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

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



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


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

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

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


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

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

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

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


--------------------
Все содержимое данного сообщения (кроме цитат) является моим личным скромным мнением и на статус истины в высшей инстанции не претендует.
На вопросы по программированию, физике, математике и т.д. в аське и личке не отвечаю. Даже "один-единственный раз" в виде исключения!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #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 -


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


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

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

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


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

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

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


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


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

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

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


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

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


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

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

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


--------------------
После дождя обязательно выглянет солнце)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #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 -


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


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

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

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


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

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


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


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


code warrior
****

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

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


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

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


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


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

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

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


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

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

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


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


code warrior
****

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

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


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


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


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

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

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


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


--------------------
После дождя обязательно выглянет солнце)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #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

 





- Текстовая версия 23.11.2025 4:03
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name