ANTICHAT — форум по информационной безопасности, OSINT и технологиям
ANTICHAT — русскоязычное сообщество по безопасности, OSINT и программированию.
Форум ранее работал на доменах antichat.ru, antichat.com и antichat.club,
и теперь снова доступен на новом адресе —
forum.antichat.xyz.
Форум восстановлен и продолжает развитие: доступны архивные темы, добавляются новые обсуждения и материалы.
⚠️ Старые аккаунты восстановить невозможно — необходимо зарегистрироваться заново.

15.05.2009, 14:07
|
Регистрация: 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.
|
|
|
|
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|