Стандартный алгоритм.

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Mr_MIX
Начинающий
Начинающий
 
Сообщения: 1
Зарегистрирован: 06.01.2005 (Чт) 23:15

Стандартный алгоритм.

Сообщение Mr_MIX » 06.01.2005 (Чт) 23:18

Помогите пожалуйста написать прогу: есть слово из менее чем 10 разных букв, нужно найти все слова, которые можно получить перестановками букв в этом слове.
Зрарание спасибо, Mr. MIX.

Шнурок
Постоялец
Постоялец
 
Сообщения: 371
Зарегистрирован: 12.11.2004 (Пт) 19:28
Откуда: Санкт-Петербург

Сообщение Шнурок » 06.01.2005 (Чт) 23:35

анриал :?
02.01.2004

_Мика_
Гуру
Гуру
 
Сообщения: 1459
Зарегистрирован: 24.10.2003 (Пт) 15:05
Откуда: г. Москва, м.Речной вокзал

Сообщение _Мика_ » 06.01.2005 (Чт) 23:45

Ну посему же сразу Анреал! :twisted: :P

Надо во превых базу данных со всеми словами иметь :shock: :lol:
Потом каким-то образом искать по буквам в базе данных слов, ну короче это сложно!



Да, анреал :oops: :!: :D
-Папа, а правда, что форумы делают людей дибилами?
-гы гы гы, сынок, лол!

Шнурок
Постоялец
Постоялец
 
Сообщения: 371
Зарегистрирован: 12.11.2004 (Пт) 19:28
Откуда: Санкт-Петербург

Сообщение Шнурок » 06.01.2005 (Чт) 23:54

да...база данных со всеми словами...звучит забавно :)

:idea: забавней всего сделать еще вторую версию программы...так сказать english edition

Может человек вирус делает...хочет что бы комп повис :shock:
02.01.2004

Eugenio
Постоялец
Постоялец
 
Сообщения: 393
Зарегистрирован: 08.05.2004 (Сб) 13:27
Откуда: Ekaterinburg

Сообщение Eugenio » 07.01.2005 (Пт) 22:05

:) Человек, кстати, не сказал, что все слова должны что-то значить :)
Прогу, которая просто покажет все варианты расстановки символов, я очень просто могу представить :D
А если серьезно - можно, в принципе, функционал Word'а, который для проверки орфографии, заюзать..
Или (это уже опять смех)! Словари Lingvo! Чтобы прога возмущалась:
прога писал(а):"ABYY Lingvo не установлен или установлен некорректно!"
Есть ли у меня вопрос? У меня всегда есть вопрос

Шнурок
Постоялец
Постоялец
 
Сообщения: 371
Зарегистрирован: 12.11.2004 (Пт) 19:28
Откуда: Санкт-Петербург

Сообщение Шнурок » 07.01.2005 (Пт) 22:40

...я уже думал над чужой базой данных :wink:
Может ее из лингво скомуниздить можно?
И таскать вместе с прогой :roll:
02.01.2004

skord
Китаец
Китаец
 
Сообщения: 572
Зарегистрирован: 14.10.2004 (Чт) 15:36
Откуда: Иркутск

Сообщение skord » 08.01.2005 (Сб) 12:19

А я когда то хотел такое-же написать. Вот только не нашел я тогда нормальной базы. У меня это должен был быть просто тектсовый файл с записаными через строчку словами. Вот токо исходник мой найти это правда анриал - потерял...
базу могу дать

Eugenio
Постоялец
Постоялец
 
Сообщения: 393
Зарегистрирован: 08.05.2004 (Сб) 13:27
Откуда: Ekaterinburg

Сообщение Eugenio » 08.01.2005 (Сб) 12:46

Шнурок писал(а):...я уже думал над чужой базой данных :wink:
Может ее из лингво скомуниздить можно?
И таскать вместе с прогой :roll:

Теоретически, можно - там же есть редактор словарей. Поизменять словари, посмотреть, что меняется - выяснить формат записи в эти файлы. И читать их потом прогой - локализацией прог заниматься не понадобится: нашел в словаре что надо и всё :lol:
Но ближе нам word'овский spellchecker, наверное. Word поддерживает automation :)
Есть ли у меня вопрос? У меня всегда есть вопрос

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 08.01.2005 (Сб) 13:23

Думается мне, под термином "слово" понимается простая перестановка букв, и задача сводится к получению всех перестановок...
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

ALX_2002
Мега гуру
Мега гуру
 
Сообщения: 2056
Зарегистрирован: 25.11.2002 (Пн) 20:03

Сообщение ALX_2002 » 08.01.2005 (Сб) 13:29

Вот... Я тут наваял простенький пример.... Мож подойдёт

Dim MainWord As String
Dim TestWords(6) As String
Function Test(byval W1 As String, W2 As String)
Dim char
For N = 1 To Len(W2)
char = Mid(W2, N, 1)
If InStr(1, W1, char) <> 0 Then
W1 = Replace(W1, char, "", 1, 1)
Else
Test = "Нельзя составить"
Exit Function
End If
Next
Test = "Можно составить"
End Function

Private Sub Form_Click()
Me.Cls
MainWord = "фыывооо"
TestWords(0) = "оооо"
TestWords(1) = "зубр"
TestWords(2) = "зебра"
TestWords(3) = "ар"
TestWords(4) = "бар"
TestWords(5) = "роб"
TestWords(6) = "раб"

Print "из слова " & MainWord & vbCrLf

For N = 0 To UBound(TestWords)
Print Test(MainWord, TestWords(N)) & " " & TestWords(N)
Next
End Sub
Последний раз редактировалось ALX_2002 09.01.2005 (Вс) 0:53, всего редактировалось 2 раз(а).

ALX_2002
Мега гуру
Мега гуру
 
Сообщения: 2056
Зарегистрирован: 25.11.2002 (Пн) 20:03

Сообщение ALX_2002 » 08.01.2005 (Сб) 15:27

Во. Баги исправил. :) Пашет.

ALX_2002
Мега гуру
Мега гуру
 
Сообщения: 2056
Зарегистрирован: 25.11.2002 (Пн) 20:03

Сообщение ALX_2002 » 08.01.2005 (Сб) 21:09

Mr_Mix, так пошёл алгоритм или нет ? Или тебе что то дургое нужно ?
:(

VOS
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 72
Зарегистрирован: 04.11.2004 (Чт) 18:01
Откуда: СПб

Сообщение VOS » 08.01.2005 (Сб) 21:54

Не совсем верный код, ALX_2002!
В месте
Function Test(W1 As String, W2 As String)
надо
Function Test(ByVal W1 As String, W2 As String)
Ведь ты изменяешь W1 в процессе выполнения!
- Папа, а правда, что форумы делают человека идиотом?
- Гыыы, лол, сынок!

A.A.Z.
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3035
Зарегистрирован: 30.06.2003 (Пн) 13:38

Сообщение A.A.Z. » 08.01.2005 (Сб) 23:49

Наоборот, когда пишешь ByVal, то в функцию передается только значение переменной (By Value) :)

VOS
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 72
Зарегистрирован: 04.11.2004 (Чт) 18:01
Откуда: СПб

Сообщение VOS » 08.01.2005 (Сб) 23:55

Дык ты попробуй сам запусти свой пример из
http://bbs.vbstreets.ru/viewtopic.php?p=83883#83883
подставь например в первый "фыво" и в последний "фыво" - пропрет только с первым! Почему? Изменяем переменные ByRef, хех...
- Папа, а правда, что форумы делают человека идиотом?
- Гыыы, лол, сынок!

A.A.Z.
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3035
Зарегистрирован: 30.06.2003 (Пн) 13:38

Сообщение A.A.Z. » 09.01.2005 (Вс) 0:03

В функциях и процедурах "ничего" = "ByRef", так что не хех :ncool:
И, тем более, все работает. Так что вдвойне не хех :ncool: :ncool: ;)

VOS
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 72
Зарегистрирован: 04.11.2004 (Чт) 18:01
Откуда: СПб

Сообщение VOS » 09.01.2005 (Вс) 0:12

У меня VB6 Pro SP5
Итак, вот код:

Dim MainWord As String
Dim TestWords(6) As String
Function Test(W1 As String, W2 As String)
Dim char
For N = 1 To Len(W2)
char = Mid(W2, N, 1)
If InStr(1, W1, char) <> 0 Then
W1 = Replace(W1, char, "", 1, 1)
Else
Test = "Нельзя составить"
Exit Function
End If
Next
Test = "Можно составить"
End Function

Private Sub Form_Click()
Me.Cls
MainWord = "фыывооо"
TestWords(0) = "фыво"
TestWords(1) = "зубр"
TestWords(2) = "зебра"
TestWords(3) = "ар"
TestWords(4) = "бар"
TestWords(5) = "роб"
TestWords(6) = "фыво"

Print "из слова " & MainWord & vbCrLf

For N = 0 To UBound(TestWords)
Print Test(MainWord, TestWords(N)) & " " & TestWords(N)
Next
End Sub


Итак, вот вывод:
из слова фыывооо
Можно составить фыво
Нельзя составить зубр
Нельзя составить зебра
Нельзя составить ар
Нельзя составить бар
Нельзя составить роб
Нельзя составить фыво <= :!:

Или это глюк моего VB? :o
- Папа, а правда, что форумы делают человека идиотом?
- Гыыы, лол, сынок!

A.A.Z.
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3035
Зарегистрирован: 30.06.2003 (Пн) 13:38

Сообщение A.A.Z. » 09.01.2005 (Вс) 0:25

Прости, я забыл, я чуть-чуть менял код :oops:
Код: Выделить всё
Option Explicit

Dim MainWord As String
Dim TestWords(6) As String
Function Test(W1 As String, W2 As String)
Dim char, N&, S$
S = W1
For N = 1 To Len(W2)
char = Mid(W2, N, 1)
If InStr(1, S, char) <> 0 Then
S = Replace(S, char, "", 1, 1)
Else
Test = "Я идиот! Убейте меня, кто-нибудь!? Я идиот! Убейте меня, кто-нибудь!????"
Exit Function
End If
Next
Test = "Я идиот! Убейте меня, кто-нибудь! Я идиот! Убейте меня, кто-нибудь!????"
End Function

Private Sub Form_Click()
Dim N&
Me.Cls
MainWord = "Я идиот! Убейте меня, кто-нибудь!??"
TestWords(0) = "????"
TestWords(1) = "????"
TestWords(2) = "Я идиот! Убейте меня, кто-нибудь!"
TestWords(3) = "??"
TestWords(4) = "???"
TestWords(5) = "???"
TestWords(6) = "????"

Print "?? Я идиот! Убейте меня, кто-нибудь! " & MainWord & vbCrLf

For N = 0 To UBound(TestWords)
Text1.Text = Text1.Text & Test(MainWord, TestWords(N)) & " " & TestWords(N) & vbCrLf
Next
End Sub
В фунции Test добавил переменную S и в начале присваивал ей W1: функция его изменяла, но не возвращала обратно :?

ALX_2002
Мега гуру
Мега гуру
 
Сообщения: 2056
Зарегистрирован: 25.11.2002 (Пн) 20:03

Сообщение ALX_2002 » 09.01.2005 (Вс) 0:52

2 VOS: Пасиба. Реал я проглючил :)

Хе... Ну главное пашет :) :idea:


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 25

    TopList