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

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

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

> Текстовые файлы, Совершенно не понятно...
Clerick
сообщение 23.03.2006 18:07
Сообщение #1


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

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

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


Дали новую тему, текстовые файлы. Давали студенты и никто из группы ничего не понял... blink.gif
А задачи нужно сдать завтра. wacko.gif Помогите хоть с какими-нибудь двумя!!!

1. Дан текстовый файл, содержащий целые числа. Найти
• Арифметическое среднее чисел в файле;
• Номер максимального элемента в файле; (решена)

2. Дан текстовый файл, содержащий строки. Найти самые короткие строки. (решена)

3. Даны два текстовых файла. Записать в третий только те строки, которые есть и в первом и во втором файлах.

4. Даны два файла А и В(тип элементов одинаковый). Поменять местами содержимое этих файлов.
Использовать процедуру Rename не разрешается.

Заранее спасибо!!! smile.gif

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


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


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
Сообщение #3


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

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

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


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

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

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

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


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


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 
 К началу страницы 
+ Ответить 

Сообщений в этой теме
Clerick   Текстовые файлы   23.03.2006 18:07
klem4   FAQ : Файлы + поиск по форуму, все решалось неодн...   23.03.2006 18:52
Clerick   FAQ : Файлы + поиск по форуму, все решалось неод...   23.03.2006 19:20
Ozzя   Если только в качестве примера :rolleyes: cons...   24.03.2006 9:12
klem4   Держи первое, дабьше делай сам. uses crt; var ...   24.03.2006 9:14
Clerick   firts.txt : 1 2 7 0 5 Sr = 3.0 count = 5; ...   24.03.2006 15:13
Ozzя   Опечатка? текстовый? Хм .. а я даже и не замети...   24.03.2006 9:18
Clerick   Спасибо!!! И извиняюсь за ошибку!...   24.03.2006 14:48
Ozzя   Ты внутри цикла каждый раз уничтожаешь файл и со...   24.03.2006 15:31
Clerick   Вынеси за цикл: Вынес и все равно файл пустой ос...   24.03.2006 15:44
Ozzя   const n=5; m=5; var f:text; j, i, a, b:int...   24.03.2006 16:06
Clerick   О теперь работает! :) Close (f); забыл пост...   24.03.2006 16:24
Ozzя   uses crt; const n=5; m=5; var f:text; j,...   24.03.2006 16:33
Clerick   Теперь все одну строчку... :blink:   24.03.2006 16:44
Ozzя   Все нормально отрабатывает :blink:   24.03.2006 17:11
Clerick   Все в норме!!! Пропустил один оператор...   24.03.2006 18:54
Altair   while not eof(f) do begin readln(f,s); inc(result...   24.03.2006 19:06
Clerick   Если я прав(приближенно), то след. прога должна вы...   25.03.2006 18:14
Ozzя   uses crt; var f:text; j, i, max, c:integer; ...   25.03.2006 18:19
Clerick   Спасибо!!! Появился вопр. к з.2 можно...   25.03.2006 18:26
Ozzя   Можно проще. Сразу при считывании строк из файла н...   25.03.2006 18:33
Clerick   Считывание строк в цикле?   25.03.2006 18:43
Ozzя   Ну да while not eof(f) do begin readln(f,s)...   25.03.2006 18:48
мисс_граффити   "найти самые короткие строки" - это выве...   25.03.2006 18:59
Clerick   вывести их номера или их сами Номера! :) to О...   25.03.2006 19:22
мисс_граффити   если номера - тогда лучше правда массив... она те...   25.03.2006 19:23
Clerick   у меня с тем же текстом выводит 3: то есть правил...   25.03.2006 19:49
мисс_граффити   для этого его надо отслеживать. например, делай та...   25.03.2006 20:16
hardcase   Нужно просто считать итерации и запоминать итераци...   25.03.2006 21:10
мисс_граффити   Нужно просто считать итерации и запоминать итерац...   25.03.2006 22:48
hardcase   у нас по условию таких строк несколько. сколько ...   25.03.2006 23:16
мисс_граффити   Вот собсна. Делфю грузить неохота, но должно рабо...   26.03.2006 9:07
Clerick   Но проблема в том, что списки в школе и в неспеци...   26.03.2006 11:00
hardcase   Коментарии добавил. (вроде там и комментировать-то...   26.03.2006 11:27
Clerick   [color=red] BP и TP это не откомпилируют 100 %, h...   26.03.2006 18:13
hardcase   Не знаю- не знаю, всё должно скомпилиться - вот по...   26.03.2006 18:23
Clerick   Начались проблемы... var lst: PElement ; = nil; Т...   26.03.2006 18:48
hardcase   А проинициализировать переменные в begin .. end - ...   26.03.2006 19:13
Clerick   Что значит проинициализировать и как это сделать?   26.03.2006 20:14
hardcase   Я не знаю, что такое BP7, он похоже не поддерживае...   26.03.2006 21:00
Clerick   Я не знаю, что такое BP7 Если мне не изменяет па...   26.03.2006 21:07
klem4   Не знаю- не знаю, всё должно скомпилиться - вот п...   26.03.2006 22:10


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

 



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