![]() |
1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения.
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!
![]() ![]() |
![]() |
MapЫшKa |
![]() ![]()
Сообщение
#1
|
Новичок ![]() Группа: Пользователи Сообщений: 16 Пол: Женский Репутация: ![]() ![]() ![]() |
И снова я, о, боги Паскаля. :molitva:
Сиду я тут и со своей женской логикой не могу врубиться в мужскую, а точнее в программистическую. Дано: произвольная строка Требуется: 1) проверить строку на наличие "{" и "}" символы заключенные между { и } удалить вместе со скобками 2) определить сколько различных русских букв содержит строка ( я ваще тут пас, говорят функция какая то есть специальная) 3) найти самое длинное слово в строке. вот такая беда. Все бы было просто, вот тока вариантов строки моря, например: vo sudu li v ogorode {v doline{na polane{v sadu?} ili za zana}ves}koj} hodat nes4astnie programmisti сама придумала сама ее разобрать не могу, то ли надо удалять {v doline{na polane{v sadu?} ili za zana}ves}koj} или {v doline{na polane{v sadu?} ili za zana}ves} или {v doline{na polane{v sadu?} эх ну и назадают задачек.... |
Altair |
![]()
Сообщение
#2
|
![]() Ищущий истину ![]() ![]() ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 4 825 Пол: Мужской Реальное имя: Олег Репутация: ![]() ![]() ![]() |
Цитата со своей женской логикой да что бы мы без вас делали, о прекрасные дамы! :molitva: :rose: Цитата проверить строку на наличие "{" и "}" символы заключенные между { и } удалить вместе со скобками Код var i:byte; s:string; begin readln(s); If (Pos('{',s)<>0) and (Pos('}',s)<>0) then begin delete(s,pos('{',s),pos('}',s)-pos('{',s)+1); end; writeln(s); end. -------------------- Помогая друг другу, мы справимся с любыми трудностями!
"Не опускать крылья!" (С) |
volvo |
![]()
Сообщение
#3
|
Гость ![]() |
MapЫшKa
Можно еще воспользоваться поиском по форуму, я где-то выкладывал программу для удаления комментариев из программы, написанной на Паскале (похоже на удаление текста из {}, правда?) Вот она Сообщение отредактировано: volvo - |
MapЫшKa |
![]()
Сообщение
#4
|
Новичок ![]() Группа: Пользователи Сообщений: 16 Пол: Женский Репутация: ![]() ![]() ![]() |
Oleg_Z
спасибки тебе огромное, чмооок! но вот тока я че то не допоняла что значит Pos('{',s)<>0 это проверяет наличие { то есть есть она или нет? тоесть функция - pos выдает номер символа начала подстроки? ЗЫ: ну как же я сама не додумалась ЗЫЫ с русскими буквами ваще лол, не знала я что мож создать такоя массив rus:array ['А'..'Я'] of word |
MapЫшKa |
![]()
Сообщение
#5
|
Новичок ![]() Группа: Пользователи Сообщений: 16 Пол: Женский Репутация: ![]() ![]() ![]() |
volvo
спасибки , вот тока алгоритм похож на тот который Олег написал. А ваще я по форуму искала такое не нашла. Может просто не то в поиск вводила. Спасибки огромное! |
Altair |
![]()
Сообщение
#6
|
![]() Ищущий истину ![]() ![]() ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 4 825 Пол: Мужской Реальное имя: Олег Репутация: ![]() ![]() ![]() |
MapЫшKa
![]() Pos('{',s) - вернет номер в строке в котором содержится элемент { если ноль значит такого символа нет в строке. -------------------- Помогая друг другу, мы справимся с любыми трудностями!
"Не опускать крылья!" (С) |
Altair |
![]()
Сообщение
#7
|
![]() Ищущий истину ![]() ![]() ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 4 825 Пол: Мужской Реальное имя: Олег Репутация: ![]() ![]() ![]() |
Цитата определить сколько различных русских букв содержит строка Думаю вот красивое решение на Паскале... Код var ZRus:set of char; PRus:set of char; a:set of char; s:string; i,k:byte; begin zRus:=['А'..'Я']; pRus:=['а'..'я']; readln(s); for i:=1 to length(s) do If ((s[i] in ZRus) or (s[i] in PRus)) and NOT (s[i] in a) then begin inc(k); INCLUDE(a,s[i]) end; writeln(k); end. и 3 задача - найти слово макс. длинны. Код const r=' '; {разделитель междду словами (пробел)} var s:string; subs:string; max:string; i:byte; begin readln(s); {удалим лишние разделители} while s[1]=r do delete(s,1,1); for i:=1 to ORD(s[0]) do if (s[i]=r) and (s[succ(i)]=r) then begin while s[succ(i)]=r do delete(s,succ(i),1) end; while pos(r,s)<>0 do begin subs:=copy(s,1,pos(r,s)); delete(s,1,pos(r,s)); If length(subs)>length(max) then max:=subs; end; writeln(max); end. -------------------- Помогая друг другу, мы справимся с любыми трудностями!
"Не опускать крылья!" (С) |
MapЫшKa |
![]()
Сообщение
#8
|
Новичок ![]() Группа: Пользователи Сообщений: 16 Пол: Женский Репутация: ![]() ![]() ![]() |
Oleg_Z
вот так бы и расцеловала а я тут сиду с циклами мучаюсь правдами и неправдами решение нахажу. Солнце, было бы замечательно если ты мне маленькую лекцию про пару функций рассказал: If ((s[i] in ZRus) or (s[i] in PRus)) and NOT (s[i] in a) then begin inc(k); INCLUDE(a,s[i]) end; : s[i] in zRus - ето что такое INCLUDE (a,s[i]) ????? ORD(s[0]) ???? нуц лузер я что тут поделаешь.... |
MapЫшKa |
![]()
Сообщение
#9
|
Новичок ![]() Группа: Пользователи Сообщений: 16 Пол: Женский Репутация: ![]() ![]() ![]() |
а ваще :molitva: :molitva: :molitva: Oleg_Z :flowers:
и для volvo :flowers: великие боги паскаля! :molitva: |
volvo |
![]()
Сообщение
#10
|
Гость ![]() |
MapЫшKa
А можно я вместо Oleg_Z ? :D Смотри, что делается... Здесь: s[i] in zRus - в программе zRus описано как множество символов, т.е. тип переменной, который может хранить только символы (причем только по одному каждого вида, т.е. в множестве может храниться ['a', 'б', 'г'], но не может ['a', 'a', 'a'] - потому что одинаковые значения как бы "накладываются" одно на другое...). Так вот для множеств есть специальная операция In, которая проверяет есть ли элемент указанный справа от нее во множестве указанном слева... То есть та строчка просто проверяет, есть ли уже во множестве zRus очередной символ строки (s[i])... Здесь: INCLUDE (a,s[i]) - это как раз та самая процедура, которая добавляет значение в множество, т.е. здесь символ s[i] добавляется ко множеству A. Здесь: ORD(s[0]) - это любимый трюк ОлегаZ, который заменяет функцию Length(s)... Просто длина строки хранится в ее нулевом символе, и этим Oleg_Z пользуется.... ![]() А вообще, если хочешь больше узнать о множествах, прочитай здесь - все описано... Сообщение отредактировано: volvo - |
MapЫшKa |
![]()
Сообщение
#11
|
Новичок ![]() Группа: Пользователи Сообщений: 16 Пол: Женский Репутация: ![]() ![]() ![]() |
Oleg_Z
че то перемудрил с разнообразностью русских символов он постоянно говорит нуль.. а как я поняла нада либо все символы вывести без повторов, либо количство этих разных символов. |
MapЫшKa |
![]()
Сообщение
#12
|
Новичок ![]() Группа: Пользователи Сообщений: 16 Пол: Женский Репутация: ![]() ![]() ![]() |
volvo
спасибо дорогой! и ето все паскаль... жесть. Ужас. Ужасные задачки. А все решать и решать нада... Эх. Пойду дальше разберать и переделывать и баги искать. |
MapЫшKa |
![]()
Сообщение
#13
|
Новичок ![]() Группа: Пользователи Сообщений: 16 Пол: Женский Репутация: ![]() ![]() ![]() |
и еще баг в подсчете длинного слова... жесть надо сидеть, попробовать все через циклы и обычные функции провернуть длинно за то просто
|
volvo |
![]()
Сообщение
#14
|
Гость ![]() |
MapЫшKa
Я не знаю, какую строку ты вводишь, но у меня и первая и вторая программа ОлегаZ отработали без проблем... |
MapЫшKa |
![]()
Сообщение
#15
|
Новичок ![]() Группа: Пользователи Сообщений: 16 Пол: Женский Репутация: ![]() ![]() ![]() |
введи например:
сказочка была хорошая была хорошая сказочка в первом случае он выдаст тебе сказочка а во втором хорошая м? а с длинной у меня почему то всегда 0 |
volvo |
![]()
Сообщение
#16
|
Гость ![]() |
MapЫшKa
Не принимается... Ты вводишь латинскими буквами, правда? ![]() То же самое и с длинной - в программе Oleg_Z символы сравниваются с Кириллицей а ты вводишь Латинские буквы... Я угадал? |
MapЫшKa |
![]()
Сообщение
#17
|
Новичок ![]() Группа: Пользователи Сообщений: 16 Пол: Женский Репутация: ![]() ![]() ![]() |
нет! =))) я ввожу русскими! попробуй сам.
а с длинной симоволов я разобралась,я в одном месте не правильно заменила переменную. -) но вот длиннное слово. ето еще тот фрукт. |
volvo |
![]()
Сообщение
#18
|
Гость ![]() |
MapЫшKa
Я понимаю, что алгоритм очень похож, но попробуй вот эту программу для самого длинного слова. (это немного переработанная функция из ФАКа, которая разбивала текст на слова). Единственный недостаток (его впрочем легко исправить) - это то, что исходная строка уничтожается... Код Var s, max, st: String; p: Byte; begin ReadLn(s); Repeat p := Pos(' ', s); If p > 0 Then Delete(s, p, 1) Until p = 0; If s[1] = ' ' Then Delete(s, 1, 1); If s[Length(s)] = ' ' Then Delete(s, Length(s), 1); max := ''; Repeat p := Pos(' ', s); {Inc(i);} If p > 0 Then Begin st := Copy(s, 1, Pred(p)); Delete(s, 1, p) End Else st := s; If Length(max) < Length(st) Then max := st Until p = 0; WriteLn(max); end. |
Altair |
![]()
Сообщение
#19
|
![]() Ищущий истину ![]() ![]() ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 4 825 Пол: Мужской Реальное имя: Олег Репутация: ![]() ![]() ![]() |
Цитата Здесь: ORD(s[0]) - это любимый трюк ОлегаZ точно ![]() Цитата че то перемудрил с разнообразностью русских символов он постоянно говорит нуль.. нееет, я все проверил парежде чем выложить. Проверял в BP7 -------------------- Помогая друг другу, мы справимся с любыми трудностями!
"Не опускать крылья!" (С) |
Altair |
![]()
Сообщение
#20
|
![]() Ищущий истину ![]() ![]() ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 4 825 Пол: Мужской Реальное имя: Олег Репутация: ![]() ![]() ![]() |
Цитата введи например: сказочка была хорошая была хорошая сказочка в первом случае он выдаст тебе сказочка а во втором хорошая оЙ!!!!!! глюк следующий: если самое последнее слово последнее, то она не учитывается. а все из-за этого: Код while pos(r,s)<>0 do простое решение пробелммы - примисать разделитель в конец строки, что бы не пришлось переделывать алгоритм. вот так все работает: Код const r=' '; {разделитель междду словами (пробел)} var s:string; subs:string; max:string; i:byte; begin readln(s); {удалим лишние разделители} while s[1]=r do delete(s,1,1); for i:=1 to ORD(s[0]) do if (s[i]=r) and (s[succ(i)]=r) then begin while s[succ(i)]=r do delete(s,succ(i),1) end; s:=s+r; {!!!!!!!!!!} while pos(r,s)<>0 do begin subs:=copy(s,1,pos(r,s)); delete(s,1,pos(r,s)); If length(subs)>length(max) then max:=subs; end; writeln(max); end. да, есчтиь замечание по первой задаче... вот пример строки: fgfg{fgfghf{fgfgfg}dgffg}fgfg здесь скорее всего надо удалить часть строки между первым { и последним } тогда для посика } надо использовать не POS (т.к. она ищет первое вхождение) а написать функцию для поиска последнего вхождения. MapЫшKa, переделать? ![]() Сообщение отредактировано: Oleg_Z - -------------------- Помогая друг другу, мы справимся с любыми трудностями!
"Не опускать крылья!" (С) |
![]() ![]() |
![]() |
Текстовая версия | 19.02.2025 16:16 |