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

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

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

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


Пионер
**

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

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


Есть текстовый файл, который содержит имена детей и их желание на НГ. Выглядет это так :
Christoph: Schlitten
Barbara: Barbie-Puppe
Barbara: Puppenkьche
Christoph: Matchboxauto
Barabara: Blockflцte
Susi: Strolchi-Puppe

Нужно сделать двусвязный список, который содержит имена детей ,желания и "частоту желаний", добавляя эновый элемент в конец списка.
Вобщем смысл : создавать для кадой строчки текстового файла элемент списка и считывать туда эту строчку.
примерный код:

PROGRAM Wishes;
USES Wincrt;
TYPE
WishNodePtr = ^WishNode;
WishNode = RECORD
prev, next: WishNodePtr;
whish: STRING; (*the wish*)
n: INTEGER; (*number of occurences of the wish*)
END; (*RECORD*)

FUNCTION READFROMFILE ;
var list, NewNode, previous : WishNodePtr;
BEGIN
List:= Nil;
WHILE not EOF DO
BEGIN
(* здесь условие: для первой строчки файла создаем элемент *)
new(List);
list^.prev:= NIL;
list^.next := NIL;
list^.wish := s;
previous := list;
(* здесь условие: для всех остальных строчек файла *)

New(NewNode);
NewNode^.next := NIL;
NewNode^.prev := previous;
NewNode^.wish := s;
previuos := NewNode;
END;
.
.
.



Не могу сообразить что это за условие может быть.
Или это вообще делается по-другому
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Гость






Цитата
Не могу сообразить что это за условие может быть.
Ты о чем?

Вот об этом условии, что-ли:
head := nil; tail := nil;
while not eof(f) do
begin
if head = nil then { первый элемент }
else { уже не первый, добавлять к tail^.next }
end;
?

Сколько уже таких тем было, неужели же настолько сложно посмотреть на форуме, как организуется список? Почему КАЖДЫЙ думает, что именно его задание - самое важное, и именно его не было на форумах и вообще, его дали в первый раз. Уверяю вас, я на форумах за 6 лет не встретил НИ ОДНОГО оригинального задания, кругом копи/пасты (из каких-то учебников, из файлопомоек, из старых добрых задачников начиная с 1988 года, по которым я в свое время учился, поэтому большинство задач оттуда помню наизусть). Нет ничего нового. Куда мир катится - непонятно.
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Гуру
*****

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

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


Цитата
из старых добрых задачников начиная с 1988 года

Оффтоп он
Кивает в знак согласия. Пильщиков, Абрамов..., Дьяконов etc wacko.gif
Оффтоп офф

Цитата
Куда мир катится - непонятно.

туды norespect.gif
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Пионер
**

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

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


Помогите пожалуйста составить алгоритм.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5


Пионер
**

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

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


Я понимаю что всем пофиг, но может все-таки кто-нибудь посмотрит
условие немного изменилось: у именам "прикреплены" (плохо владею терминами на русском языке) односвязные списки, содержащие имена с одинаковыми пожеланиями.

PROGRAM Wishes;
TYPE
WishNodePtr = ^WishNode;
WisherNodePtr= ^WisherNode;
WishNode = RECORD
prev, next: WishNodePtr;
wish: STRING;
n: INTEGER;
wishers: WisherNodePtr;
END;
Wishlist = RECORD
first: WishNodePtr;
last: WishNodePtr;
END;
WisherNode = RECORD
name: string;
next: WisherNodePtr;
END;

VAR
list:WishList;

FUNCTION CreateNewNode(wish, wisher: string): WishNodePtr;
VAR
n: WishNodePtr;
firstWisher: WisherNodePtr;
BEGIN
New(n);
n^.prev := NIL;
n^.next := NIL;
n^.wish := wish;
n^.n := 1;
New(firstWisher);
firstWisher^.name := wisher;
firstWisher^.next := NIL;
n^.wishers := firstWisher;
CreateNewNode := n;
END;

PROCEDURE Append(VAR list: WishList; node: WishNodePtr);
BEGIN
IF list.last = NIL THEN BEGIN
list.first := node;
list.last := node;
END ELSE BEGIN
node^.next := nil;
node^.prev := list.last;
node^.prev^.next := node;
list.last := node;
END;
END;

FUNCTION GetNodeWish(list: WishList; wish: string): WishNodePtr;
var
n: WishNodePtr;
begin
n := list.first;
while (n <> nil) do begin
if n^.wish = wish then begin
GetNodeWish := n;
Exit;
end;
n := n^.next;
end;
GetNodeWish := nil;
end;

PROCEDURE ReadFromFile(VAR list: WishList; path: string);
VAR
wish, wisher, s: string;
currentNode: WishNodePtr;
wisherN, curWisher: WisherNodePtr;
t: Text;
BEGIN
Assign(t, path);
Reset(t);
while not Eof(t) do begin
ReadLn(t, s);
if (s[length(s)]=':') then begin
wisher := copy(s, 1, length(s) - 1);
wish := '';
end else wish := s;

if (wish <> '') and (wisher <> '') then begin
currentNode := GetNodeWish(list, wish);

if (currentNode = nil) then begin
currentNode := CreateNewNode(wish, wisher);
end else begin
currentNode^.n := currentNode^.n + 1;
curWisher := currentNode^.wishers;
while (curWisher <> nil) do begin
if (curWisher^.next = nil) and (curWisher^.name <> wisher) then begin
New(wisherN);
wisherN^.next := nil;
wisherN^.name := wisher;
curWisher^.next := wisherN;
break;
end;
curWisher := curWisher^.next;
end;
end;
Append(list, currentNode);
end;
end;
END;

procedure OutputWishes(list: WishList);
var
currentWish: WishNodePtr;
currentWisher: WisherNodePtr;
begin
currentWish := list.first;
while currentWish <> nil do begin
WriteLn(currentWish^.wish, ':');
currentWisher := currentWish^.wishers;
while currentWisher <> nil do begin
WriteLn('Wisher: ', currentWisher^.name);
currentWisher := currentWisher^.next;
end;
currentWish := currentWish^.next;
end;
end;

procedure DestroyWishes(var list: WishList);
var
currentWish, delWish: WishNodePtr;
currentWisher, delWisher: WisherNodePtr;
begin
currentWish := list.first;
while currentWish <> nil do begin
currentWisher := currentWish^.wishers;
while currentWisher <> nil do begin
delWisher := currentWisher;
currentWisher := currentWisher^.next;
Dispose(delWisher);
end;
delWish := currentWish;
currentWish := currentWish^.next;
Dispose(delWish);
end;
end;

BEGIN
ReadFromFile(list, '/Users/asv2001/Desktop/Uebung 9/wishes.txt');
OutputWishes(list);
DestroyWishes(list);
END.



Код далеко неидеальный, но просто больше нет сил его мучать.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

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

 





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