|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
02.05.2012, 11:06 | #1 |
Новичок
Джуниор
Регистрация: 02.05.2012
Сообщений: 6
|
Подсчет количества операторов в одномерном массиве
Есть такое задание:
1) Составить процедуру подсчета и печати количества групп операторов заключенных в скобки "begin ... end" в исходном массиве строк 2) Составить функцию возвращающую количество символов ";" в строке. Вопрос исключительно по первому, как это возможно реализовать? Как определить что слово является оператором? Я в Паскале новичек, и пишу опираясь на знания php =) На данный момент у меня написано: Код:
|
02.05.2012, 11:53 | #2 |
Старожил
Регистрация: 09.01.2008
Сообщений: 26,229
|
по хорошему надо писать синтаксический аналазатор (разбирать текст на лексемы, потом определять, что представляет собой каждая из лексем). Это описано в целом ряде источников.
Но, скорее всего (особенно с учётом задания №2), вам достаточно посчитать, сколько раз встретилась точка с запятой между begin ... end. Отдельно учесть наличие точки с запятой после последнего оператора (перед крайним END). и всё решение! |
02.05.2012, 12:05 | #3 |
Новичок
Джуниор
Регистрация: 02.05.2012
Сообщений: 6
|
Если я правильно понял, то если встречается ";", то можно считать что присутствует оператор, так?
А вот на счет "end;" можно поподробнее? |
02.05.2012, 13:01 | #4 | ||
Старожил
Регистрация: 09.01.2008
Сообщений: 26,229
|
Цитата:
Цитата:
Код:
бороться с этим явлением можно двумя способами. первый. простейший. считаем количество ;, количество операторов := кол_во_точек_с_запятой + 1 в этом случае, если перед END стоит оператор, а после него есть точка с запятой, то эта точка с запятой означает наличие ЕЩЁ одного оператора (напоминаю, что в Паскаль допускается наличие ПУСТЫХ операторов!) второй способ. учитывать случай с наличием/отсутствием точки с запятой после последнего оператора отдельно. учитывать так - перебираем символы в обратном порядке от конечного END - если нашли точку с запятой - то считаем, что количество операторов РАВНО количеству точек с запятой, если НЕ НАШЛИ точку с запятой (встретился ЛЮБОЙ другой символ, отличный от табуляции/перевода строки) - то считаем, что количество операторов РАВНО количеству точек с запятой ПЛЮС ОДИН. и ещё, решите для себя, сколько операторов содержит такая конструкция Код:
ну и ещё. обязательно учтите момент наличия (возможности) комментариев в коде. Нужно или декларировать, что их запрещено использовать, или, если они допускаются, тогда обрабатывать отдельно (я бы удалял из текста все комментарии, чтобы они не мешали подсчётам). |
||
02.05.2012, 13:38 | #5 |
Старожил
Регистрация: 08.04.2012
Сообщений: 3,229
|
Вам это не нужно.
По условию требуется подсчитать количество групп операторов, а не количество операторов. Соответственно пересчитывать сами операторы бессмысленно. Учитывая, что группа может содержать любое неотрицательное количество операторов, достаточно подсчитать количество пар "скобок". Например, Код:
|
02.05.2012, 14:31 | #6 | |
Старожил
Регистрация: 09.01.2008
Сообщений: 26,229
|
Цитата:
я был неправ (про подсчёт ";" ) - вот что значит "читать по диагонали"... |
|
02.05.2012, 14:36 | #7 |
Новичок
Джуниор
Регистрация: 02.05.2012
Сообщений: 6
|
Дело в том что в задании дано подсчитать именно количество операторов, да в прочем прикреплю задание к вложениям..
прошу прощения за дикий размер изображения.. |
02.05.2012, 14:57 | #8 |
Старожил
Регистрация: 09.01.2008
Сообщений: 26,229
|
всё. теперь всё более-менее встало на места:
слева задание №7 - что нужно сделать - "посчитать количество операторов в тексте программы." Причём, внимание "перед каждым end должен стоять символ ';' " мои рассуждения насчёт проверки ; перед end отметаются - авторы задания уже это учли - так что сколько ; - столько и операторов - только с учётом ГРУПП операторов а справа - что для выполнения задания потребуется - найти количество групп операторов (заключённых в begin .. end) и количество символов ';' единственное, что мне не до конца понятно - как учитывать группы операторов при подсчёте общего количества операторов? я бы игнорировал. и второе. при подсчёте и печати групп операторов как поступать со вложенными группами - считать их или нет... но тут как Вы сами решите.. |
02.05.2012, 15:11 | #9 |
Новичок
Джуниор
Регистрация: 02.05.2012
Сообщений: 6
|
то есть получается сколько ";" столько и операторов, соотвественно сколько begin end, столько и групп (если считать вложенные) ?
|
02.05.2012, 15:18 | #10 |
Старожил
Регистрация: 09.01.2008
Сообщений: 26,229
|
ну, на мой взгляд, так и получается...
(насчёт вложенных групп как Вы решите, так и будет - потом с преподавателем пообщаетесь, если он будет не согласен... ) |
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Зацикливание в одномерном массиве. | torren108 | Помощь студентам | 2 | 09.12.2011 21:41 |
пв одномерном массиве... | Avvakymova | Паскаль, Turbo Pascal, PascalABC.NET | 4 | 13.05.2011 19:53 |
Группа в одномерном массиве | BaronVik | Помощь студентам | 5 | 21.10.2010 05:58 |
Поиск в одномерном массиве | Joxter | Помощь студентам | 6 | 13.12.2008 14:19 |