
![]() |
Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
|
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[216.73.216.21] |
![]() |
|
Сообщ.
#1
,
|
|
|
Из заданного предложения распечатать все слова, длина которых больше пяти символов!
|
Сообщ.
#2
,
|
|
|
Несложно, но муторно
![]() Если учесть, что исходная строка читается с клавиатуры, то ![]() ![]() Program zadacha; Const Syms = [';','.',',',' ',':','-']; Var Source, Temp : String ; I : Byte ; Done : Boolean ; Begin Write('Enter string: '); ReadLn(Source); Done := False; I := 1; Temp := ''; Repeat While (Not (Source[I] in Syms)) And (I<=Length(Source)) Do Begin Temp := Temp + Source[I]; Inc(I); End; If I = Length(Source) Done := True; If Length(Temp) > 5 Then WriteLn(Temp); Temp := ''; Until Done; End. Хм, не так муторно, как думал ![]() Проверяйте, мож где ошибся. |
Сообщ.
#3
,
|
|
|
Цитата Eiden, 4.02.04, 01:13 If I = Length(Source) Done := True; Then забыл ![]() Цитата Eiden, 4.02.04, 01:13 While (Not (Source[I] in Syms)) And Имхо лучше проверять на ['A'..'Z','a'..'z'] и без not. А вдруг там есть длинное число, скажем 100000? Тогда оно выведется. Вроде все. |
Сообщ.
#4
,
|
|
|
Цитата Then забыл Неудивительно, я теперь только на C++ кодю ![]() Цитата Имхо лучше проверять на ['A'..'Z','a'..'z'] и без not. А вдруг там есть длинное число, скажем 100000? Тогда оно выведется. Да, согласен. Но тогда уж и на 'А'..'Я','а'..'п','р'..'я'. В итоге в коде исправляем две строчки: ![]() ![]() Syms = ['A'..'Z','a'..'z','А'..'Я','а'..'п','р'..'я'] ![]() ![]() While (Source[I] in Syms) And (I <= Length(Source)) Do Ну про тот Then не забыть ![]() |
Сообщ.
#5
,
|
|
|
Скажите а каким образом предложение разбито не слова??
|
Сообщ.
#6
,
|
|
|
Оно разбито на слова. Слово - последовательность символом русского или латинского алфавита.
|
Сообщ.
#7
,
|
|
|
Хорошо, а что тогда является разделителeм для слов!??
|
Сообщ.
#8
,
|
|
|
А как обычно:
Мы смотрим в строке символы. Если текущий символ - буква слова, то начинаем искать все последующие буквы, пока они не кончатся, и очередная, которую мы проверим не станет "небуквой". Тогда слово кончилось. Мы выясним его длину, и если она подходит условию, то увеличим специальный счётчик, который считает такие слова. Ну а дальше опять проверяем все символы что идут далее. Если мы находим один из символов, который буква, то повторяем всё заново. Добавлено в : Разделителем для слов является набор символов - разделителей. В нашем примере это переменная паскаля, типа set - тоесть набор символов. В ней заключён набор разделителей вроде точки. Пробела, запятой. Посмотри в тексте программы. Так вот в процессе проверки мы сравниваем каждый символ с этим набором. Если он находится в этом наборе то делаем одни действия, если нет, то другие (Читай выше). |
Сообщ.
#9
,
|
|
|
Temp:='' ----Непонятно что присваивается??
Программу почему то циклит, можете кто-то показать хоть пример как надо вводить предложение!!! Может быть я не так ввожу!!!!!!?? ![]() |
Сообщ.
#10
,
|
|
|
Ну вот. Точно работает. Только принцип немного другой - проверяем с конца строки к началу. Что вобщем-то одно и то-же:
![]() ![]() const prepen=[';',':','!','?',',','.',' ','"','-']; var s:string; p,o:byte; begin write('Введите предложение: '); readln(s); p:=length(s); repeat if s[p] in prepen then dec(p) else begin o:=p; while (p>0) and not (s[p] in prepen) do dec(p); if o-p=5 then writeln(copy(s,p+1,5)); end; until p=0; end. |
Сообщ.
#11
,
|
|
|
Покажите пожалуйста в данной программе пример ввода предложения!!
|
Сообщ.
#12
,
|
|
|
Цитата Temp:='' ----Непонятно что присваивается?? присваивается пустая строка, то есть ничего. Переменная типа String (строка) как бы обнуляется. Как программу циклит? |
Сообщ.
#13
,
|
|
|
кстати, программу циклит из-за того, что i не увеличивается, если мы вышли из цикла по "не-символу". То есть строчку
Цитата Eiden, 4.02.04, 01:13 If I = Length(Source) Done := True; надо заменить на ![]() ![]() If I = Length(Source) Then Done := True Else Inc(I); ЗЫ: Опять Then пропустил. Ну это не страшно. |
Сообщ.
#14
,
|
|
|
Цитата кстати, программу циклит из-за того, что i не увеличивается, если мы вышли из цикла по "не-символу". Угу, точно, спасибо! Просто привык такие вещи через цикл с постусловием делать (там i точно увеличивается), а тут что-то не подумал. ![]() |
Сообщ.
#15
,
|
|
|
Всем спасибо за помощь!!!!
![]() |