Помощь - Поиск - Пользователи - Календарь
Полная версия: Задачи на обработку текстовой информации
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
sarmat
1.Дано натуральное число N (N>9). Определите сумму цифр в первой половине числа.(старшие разряды). пример N=12345678. Сумма =1+2+3+4=10


2. Дана строка символов. Удалить из строки все символы "(" и ")" - круглые скобки


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


ЗАРАНЕЕ СПАСИБО! give_rose.gif give_rose.gif give_rose.gif
ПС конкретно мне надо как это будет записано в паскале/
sheka
Cделать конкретно? Не вопрос.

А желание попробовать что-то сделать самому есть??? Давай труды сюды.
Lapp
Просьба не нарушать правила раздела Задачи (п.6, см. выше на этой странице)

Цитата(sarmat @ 8.10.2010 22:45) *
ПС конкретно мне надо как это будет записано в паскале/
В Паскале это будет конкретно записано, когда ты конкретно запишешь.. За тебя делать никто не станет. Есть конкретные вопросы - конкретно давай..
sarmat
2. после того как я запсал "дано" и определил строку символов. какой командой удалить скобки?
Unconnected
Ну, если ты о второй задаче - для этого есть оператор delete(строка,позиция_начала_удаления,сколько_символов_удалять). И чтобы ею воспользоваться, бежишь в цикле по строке (типа for i:=1 to length(s) do ) и сравниваешь каждый символ со скобками, если попалась скобка - delete её..
volvo
Цитата
сравниваешь каждый символ со скобками, если попалась скобка - delete её..
и в какой-то момент осознаешь, что когда скобку удалил, длина строки уменьшилась, а Length(s) уже выполнился в самом начале цикла, и ты, оказывается, уже бежишь снаружи от строки, и что-то там удаляешь... Поэтому надо сделать... Что?
Unconnected
Точняк, извиняюсь.. сам когда-то долго вылавливал такую фигню) Перед циклом надо длину строки в переменную занести, и её использовать конечным параметром в цикле.
volvo
Цитата
Перед циклом надо длину строки в переменную занести, и её использовать конечным параметром в цикле.
Вот как раз этого делать не надо, это за тебя делает Паскаль. И именно в этом случае происходит то, что я описал (ну, вот так устроен цикл For в Паскале, что начальное и конечное значение вычисляются один раз, а не на каждой итерации. В отличии от С, скажем). И если ты сам вынесешь длину строки в новую переменную, то ничего нового не произойдет. Так что надо сделать, чтоб не бегать за границей строки?
Unconnected
Цитата
ну, вот так устроен цикл For в Паскале, что начальное и конечное значение вычисляются один раз, а не на каждой итерации


Ой.. *полез в свои программы, которые живут с этим..*

Ну, тогда ввести переменную, скажем L, цикл такой: for i:=1 to length(s)-l, а в теле цикла при каждом удалении inc(l);..
Client
smile.gif
ну что все for да for smile.gif while/repeat тут гораздо проще использовать
volvo
Ребята, а подумать не пробовали? For бывает не только вперед, а и назад тоже.
Цитата
while/repeat тут гораздо проще использовать
Так что тут проще использовать, правильный For или While/Repeat?
Client
for назад - хорошая идея smile.gif перебирая с конца, если нашел скобку, то просто удалил и все, не надо волноваться о длине строки.
sarmat
блин, я не понимаю ка кмне определить из этой строки скобки wacko.gif
TarasBer
> блин, я не понимаю ка кмне определить из этой строки скобки

if (S[i] = '(') or (S[i] = ')') then ...

Продвинутый вариант, рекомендуется, если вы проходили такие конструкции:

const
chrBrackets = ['(', ')'];

...

if S[i] in chrBrackets then ...
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.