![]() |
1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!
![]() ![]() |
![]() |
Ozzя |
![]()
Сообщение
#21
|
![]() Гуру ![]() ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 1 220 Пол: Мужской Репутация: ![]() ![]() ![]() |
Можно проще. Сразу при считывании строк из файла находи минимальные из них.
|
Clerick |
![]()
Сообщение
#22
|
![]() студент.. ![]() ![]() ![]() Группа: Пользователи Сообщений: 287 Пол: Мужской Реальное имя: Дмитрий Репутация: ![]() ![]() ![]() |
Считывание строк в цикле?
-------------------- После дождя обязательно выглянет солнце)
|
Ozzя |
![]()
Сообщение
#23
|
![]() Гуру ![]() ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 1 220 Пол: Мужской Репутация: ![]() ![]() ![]() |
Ну да
while not eof(f) do
begin
readln(f,s);
n:=length(s);
if n< min then
min:=n;
....
end;
|
мисс_граффити |
![]()
Сообщение
#24
|
![]() просто человек ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 3 641 Пол: Женский Реальное имя: Юлия Репутация: ![]() ![]() ![]() |
"найти самые короткие строки" - это вывести их номера или их сами?
Сообщение отредактировано: мисс_граффити - 25.03.2006 19:02 -------------------- Все содержимое данного сообщения (кроме цитат) является моим личным скромным мнением и на статус истины в высшей инстанции не претендует.
На вопросы по программированию, физике, математике и т.д. в аське и личке не отвечаю. Даже "один-единственный раз" в виде исключения! |
Clerick |
![]()
Сообщение
#25
|
![]() студент.. ![]() ![]() ![]() Группа: Пользователи Сообщений: 287 Пол: Мужской Реальное имя: Дмитрий Репутация: ![]() ![]() ![]() |
Цитата(мисс_граффити @ 25.03.2006 20:59) вывести их номера или их сами Номера! ![]() 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 -------------------- После дождя обязательно выглянет солнце)
|
мисс_граффити |
![]()
Сообщение
#26
|
![]() просто человек ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 3 641 Пол: Женский Реальное имя: Юлия Репутация: ![]() ![]() ![]() |
если номера - тогда лучше правда массив...
она тебе выводит длину минимальной строки... а чему она должна быть равна? у меня с тем же текстом выводит 3: то есть правильно (последняя строка: 3 пробел 1). может, у тебя там еще какой-то символ? Сообщение отредактировано: мисс_граффити - 25.03.2006 19:30 -------------------- Все содержимое данного сообщения (кроме цитат) является моим личным скромным мнением и на статус истины в высшей инстанции не претендует.
На вопросы по программированию, физике, математике и т.д. в аське и личке не отвечаю. Даже "один-единственный раз" в виде исключения! |
Clerick |
![]()
Сообщение
#27
|
![]() студент.. ![]() ![]() ![]() Группа: Пользователи Сообщений: 287 Пол: Мужской Реальное имя: Дмитрий Репутация: ![]() ![]() ![]() |
у меня с тем же текстом выводит 3: то есть правильно (последняя строка: 3 пробел 1). может, у тебя там еще какой-то символ? Да нет вроде ничего нет. Хотя сейчас посмотрю. Все теперь все в норме! А как вывести номер строки? Сообщение отредактировано: Clerick - 25.03.2006 19:56 -------------------- После дождя обязательно выглянет солнце)
|
мисс_граффити |
![]()
Сообщение
#28
|
![]() просто человек ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 3 641 Пол: Женский Реальное имя: Юлия Репутация: ![]() ![]() ![]() |
для этого его надо отслеживать.
например, делай так, как изначально собирался - через массив и выводи номера минимальных элементов. только здесь возникнет вопрос по поводу размера массива... -------------------- Все содержимое данного сообщения (кроме цитат) является моим личным скромным мнением и на статус истины в высшей инстанции не претендует.
На вопросы по программированию, физике, математике и т.д. в аське и личке не отвечаю. Даже "один-единственный раз" в виде исключения! |
hardcase |
![]()
Сообщение
#29
|
![]() code warrior ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 484 Пол: Мужской Реальное имя: Славен Репутация: ![]() ![]() ![]() |
Нужно просто считать итерации и запоминать итерацию, на которой обнаружена самая короткая сторока.
кроме того у вас ошибка вот здесь: assign (f, 'text.txt');
reset (f);
Readln (f,s); //уберите эту строку! вдруг файл пустой? - будет ошибка
min:=length(s); // замените на min:=MaxInt; или на min:=$7FFFFFFF;
-------------------- ИзВ ин ИтЕ зА нЕ рОв НЫй П оч ЕРк
|
мисс_граффити |
![]()
Сообщение
#30
|
![]() просто человек ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 3 641 Пол: Женский Реальное имя: Юлия Репутация: ![]() ![]() ![]() |
Нужно просто считать итерации и запоминать итерацию, на которой обнаружена самая короткая сторока. кроме того у вас ошибка вот здесь... у нас по условию таких строк несколько. сколько именно - заранее не знаем. по-хорошему, надо проверять, есть ли вообще этот файлик ;) -------------------- Все содержимое данного сообщения (кроме цитат) является моим личным скромным мнением и на статус истины в высшей инстанции не претендует.
На вопросы по программированию, физике, математике и т.д. в аське и личке не отвечаю. Даже "один-единственный раз" в виде исключения! |
hardcase |
![]()
Сообщение
#31
|
![]() code warrior ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 484 Пол: Мужской Реальное имя: Славен Репутация: ![]() ![]() ![]() |
у нас по условию таких строк несколько. сколько именно - заранее не знаем. Так в чём проблема? Формируем список, каждый элемент которого будет содержать индекс строки. Вот и алгоритм: Если нашли строку короче, чем были до этого, то гробим предидущий список, и создаём новый (из 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 -------------------- ИзВ ин ИтЕ зА нЕ рОв НЫй П оч ЕРк
|
мисс_граффити |
![]()
Сообщение
#32
|
![]() просто человек ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 3 641 Пол: Женский Реальное имя: Юлия Репутация: ![]() ![]() ![]() |
Вот собсна. Делфю грузить неохота, но должно работать. Возможно... хотя у меня делфи на Assign ругается - предпочитает AssignFile. Но проблема в том, что списки в школе и в неспециализированных вузах не дают обычно. Сомневаюсь, что Clerick с ними сталкивался... соответственно, так решенная задача может вызвать подозрения препода. -------------------- Все содержимое данного сообщения (кроме цитат) является моим личным скромным мнением и на статус истины в высшей инстанции не претендует.
На вопросы по программированию, физике, математике и т.д. в аське и личке не отвечаю. Даже "один-единственный раз" в виде исключения! |
Clerick |
![]()
Сообщение
#33
|
![]() студент.. ![]() ![]() ![]() Группа: Пользователи Сообщений: 287 Пол: Мужской Реальное имя: Дмитрий Репутация: ![]() ![]() ![]() |
Но проблема в том, что списки в школе и в неспециализированных вузах не дают обычно. Сомневаюсь, что Clerick с ними сталкивался... соответственно, так решенная задача может вызвать подозрения препода. Это предыдущая тема, которую мы прошли(физмат профиль в школе)! Но решали лишь элементарные задачи. Поэтому большая просьба к Hardcase: поясни свой код!!! ![]() ![]() ![]() Зы: мой компилятор BP7 Сообщение отредактировано: Clerick - 26.03.2006 11:04 -------------------- После дождя обязательно выглянет солнце)
|
hardcase |
![]()
Сообщение
#34
|
![]() code warrior ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 484 Пол: Мужской Реальное имя: Славен Репутация: ![]() ![]() ![]() |
Коментарии добавил. (вроде там и комментировать-то нечего - чай не Win32 API)
BP7 не имею - я его ВООБЩЕ никогда не имел и в глаза только в школе видел пару раз. Вот такие мы сирые и необразованные. FPC - нету, да и собсна, он мне не нужен. TMT лежал где-то, но и он, скорее, как экспонат лежит. Думаю, скомпилироваться должно, я только не знаю, BP7 поддерживает динамические строки, или нет? Возможно... хотя у меня делфи на Assign ругается - предпочитает AssignFile. есть у класса TPersistent метод Assign - вот и ругается делфи на него. Можно писать System.Assign(FileVariable, FileName); BP и TP это не откомпилируют 100 %, hardacase, тебе на кажется что раздел 32 битные компиляторы находится в другом месте ? Сообщение отредактировано: klem4 - 26.03.2006 11:47 -------------------- ИзВ ин ИтЕ зА нЕ рОв НЫй П оч ЕРк
|
Clerick |
![]()
Сообщение
#35
|
![]() студент.. ![]() ![]() ![]() Группа: Пользователи Сообщений: 287 Пол: Мужской Реальное имя: Дмитрий Репутация: ![]() ![]() ![]() |
BP и TP это не откомпилируют 100 %, hardacase, тебе на кажется что раздел 32 битные компиляторы находится в другом месте ? Не откомпилируют что? -------------------- После дождя обязательно выглянет солнце)
|
hardcase |
![]()
Сообщение
#36
|
![]() code warrior ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 484 Пол: Мужской Реальное имя: Славен Репутация: ![]() ![]() ![]() |
Не знаю- не знаю, всё должно скомпилиться - вот посмотрел предыдущий вариант решения задачи - Clerick это скомпилит.
Только при чём тут вообще разрядность? На дворе 2006 год! Тут уже переходят на 64 разрядные машины. Мне казалось, что 16-бит компилеры благополучно вышли из употребления (померли) ещё 10 лет назад... Зачем вообще акцентироватся на этом? -------------------- ИзВ ин ИтЕ зА нЕ рОв НЫй П оч ЕРк
|
Clerick |
![]()
Сообщение
#37
|
![]() студент.. ![]() ![]() ![]() Группа: Пользователи Сообщений: 287 Пол: Мужской Реальное имя: Дмитрий Репутация: ![]() ![]() ![]() |
Начались проблемы...
var lst: PElement ; = nil; Требует поставить ; в указанном месте... После того как ставлю, требует begin, а дальше говорит error in statement.... -------------------- После дождя обязательно выглянет солнце)
|
hardcase |
![]()
Сообщение
#38
|
![]() code warrior ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 484 Пол: Мужской Реальное имя: Славен Репутация: ![]() ![]() ![]() |
А проинициализировать переменные в begin .. end - не светит?
-------------------- ИзВ ин ИтЕ зА нЕ рОв НЫй П оч ЕРк
|
Clerick |
![]()
Сообщение
#39
|
![]() студент.. ![]() ![]() ![]() Группа: Пользователи Сообщений: 287 Пол: Мужской Реальное имя: Дмитрий Репутация: ![]() ![]() ![]() |
Что значит проинициализировать и как это сделать?
-------------------- После дождя обязательно выглянет солнце)
|
hardcase |
![]()
Сообщение
#40
|
![]() code warrior ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 484 Пол: Мужской Реальное имя: Славен Репутация: ![]() ![]() ![]() |
Я не знаю, что такое BP7, он похоже не поддерживает инициализацию переменных при объявлении
Код var lst: PElement = nil; поэтому стоит заменить на Код var lst: PElement; ... begin lst:=nil; .... Assign(...) ... end. с другими переменными - аналогично -------------------- ИзВ ин ИтЕ зА нЕ рОв НЫй П оч ЕРк
|
![]() ![]() |
![]() |
Текстовая версия | 17.07.2025 19:03 |