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

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

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

 
 Ответить  Открыть новую тему 
> текстовый файл. двусвязные списки.
lopata
сообщение 6.01.2010 22:56
Сообщение #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 
 К началу страницы 
+ Ответить 
volvo
сообщение 7.01.2010 14:51
Сообщение #2


Гость






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

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

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


Гуру
*****

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

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


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

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

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

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


Пионер
**

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

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


Помогите пожалуйста составить алгоритм.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
lopata
сообщение 15.01.2010 5:06
Сообщение #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

 



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