Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Задачи _ Задачи на обработку текстовой информации

Автор: sarmat 9.10.2010 1:45

1.Дано натуральное число N (N>9). Определите сумму цифр в первой половине числа.(старшие разряды). пример N=12345678. Сумма =1+2+3+4=10


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


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


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

Автор: sheka 9.10.2010 2:13

Cделать конкретно? Не вопрос.

А желание попробовать что-то сделать самому есть??? Давай труды сюды.

Автор: Lapp 9.10.2010 8:25

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

Цитата(sarmat @ 8.10.2010 22:45) *
ПС конкретно мне надо как это будет записано в паскале/
В Паскале это будет конкретно записано, когда ты конкретно запишешь.. За тебя делать никто не станет. Есть конкретные вопросы - конкретно давай..

Автор: sarmat 9.10.2010 15:03

2. после того как я запсал "дано" и определил строку символов. какой командой удалить скобки?

Автор: Unconnected 9.10.2010 15:15

Ну, если ты о второй задаче - для этого есть оператор delete(строка,позиция_начала_удаления,сколько_
символов_удалять). И чтобы ею воспользоваться, бежишь в цикле по строке (типа for i:=1 to length(s) do ) и сравниваешь каждый символ со скобками, если попалась скобка - delete её..

Автор: volvo 9.10.2010 15:29

Цитата
сравниваешь каждый символ со скобками, если попалась скобка - delete её..
и в какой-то момент осознаешь, что когда скобку удалил, длина строки уменьшилась, а Length(s) уже выполнился в самом начале цикла, и ты, оказывается, уже бежишь снаружи от строки, и что-то там удаляешь... Поэтому надо сделать... Что?

Автор: Unconnected 9.10.2010 15:31

Точняк, извиняюсь.. сам когда-то долго вылавливал такую фигню) Перед циклом надо длину строки в переменную занести, и её использовать конечным параметром в цикле.

Автор: volvo 9.10.2010 15:41

Цитата
Перед циклом надо длину строки в переменную занести, и её использовать конечным параметром в цикле.
Вот как раз этого делать не надо, это за тебя делает Паскаль. И именно в этом случае происходит то, что я описал (ну, вот так устроен цикл For в Паскале, что начальное и конечное значение вычисляются один раз, а не на каждой итерации. В отличии от С, скажем). И если ты сам вынесешь длину строки в новую переменную, то ничего нового не произойдет. Так что надо сделать, чтоб не бегать за границей строки?

Автор: Unconnected 9.10.2010 15:48

Цитата
ну, вот так устроен цикл For в Паскале, что начальное и конечное значение вычисляются один раз, а не на каждой итерации


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

Ну, тогда ввести переменную, скажем L, цикл такой: for i:=1 to length(s)-l, а в теле цикла при каждом удалении inc(l);..

Автор: Client 9.10.2010 16:09

smile.gif
ну что все for да for smile.gif while/repeat тут гораздо проще использовать

Автор: volvo 9.10.2010 16:17

Ребята, а подумать не пробовали? For бывает не только вперед, а и назад тоже.

Цитата
while/repeat тут гораздо проще использовать
Так что тут проще использовать, правильный For или While/Repeat?

Автор: Client 9.10.2010 16:23

for назад - хорошая идея smile.gif перебирая с конца, если нашел скобку, то просто удалил и все, не надо волноваться о длине строки.

Автор: sarmat 9.10.2010 16:33

блин, я не понимаю ка кмне определить из этой строки скобки wacko.gif

Автор: TarasBer 9.10.2010 17:59

> блин, я не понимаю ка кмне определить из этой строки скобки

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

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

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

...

if S[i] in chrBrackets then ...