После того, как отработала процедура InStack, последний символ текста лежит ГДЕ? В вершине первого стека, так? Если теперь перенести n div 2 верхних символов из первого стека во второй, то последний символ текста как раз и будет лежать на дне второго стека...
А если добавление символа в стек/извлечение символа из стека вынести в отдельные процедуры - то все будет совсем просто:
| Код | uses crt; type TStack = ^stack; stack = record str: char; next: TStack; end;
Procedure Push(var top: TStack; ch: char); var p: TStack; begin new(p); p^.next := top; p^.str := ch;
p^.next := top; top := p; end;
Function Pop(var top: TStack): char; var p: TStack; begin if top = nil then Pop := #0 else begin pop := top^.str; p := top; top := top^.next; dispose(p); end; end;
var First, Second: TStack; n: integer;
procedure InStack; var f: text; i: integer; s: char; begin First := nil; n := 0;
assign(f, 'E:\111.txt'); reset(f); while not eof(f) do begin read(f, s); Push(First, s); n:=n+1; end; end;
procedure In2Stack; begin Second := nil; for i := 1 to n div 2 do Push(Second, Pop(First)); end; ... |
Обрати внимание, при печати стека у тебя портится ГЛОБАЛЬНАЯ переменная, лучше введи локальную, иначе потом будут проблемы с освобождением памяти... |