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

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

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

> Задача на стек и дек.
Krjuger
сообщение 17.05.2009 16:54
Сообщение #1


Профи
****

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

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


В общем задача заключается в том что надо из текстового файла заполнить дек и взять последние "Б" элементов и записать их в стек.Суть вопроса заключается в том какую реализацию выбрать.первый скособ это создать процедуру котора берет элемент из дека и пишет в стек,а вторая уже выполняет первую до выполнения условия(достижение Б),либо сделать лиш одну процедуру,которая делает все сразу.

TElem = integer;
TStack = ^TElement;
TElement = record
info:TElem;
Next:TStack;
end;
TData = integer;
PTDeqItem = ^TDeqItem;
TDeqItem = record
Data: TData;
next, prev: PTDeqItem;
End;

TDeq = Record
pStart, pFinish: PTDeqItem;
End;


Вот описание стека и дека.Вопрос в том можно ли создать лиш одну буферную переменную или делать через две.каждого типа.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
Krjuger
сообщение 21.05.2009 18:49
Сообщение #2


Профи
****

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

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


Хорошо вот текстовый файл и оновленный вариант программы.
Код

program laba11;
Uses CRT;
type
     DTree = record
         Data: integer;
        Name: string;
        stat: String;
   end;

  PTree = ^TTree;
  TTree = record
        head : DTree;
    left,right: PTree;
    end;
var
fin:text;
temp:PTree;
root:PTree;
ch: char;

Procedure Trash(var ch:char);
begin
  if (ch =#13) or  (ch =#10) or (ch =' ') or (ch =#0) then
  begin
   read(fin,ch);
   Trash(ch);
end;
end;

Procedure ReadStat(var fin: text; ch : char; var str: string);
    begin
        str:='';
    read(fin, ch);
    Trash(ch);
    str:=str+ch;
        repeat
            read(fin, ch);
            if not (ch = ' ') and not (ch=';') then
                str:=str+ch;
        until (ch=' ') or eoln(fin) or (ch=';');
  end;

Procedure ReadFile(var fin: text; ch : char; var str: string);
    begin
        str:='';
        repeat
            read(fin, ch);
            if not (ch = ' ') and not (ch=';') then
                str:=str+ch;
        until (ch=' ') or eoln(fin) or (ch=';');
  end;

Procedure CreateNode(temp : PTree;var root:PTree);
  Begin
    new(root);
    root^.head.stat := temp^.head.stat;
    root^.head.name := temp^.head.name;
    root^.head.data := temp^.head.data;
    root^.left := nil;
    root^.right := nil;
  End;

Procedure AddItem(Var root: PTree; temp: PTree);

  { Функция, создающая новый лист дерева с заданным значением Data }
var
parent, pwalk: PTree;

Begin

  if root = nil then  CreateNode(temp,root)
  else
   begin


    pWalk := root; { "гулять" начнем с корня }
    while pWalk <> nil do begin { пока не добрались до пустого указателя - делаем следующее }

      parent := pWalk;

      if pWalk^.head.stat='male' then pWalk := pWalk^.left
      else pWalk := pWalk^.right

    end;


    if temp^.head.stat='male' then CreateNode(temp,root^.left)
    else CreateNode(temp,root^.right);

  end;

End;

Procedure CreateTree(var root: PTree;var fin : text);
var
temp : PTree;
begin
new(temp);
while not eof(fin) do
  begin
     readstat(fin,ch,temp^.head.stat);
     readfile(fin,ch,temp^.head.name);
     read(fin,temp^.head.data);
     AddItem(root,temp);
  end;
end;

procedure printKLP(root:PTree);
begin
    if (root<>NIL) then (* Если дерево не пустое *)
        begin
            write(root^.head.name,' '); (* Распечатать корень дерево *)
            printKLP(root^.left); (* Распечатать левое поддерево *)
            printKLP(root^.right);(* Распечатать правое поддерево *)
        end;
end;

procedure printKLP_wrapper(root:PTree);
begin
    clrscr;
    if (root=NIL) then (* Если дерево пустое *)
        writeln('Дерево пусто!') (* Сообщить об этом *)
    else  (* Иначе *)
        PrintKLP(root); (* Распечатать дерево *)
    writeln;
    writeln('Нажмите любую клавишу для выхода в главное меню');
end;

begin
  clrscr;
  chdir('C:\TPascal');
  assign(fin,'test.txt');
  reset(fin);
  CreateTree(root,fin);
  printKLP_wrapper(root);
  close(fin);
  readkey;
end.


Прикрепленные файлы
Прикрепленный файл  test.txt ( 212 байт ) Кол-во скачиваний: 188
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

Сообщений в этой теме
Krjuger   Задача на стек и дек.   17.05.2009 16:54
volvo   Я уже задавал тебе этот вопрос, ты решил, что лучш...   17.05.2009 18:44
Krjuger   Не, стек и дек обязательно должны быть,это принцип...   17.05.2009 21:38
volvo   Нет, конечно... В смысле, неправильно. Сам же сказ...   18.05.2009 22:24
Krjuger   Могу удивить он компилируется в легкую.Так насчет ...   18.05.2009 22:28
volvo   Ты сказки-то будешь внукам рассказывать... Это ком...   18.05.2009 22:59
Krjuger   Вот полная прога.Теперь, вроде, стек заполняется ,...   19.05.2009 12:50
volvo   Если б работало так, как задумывал, может и пригод...   20.05.2009 17:38
Krjuger   Извини,с этим разделом я не знаком.Программа рабо...   20.05.2009 19:11
volvo   Ты файл test.txt наконец покажешь или нет? Я ж не ...   21.05.2009 18:29
Krjuger   Хорошо вот текстовый файл и оновленный вариант про...   21.05.2009 18:49
volvo   В результате ты хочешь получить вот такой результа...   21.05.2009 19:04
Krjuger   Вообще мне необходимо получить генеагогическое де...   21.05.2009 20:01
volvo   Значит, так. Дерево создается неправильно, пересма...   21.05.2009 20:26
Krjuger   В общем я почитал пяток другой факов и немного пер...   22.05.2009 15:42
volvo   Если , то дерево в принципе не будет заполняться, ...   22.05.2009 16:49
Krjuger   Да это мой косяк,добавить добавил а упомянуть об ...   22.05.2009 17:22
Krjuger   Вроде я понял о чем ты так усердно пытался мне ска...   22.05.2009 18:47
Krjuger   При этом,если сделать в процедуре Procedure AddS...   22.05.2009 19:24


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

 



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