0 / 0 / 0
Регистрация: 20.10.2009
Сообщений: 108
1

Проверить файл программы на соответствие числа открывающих и закрывающих операторных скобок (begin и end)

01.01.2010, 11:33. Показов 3194. Ответов 20
Метки нет (Все метки)

Дан текстовый файл F,содержащий программа на языке паскаль.проверить эту программу на несоответствие числа открывающих и закрывающих операторных скобок (begin и end)
__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
01.01.2010, 11:33
Ответы с готовыми решениями:

Проверить файл на соответствие числа открывающих и закрывающих скобок
Помогите решить задачу по теме текстовых файлов, пожалуйстаааа Дан текстовый файл f,...

Проверить текст программы на соответствие числа открывающих и закрывающих круглых скобок
Дан текстовый файл F, содержащий программу на языке Паскаль. Проверить эту программу на...

Проверить текст на соответствие числа открывающих и закрывающих фигурных скобок
Доброго времени суток, помогите пожалуйста написать код по данному заданию, если можно то с...

Дан текстовый файл fl. Проверьте текст на соответствие числа открывающих и закрывающих круглых скобок
Дан текстовый файл fl. Проверьте текст на соответствие числа открывающих и закрывающих круглых...

20
3306 / 1368 / 110
Регистрация: 28.04.2009
Сообщений: 4,822
01.01.2010, 11:42 2
masha1207, посмотрите вот эту тему https://www.cyberforum.ru/pasc... page2.html , может поможет.
0
Тимуровец
444 / 284 / 50
Регистрация: 10.09.2009
Сообщений: 963
01.01.2010, 11:48 3
Эта ссылка не сильно поможет т.к. у паскаля есть языковые конструкции где end присутствует, а вот begin вообще не предполагается. Описания записей, классов, объектов, кейс.
И все тогда становится совсем не просто.
0
WolfCF
01.01.2010, 11:53
  #4

Не по теме:

Цитата Сообщение от Страдалецъ Посмотреть сообщение
Эта ссылка не сильно поможет т.к. у паскаля есть языковые конструкции где end присутствует, а вот begin вообще не предполагается. Описания записей, классов, объектов, кейс.
И все тогда становится совсем не просто.
Вы это к чему(про что)?

0
Тимуровец
444 / 284 / 50
Регистрация: 10.09.2009
Сообщений: 963
01.01.2010, 12:17 5
Цитата Сообщение от Wolf Посмотреть сообщение

Не по теме:


Вы это к чему(про что)?

Вы даете челу ссылку на прогу работающую с обычными скобками (), а ему надо паскальные программные скобки (begin end). Есть некоторая разница.
1
WolfCF
01.01.2010, 12:55
  #6

Не по теме:

Страдалецъ, спасибо, не внимательно прочитал задание.

0
36 / 13 / 2
Регистрация: 12.10.2009
Сообщений: 421
01.01.2010, 14:09 7
Цитата Сообщение от masha1207 Посмотреть сообщение

Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
assign(F,'///');
reset(F);
//Читаем файл до конца.. 
//и ищем..
pro:=pos('end.'S);//Ищем end. в строке тоесть в файле..
//если есть то дальше если он нашел то он возвратит порядковый номер символа (по счету).
if (pro>0) then 
begin
writeln('da');
end
else
writeln('no');
 
//Смотри мы нашли заканчивание програмы. теперь надо проверить begin
//Но может быть ситуация когда программа не правильно написанно не хватает end; верно?
//И дальше считает сколько begin
//И столько должно быть begin Только на 1 больше
for i:=1 to length(S) do
begin
beg:=pos('begin',S); //Ищем begin
S:=copy(S,beg+1,length(S)); //Тут ты читаешь в строку S из файла..до этого ..как только нашел то копируем обратно откидывая другую часть в коорой уже производился поиск.. и те самым..
 if (beg>0) then 
begin
res:=res+1; 
end; 
end;
 
 
 
for i:=1 to length(S) do
begin
beg:=pos('end;',S); //Ищем begin
S:=copy(S,beg+1,length(S)); //Тут ты читаешь в строку S из файла..до этого ..как только нашел то копируем обратно откидывая другую часть в коорой уже производился поиск.. и те самым..
 if (beg>0) then 
begin
res1:=res1+1; 
end; 
end;
 
if (res>res1) then //Тоесть если begin больше чем end; то делаем..
//Дальше сам уже как надо тебе

Попробуй
1
0 / 0 / 0
Регистрация: 20.10.2009
Сообщений: 108
01.01.2010, 15:00  [ТС] 8
А в 28-30 там надо что нибудь писать?
0
36 / 13 / 2
Регистрация: 12.10.2009
Сообщений: 421
01.01.2010, 15:30 9
Цитата Сообщение от masha1207 Посмотреть сообщение
А в 28-30 там надо что нибудь писать?
Там простые пробелы.. Кстати ты сможешь еще проверить весь код на правильность.)0 чтоб весь код программы был верный). Но это будет не легко.. И не совсем точно но все же
0
4337 / 1469 / 680
Регистрация: 12.03.2009
Сообщений: 5,310
01.01.2010, 15:34 10
EFEFEFEF, есть один недочёт. А про case вы не забыли? У end'а в этой структуре отсуствует begin:
Pascal
1
2
3
4
5
case....
....
....
...
end;
Так же и с record. В условии не сказано, что именно может быть в коде
0
36 / 13 / 2
Регистрация: 12.10.2009
Сообщений: 421
01.01.2010, 15:35 11
Цитата Сообщение от k1ry4 Посмотреть сообщение
EFEFEFEF, есть один недочёт. А про case вы не забыли? У end'а в этой структуре отсуствует begin:
Pascal
1
2
3
4
5
case....
....
....
...
end;
Так же и с record. В условии не сказано, что именно может быть в коде
Ага . тоже такое есть
0
4337 / 1469 / 680
Регистрация: 12.03.2009
Сообщений: 5,310
01.01.2010, 15:38 12
Поэтому следует доработать программу так, чтобы общее число слов begin, case, record и т.д. равнялось кол-ву end'ов
1
36 / 13 / 2
Регистрация: 12.10.2009
Сообщений: 421
01.01.2010, 15:40 13
Цитата Сообщение от k1ry4 Посмотреть сообщение
Поэтому следует доработать программу так, чтобы общее число слов begin, case, record и т.д. равнялось кол-ву end'ов
Делаешь условие.. примерно так..

Pascal
1
2
3
casse:=pos('case',s); if (casse>0) then res:=res+1;
 
//и так дале...
1
2825 / 1634 / 252
Регистрация: 03.12.2007
Сообщений: 4,222
01.01.2010, 20:33 14
Цитата Сообщение от k1ry4 Посмотреть сообщение
Поэтому следует доработать программу так, чтобы общее число слов begin, case, record и т.д. равнялось кол-ву end'ов
Ага, ещё asm ... end; ещё object ... end; (для Object Pascal ещё class ... end ещё record ... case ... end; (тогда ведь end будет общий) ещё все эти слова в строках и в комментариях. А в юните и dll'ке может быть в конце end без begin'а. А ещё можно переменную назвать nWeekends и так далее. Это либо свой компилятор, либо надо уточнять, до каких деталей это проверять.
1
0 / 0 / 0
Регистрация: 20.10.2009
Сообщений: 108
02.01.2010, 08:52  [ТС] 15
A теперь можете мне помочь все вместе написать в решении а то я вабще нини в паскале
0
36 / 13 / 2
Регистрация: 12.10.2009
Сообщений: 421
02.01.2010, 09:30 16
Цитата Сообщение от masha1207 Посмотреть сообщение
A теперь можете мне помочь все вместе написать в решении а то я вабще нини в паскале
Напишу наверно за сегодня если время будет и скину тебе..
1
0 / 0 / 0
Регистрация: 20.10.2009
Сообщений: 108
02.01.2010, 09:55  [ТС] 17
Спасибо большое
0
Тимуровец
444 / 284 / 50
Регистрация: 10.09.2009
Сообщений: 963
02.01.2010, 16:44 18
Попробуйте так:

Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
Uses Crt;
 
Const
     OperatorCount = 5;
     Operator: Array[1..OperatorCount] of String = ('end','begin','case','record','object');
     Symb = [#32,#8,#59,#46,#123,#125,#40,#41];
Var
   PasFile: Text;
   S: String;
   i,n: Integer;
   Bracket: Array[1..2] of Integer;
begin
 ClrScr;
 Assign(PasFile, 'C:\ASCIITAB.PAS');
 Reset(PasFile);
 
 Bracket[1] := 0; Bracket[2] := 0;
 while not Eof(PasFile)
 do begin
    ReadLn(PasFile, S);
    S := S + ' ';
    for i := 1 to OperatorCount
    do begin
       n := Pos(Operator[i], S);
       case n
       of 0: Continue;
          1: if S[n+Length(Operator[i])] in Symb
             then if i = 1
                  then Inc(Bracket[1])
                  else Inc(Bracket[2]);
          else if (S[n-1] in Symb) and (S[n+Length(Operator[i])] in Symb)
               then if i = 1
                    then Inc(Bracket[1])
                    else Inc(Bracket[2]);
          end;
       end;
    end;
 Close(PasFile);
 WriteLn(Bracket[1],' ',Bracket[2]);
 ReadLn;
end.
1
0 / 0 / 0
Регистрация: 20.10.2009
Сообщений: 108
08.01.2010, 01:33  [ТС] 19
Поясните пож каждую строчку

Добавлено через 13 минут
какие действия выполняем

Добавлено через 8 часов 34 минуты
что значит Inc(Bracket[1])
0
Тимуровец
444 / 284 / 50
Регистрация: 10.09.2009
Сообщений: 963
08.01.2010, 02:31 20
Читайте справку. Все операторы и функции там разжеваны по самое не могу.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
08.01.2010, 02:31

В файле находится текст программы на Паскале. Используя стек, проверить правильность вложений операторных скобок (begin - end) в этой программе
В файле находится текст программы на Паскале. Используя стек, проверить правильность вложений...

Проверить соответствие открывающих и закрывающих круглых скобок в программе
Написать программу, которая проверяет соответствие открывающих и закрывающих круглых скобок в...

Проверить правильность расстановки операторных скобок 'begin' и 'end'
Доброго времени суток )))) Помогите пожалуйста : проверка правильности расстановки операторных...

Файлы. Проверить программу в файле на соответствие открывающих и закрывающих скобок
Помогите пожалуйста.. Дан текстовый файл, содержащий программу на языке Pascal. Проверить эту...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.