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

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

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

 
 Ответить  Открыть новую тему 
> Однонаправленный линейный список, Нужно выбросить из файла F1 слова, входящие в файл F2
сообщение
Сообщение #1


Влюблённый псих
***

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

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


А можно ли составить два спика в одной программе? Один список будет составляться по данным файла F1, а другой - файла F2? Нужно ли для этого отдельно описать второй список в TYPE?
Или, если так нельзя, то как можно прочитать файл F2, если известно заранее, что он состит из строк, но неизвестно их количество? Нужно ли делать это через запись или есть другие способы?

Сообщение отредактировано: Тёмный Эльф -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Гуру
*****

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

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


Цитата
А можно ли составить два спика в одной программе?

Да хоть 16 тысяч.. smile.gif

Цитата
Нужно ли для этого отдельно описать второй список в TYPE?

Нет. Просто делаешь две переменные типа твоего списка и работаешь с ними по отдельности

Цитата
Или, если так нельзя, то как можно прочитать файл F2

Тебе вообще не обязательно перекачивать твой файл в память, можно обойтись только одной переменной типа string. Все зависит от того, что ты хочешь делать с этой информацией.


--------------------
Лао-Цзы :
Знать много и не выставлять себя знающим есть нравственная высота. Знать мало и выставлять себя знающим есть болезнь. Только понимая эту болезнь, мы можем избавиться от нее.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Влюблённый псих
***

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

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


Объясните, пожалуйста. Немного не догоняю. Вот я составляю список по данным файла «DAN.inp». Но мне нужно проверить, а если ли в этом файле такие же слова, как и в файле «Dan1.inp», например. Нужно ли мне нижеприведенную процедуру сделать аналогично для второго файла? Или это делается другим способом?

Код

uses crt;
Type
next=^elem;
Elem=RECORD
     EL:string;
     Sled:next;
     END;
VAR
Uk1:next;


Procedure p1(var p:next);
var
m:next;
F1:text;
BEGIN
  Assign(F1,'DAN.inp');
  Reset(f1);
  Assign(output,'res.out');
  rewrite(output);
New(m);
New(m^.sled);
p:=m;
Readln(f1, m^.el);
m^.sled:=nil;
while not EOF(f1) do
begin
New(m^.sled);
m:=m^.sled;
Readln(f1, m^.el);
m^.sled:=nil;
End;
Close(f1);
m:=p;
While m<>NIL do
Begin
Writeln(m^.el);
m:=m^.sled;
End;
end;


Сообщение отредактировано: Тёмный Эльф -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Гуру
*****

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

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


Глянь на пятый пункт этого раздела...
Цитата
. Но мне нужно проверить, а если ли в этом файле такие же слова, как и в файле «Dan1.inp», например. Нужно ли мне нижеприведенную процедуру сделать аналогично для второго файла? Или это делается другим способом?

Как я вижу твоя процедура считует файл в список, а потом его распечатывает. Если я правильно понял вопрос, ты хочешь чтобы она (процедура) работала с любым другим текстовым файлом? Если да, то тебе надо передавать имя файла как параметр в процедуру.


--------------------
Лао-Цзы :
Знать много и не выставлять себя знающим есть нравственная высота. Знать мало и выставлять себя знающим есть болезнь. Только понимая эту болезнь, мы можем избавиться от нее.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5


Влюблённый псих
***

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

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


Цитата
Как я вижу твоя процедура считует файл в список, а потом его распечатывает. Если я правильно понял вопрос, ты хочешь чтобы она (процедура) работала с любым другим текстовым файлом? Если да, то тебе надо передавать имя файла как параметр в процедуру.


Вот что я имел ввидду:

Код

uses crt;
Type
next=^elem;
next2=^elem2;
Elem=RECORD
     EL:string;
     Sled:next;
     END;
Elem2=RECORD
     EL2:string;
     Sled2:next2;
VAR
Uk1:next;
UK2:next2;

Procedure p1(var p:next;
        var p2:next2);
var
m:next;
m2:next2;
F1,F2:text;
BEGIN
  Assign(F1,'DAN.inp');
  Assign(F2,'DAN1.inp');
  Reset(f1);
  Reset(f2);
New(m);
New(m2);
New(m^.sled);
New(m2^.sled2);
p:=m;
p2:=m2;
Readln(f1, m^.el);
Readln(f2, m2^.el2);
m^.sled:=nil;
while not EOF(f1) do
begin
New(m^.sled);
m:=m^.sled;
Readln(f1, m^.el);
m^.sled:=nil;
End;
Close(f1);
m2^.sled2:=nil;
while not EOF(f2) do
begin
New(m2^.sled2);
m2:=m2^.sled2;
Readln(f2, m2^.el2);
m2^.sled2:=nil;
End;
Close(f2);
end;


Ведь теперь у меня два списка, один по файлу F1, а другой по файлу F2. Могу ли я теперь пробежать по этим двум спискам и найти ОДИНАКОВЫЕ слова!?? В этом и состоит цель задачи. (извеняюсь, что привел этот пример в Теории, а не в Задачах).

Или же эти два списка никак не взаимосвязаны? тогда придется искать другой способ чтения файла F2 и сравнивания его с F1

Сообщение отредактировано: Тёмный Эльф -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #6


Гуру
*****

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

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


Не правильно, ведь типы next и next2 абсолютно идентичны, для чего же тебе нужно два одинаковых типа? Может две переменных , но точно не типы.

Тоже самое ты делаешь в процедуре - ты делаешь одинаковые действия для разных файлов. Зачем вообще тогда использовать процедуру, выигрыша в краткости кода ведь все-равно нет. Правильно будет, если ты напишешь процедуру, которая умеет заполнять только один список, данными из неизвестного для нее файла. Т.е. ее начало должно быть вроде:
зrocedure p1(s:string; var p:next);
var m:next;
F1:text;
BEGIN
Assign(F1,s);
Reset(f1);
New(m);
New(m^.sled);
p:=m;
Readln(f1, m^.el);
m^.sled:=nil;
--------------------


Ровно в два разы меньше байтодвижений smile.gif .
А потом передавай этой процедуре на растерзание сколько хочешь файлов и списков:

Var list1,list2,list3:next;
begin
p1('C:\first.txt', list1);
p1('C:\second.txt', list2);
p1('C:\third.txt', list3);
end.



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


--------------------
Лао-Цзы :
Знать много и не выставлять себя знающим есть нравственная высота. Знать мало и выставлять себя знающим есть болезнь. Только понимая эту болезнь, мы можем избавиться от нее.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #7


Влюблённый псих
***

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

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


Цитата
ты делаешь одинаковые действия для разных файлов.

А ведь на самом деле, ну, я и глупость написал!
Спасибо... smile.gif
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

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

 





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