Задача "Скобки"

Программа должна определять правильность введённой скобочной структуры. Правильная скобочная структура, это то, что можно получить из арифметического выражения со скобками, выкинув все знаки операций и цифры. Например:
Правильные скобочные структуры:

  • ()
  • ()()
  • ((()))
  • (()())
  • ((()())())

Неправильные скобочные структуры:

  • )(
  • ())(
  • (
  • ())
  • )(())(

Ввод: Слово в алфавите из двух круглых скобочек ( и ). Длина слова меньше 100000 символов.
Вывод: Либо NO, либо YES.

Мой вариант решения

  1. program BracketSequence;
  2.  
  3. var
  4.   a: char;
  5.   count: integer;
  6.  
  7. begin
  8.   count := 0;
  9.   while not eoln do begin
  10.     read(a);
  11.     if a = '(' then inc(count);
  12.     if a = ')' then dec(count);
  13.     if count < 0 then break
  14.   end;
  15.   if count = 0 then write('YES') else write('NO')
  16. end.

Пока я не могу детально прокомментировать программу из-за недостатка времени, но могу описать общий принцип ее работы.
Дело в том, что в правильно построенной скобочной последовательности количестве скобок обоих видов должно быть равным. Также принят во внимание один важный момент: пока мы ставим лишние открывающие скобки, мы можем "скомпенсировать" их закрывающими при дальнейшем вводе, а когда появляется хотя бы одна лишняя закрывающая скобка, то при дальнейшем вводе запись уже нельзя будет привести к правильному виду - дальнейшее рассмотрение последовательности бессмысленно и программа завершает свою работу.
Также интересным может показаться то, что программа реагирует только на символы скобок, то есть, она может проверить на правильность их расстановки и арифметическое выражение. Например, при вводе строки 4(x + 1) + 12y(3 + x) + 14 = 12 программа скажет "YES", подразумевая то, что скобки расставлены правильно.
Кстати, функция EOLN расшифровывается как End Of LiNe (в переводе с англ. "конец строки"), следовательно, условие not EOLN означает "пока не конец строки".

Как конкретно Вы завершаете

Как конкретно Вы завершаете ввод слова, Данил? В Вашем комменте об этом ни слова ...

break

Я бы не стал использовать break в данном случае, у нас же while всё-таки. Но тут уже наверно дело вкуса и стиля.

program  skobki; var

  1. program  skobki;
  2. var  f:text;
  3. s:string;
  4. a,i:integer;
  5. begin
  6. i:=0;
  7. a:=0;
  8. assign(f,'File.txt');
  9. reset(f);
  10. while not eof(f)  do begin
  11.     readln(f,s);
  12.     for i:=1 to length(s) do begin
  13.         if s='(' then inc(a);
  14.         if s=')' then dec(a);
  15.     end;
  16. end;
  17. close(f);
  18. if a<>0 then writeln('no')
  19. else writeln('yes');
  20.  readln;
  21. end.

пытаюсь разобраться с файлами, пример приведенный Антоном ранее в первом семестре решил попробывать реализовать с помощью использования файлов.

Если файл сделать

Если файл сделать типизированным, то задача сильно упростится, тип файла char, попробуй, так сказать для общего развития.