ANTICHAT.XYZ    VIDEO.ANTICHAT.XYZ    НОВЫЕ СООБЩЕНИЯ    ФОРУМ  
Баннер 1   Баннер 2
Antichat снова доступен.
Форум Antichat (Античат) возвращается и снова открыт для пользователей. Здесь обсуждаются безопасность, программирование, технологии и многое другое. Сообщество снова собирается вместе.
Новый адрес: forum.antichat.xyz
Вернуться   Форум АНТИЧАТ > Программирование > С/С++, C#, Delphi, .NET, Asm
   
 
 
Опции темы Поиск в этой теме Опции просмотра

  #11  
Старый 15.05.2009, 14:07
Аватар для Algol
Algol
Регистрация: 29.05.2002
Сообщений: 1,793
Провел на форуме:
2050916

Репутация: 0


По умолчанию

Цитата:
Сообщение от Fo)(a  
Всем привет, уже целый день бьюсь с задачей Проверить соответствие слов begin, end, case end, record в операторах программы Pascal учесть что в строке может быть несколько слов, повторений. Программа на тему динамические структуры данных Заранее спасибо

PS Сори!!! не указал язык в которм выполнить надо" надо сделать на Pascal

Код:
program Project2;

{$APPTYPE CONSOLE}

uses
  SysUtils;

var
  source: string;
  lexem: string;
  c : char;
  i:Integer;
  stack: array[0..100] of string;
  stackPointer: integer;

  procedure PushLexem(lexem: string);
  begin
    if lexem = 'end' then
      begin
      //найден конец блока, выталкиваем из стека
      if stackPointer = 0 then
        Writeln('Error: Found "end", but not found "begin", "case" or "record"')
      else
        dec(stackPointer)
      end
    else
      if (lexem='begin') or (lexem='case') or (lexem='record') then
        begin
          if(stackPointer>=Length(stack)) then
             Writeln('Error: Stack overflow');//переполнение стека - слишком много вложенных блоков в исходном тексте
          //кладем лексему в стек
          stack[stackPointer] := lexem;
          inc(stackPointer);
        end
  end;

begin
  //ввод проверяемого кода
  Writeln('Enter Pascal source: ');
  Readln(source);
  //переводим в нижний регистр, добавляем пробел в конце
  source := LowerCase(source)+' ';
  //перебираем символы, ищем лексемы
  lexem := '';
  for i:=1 to Length(source) do
  begin
    c := source[i];
    if c in ['a'..'z','0'..'9','_'] then
      //читаем лексему
      lexem := lexem + c
    else
    if lexem<>'' then
      begin
      //прочитана лексема, кладем в стек
      PushLexem(lexem);
      lexem := '';
      end
  end;
  //проверяем сотсояние стека, он должен быть пуст
  if stackPointer > 0 then
     Writeln('Error: Found "'+stack[stackPointer-1]+'", but not found "end"');

  Writeln('Analysis completed');
  Readln;

end.
 
Ответить с цитированием
 



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сюда выкладываем все проги для фрикринга мобильников, которых знаем! nigger Сотовый фрикинг 5 11.04.2009 11:15
Американским студентам запретили пользоваться Skype KPOT_f!nd Мировые новости 1 28.09.2006 03:47
Любителям квестов сюда!! FoX's Болталка 10 25.01.2005 20:42



Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


Быстрый переход




ANTICHAT.XYZ