Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 02.05.2013, 14:40   #1
YTatyana
 
Регистрация: 02.05.2013
Сообщений: 3
По умолчанию Стек с указателями

Помогите пожалуйста найти ошибку...Задание и программа ниже:
Из заданного стека, хранящего символы, удалить все символы, являющиеся буквами или цифрами, и подсчитать сколько в нем было цифр. (Удалять и считать можно как при перекладывании в дополнительный стек, так и при возвращении элементов на место.)
Код:
uses
  crt;

type
  ch = char;
  PElem = ^TElem; //указатель на запись
  TElem = record
    info: ch; //информационная часть
    next: Pelem; //указатель на следующий элемент
  end;

var
  p, top: PElem;

procedure create();
var
  f: Text;
  s: ch;
begin
  Assign(f, 'text.txt');
  Reset(f);
  while not Eof(f) do
  begin
    new(p);
    p^.next := top;
    read(f, s);
    p^.info := s;
    top := p;
  end;
end;

procedure Chtenie();
begin
  p := top;
  while p <> nil do
  begin
    writeln(p^.info);
    p := p^.next;
  end;
end;

procedure TopToTop(var top, Dop: PElem);
begin
new(top);
  p := top;
  top := top^.next;
  p^.Next := Dop;
  Dop := p;
end;

procedure Proverka();
var
  pAux: PElem;
  el: ch;
  Dop: PElem;
  n: integer;
begin
  Dop := nil;
  n := 0;
  while top <> nil do
  begin
    el := top^.info;
    if el in ['a'..'z'] then
    begin
      pAux := top;
      top := top^.next;
      dispose(pAux);
      pAux := nil;
    end;
    if el in ['0'..'9'] then
    begin
      Inc(n);
      pAux := top;
      top := top^.next;
      dispose(pAux);
      pAux := nil;
    end;
    TopToTop(top, Dop);
  end;
  while Dop <> nil do
  begin
    TopToTop(Dop, top);
  end; 
  writeln('n=', n);
  p := top;
  while p <> nil do
  begin
    writeln(p^.info);
    p := p^.next;
  end;
end;

begin
  create();
  Chtenie();
  Proverka();
  Chtenie();
end.
Неправильно выводит ((ничего не считает

Последний раз редактировалось Stilet; 02.05.2013 в 15:05.
YTatyana вне форума Ответить с цитированием
Старый 02.05.2013, 16:24   #2
s-andriano
Старожил
 
Аватар для s-andriano
 
Регистрация: 08.04.2012
Сообщений: 3,229
По умолчанию

А входной файл?
s-andriano вне форума Ответить с цитированием
Старый 02.05.2013, 16:31   #3
YTatyana
 
Регистрация: 02.05.2013
Сообщений: 3
По умолчанию

любой текстовый файл с символами, буквами и цифрами
YTatyana вне форума Ответить с цитированием
Старый 02.05.2013, 16:40   #4
YTatyana
 
Регистрация: 02.05.2013
Сообщений: 3
По умолчанию

разницы нет, любой текстовый файл с символами, буквами и цифрами
YTatyana вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
работа с указателями compiler90 Visual C++ 1 04.06.2012 18:52
Работа с указателями Byurrer Общие вопросы C/C++ 8 02.04.2011 21:09
Беда с указателями Soundkilla Помощь студентам 5 08.03.2011 22:05
Работа с указателями (C) pixel_ Помощь студентам 1 28.08.2009 14:07