Вопрос № 100914: Народ! Помогите, плиизз, Задание. Расстояние между двумя словами равной длины—это количество позиций, в которых различаются эти слова. В заданном предложении найти пару наиболее далеко удаленных слов заданной длины.
Хотябы сам принцип!...
Вопрос № 100.914
Народ! Помогите, плиизз, Задание. Расстояние между двумя словами равной длины—это количество позиций, в которых различаются эти слова. В заданном предложении найти пару наиболее далеко удаленных слов заданной длины.
Отвечает: Rud Alexey Yruievich
Здравствуйте, Кайманаков Дмитрий Евгеньевич!
Если я правильно понял постановку задачи, то нам достаточно разбить фразу на слова, после чего выделить все слова нужной длины и поместить их в масив строковых переменных. Можно также при формировании массива устроить проверку слова на уникальность (т.е нет ли уже в массиве идентичного ему слова). В сформированом масиве слов сравнивать посимвольно каждое слово со всеми стоящими после него (с предыдущими уже не имеет смысла - с ними сравнивались раньше). Если у нас символы в словах не совпадают - увеличиваем
некий счетчик на единицу. В конце сравнения двух слов сравниваем значение счетчика с предыдущим. Если оно больше - запоминаем новое значение и номера сравниваемых слов.
В конце получаем максимальное расстояние между словами и номера искомых слов в масиве. Все просто.
Если что-то осталось непонятным - пишите, разъясню
Ответ отправил: Rud Alexey Yruievich (статус: 2-ой класс)
Ответ отправлен: 05.09.2007, 14:17 Оценка за ответ: 4 Комментарий оценки: Спасибо. Попробую разобраться.
Отвечает: Черников Игорь Владимирович
Здравствуйте, Кайманаков Дмитрий Евгеньевич!
Создайте Документ Microsoft Word.doc, вставьте в него любой текст, создайте макрос, вставте в макрос этот код и запустите его. Удачи!
Sub Макрос1()
Dim НомерПредложения As Integer
Dim символ As String
Dim ТекущийСимвол As Double
Dim предложение As String
Dim ПервоеСловоНайдено As Boolean
Dim ВтороеСловоНайдено As Boolean
НомерПредложения = InputBox("Введите номер предложения, в котором нужно искать", "Ввод данных")
КолличествоБуквВСлове = InputBox("Введите количество букв в словах", "Ввод данных")
Selection.EndKey Unit:=wdStory
Selection.TypeText Text:=Chr(182)
Selection.HomeKey Unit:=wdStory
Начало_предложения = 1
Конец_предложения = 1
Do
символ = ActiveDocument.Range(Start:=Selection.End, End:=Selection.End + 1)
ТекущийСимвол = ТекущийСимвол + 1
If символ = "." Then
Начало_предложения = Конец_предложения
Конец_предложения = ТекущийСимвол
ПорядковыйНомерПредложения = ПорядковыйНомерПредложения + 1
End If
If НомерПредложения = ПорядковыйНомерПредложения Then
предложение = ActiveDocument.Range(Start:=Начало_предложения, End:=Конец_предложения)
For i = 1 To Len(предложение)
символ = Mid(предложение, i, 1)
If символ = " " Or символ = "," Or символ = Chr(10) Or символ = Chr(13) Then
If CInt(КолличествоБуквВСлове) = Len(слово) And ПервоеСловоНайдено = False Then
ПервоеСловоНайдено = True
ПервоеСлово = слово
НомерСимволаПослеПервогоСлова = i
GoTo 10
End If
If Len(слово) = CInt(КолличествоБуквВСлове) And ПервоеСловоНайдено = True Then
ВтороеСловоНайдено = True
ВтороеСлово = слово
НомерСимволаПередВторымСловом = i - Len(слово) - 1
End If
10 слово = ""
Else
слово = слово + символ
End If
Next i
If ПервоеСловоНайдено = False Then
MsgBox ("В этом предложении не найдено слов с таким количеством символов")
GoTo 11
End If
If ПервоеСловоНайдено = True And ВтороеСловоНайдено = False Then
MsgBox ("В этом предложении найдено только одно слово с таким количеством символов")
GoTo 11
End If
If ПервоеСловоНайдено = True And ВтороеСловоНайдено = True Then
MsgBox ("Первое слово - " + ПервоеСлово + ", второе слово - " + ВтороеСлово + "." + Chr(10) + _
"Расстояние между ними - " + CStr(НомерСимволаПередВторымСловом - НомерСимволаПослеПервогоСлова) + " символа.")
GoTo 11
End If
Stop
End If
Selection.MoveRight Unit:=wdCharacter, Count:=1
Loop While Not символ = Chr(182)
11 Selection.EndKey Unit:=wdStory
Selection.MoveLeft Unit:=wdCharacter, Count:=1
Selection.Delete
End Sub
--------- От каждого по способностям, каждому по труду