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

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

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

> Задача на стек и дек.
сообщение
Сообщение #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 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
сообщение
Сообщение #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 байт ) Кол-во скачиваний: 265
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

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


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

 





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