Страница: 1 |
|
Вопрос: Помогите - сортировка методом пузырька VBasi
|
Добавлено: 20.12.08 23:35
|
|
Автор вопроса: #Nii
|
Вот мне надо сделать, сортировку методом пузырька в Delphi или Visual Basic. И чтоб данные брались из файла, и записывались в другой файл.
Исходник
001:
002:
003:
004:
005:
006:
007:
008:
009:
010:
011:
012:
013:
014:
015:
016:
017:
018:
019:
020:
021:
022:
023:
024:
025:
026:
027:
028:
029:
030:
031:
032:
033:
034:
035:
036:
037:
038:
039:
040:
041:
042:
043:
044:
045:
046:
047:
048:
049:
050:
051:
052:
053:
054:
055:
056:
057:
058:
059:
060:
061:
062:
063:
064:
065:
066:
067:
068: 'На форме одна кнопка. Подключаем в референсах библиотеку Microsoft Scripting Runtime
'Допустим что входной файл престаляет собой строку вида 3,22,66,44,88,,23,97,345,321
Private Sub Command1_Click()
Dim MyArrStr() As String
Dim MyArr() As Long
Dim sStr As String
Dim i As Long
'Читаем из файла
sStr = MyRead("in.txt")
'Получаем массив строк
MyArrStr = Split(sStr, ",")
i = 0
ReDim MyArr(i)
'Преобразуем в массив Long
For i = LBound(MyArrStr) To UBound(MyArrStr)
ReDim Preserve MyArr(i)
MyArr(i) = CLng(MyArrStr(i))
Next i
'Сортируем
Call Sort(MyArr)
'Собираем строку (чтоб вид бил как у входного файла)
sStr = ""
For i = LBound(MyArr) To UBound(MyArr)
MyArrStr(i) = CStr(MyArr(i))
sStr = sStr & MyArrStr(i)
If i <> UBound(MyArr) Then sStr = sStr & ","
Next i
'Записываем файл
Call MyWrite(sStr, "out.txt")
End Sub
Private Sub Sort(Mus() As Long)
Dim n As Long, i As Long, j As Long, tmp As Long
i = 0 'немного подправил, чтоб начинало с 0
Do While i < UBound(Mus)
If Mus(i) > Mus(i + 1) Then
tmp = Mus(i)
Mus(i) = Mus(i + 1)
Mus(i + 1) = tmp
If i > 1 Then
i = i - 1
Else
i = i + 1
End If
Else
i = i + 1
End If
Loop
End Sub
'Процедура записи, используется FSO
Private Sub MyWrite(MyStr As String, outFile As String)
Dim fsoSave As New FileSystemObject
Dim filSave As TextStream
Set filSave = fsoSave.CreateTextFile(App.Path & "\" & outFile, True)
filSave.WriteLine (MyStr)
filSave.Close
End Sub
'Процедура чтения, используется FSO
Private Function MyRead(inFile As String) As String
Dim fsoSave As New FileSystemObject
Dim filSave As TextStream
Set filSave = fsoSave.OpenTextFile(App.Path & "\" & inFile)
MyRead = filSave.ReadLine
filSave.Close
End Function
только он у меня не запускается, как образом не пойму
И еще незнаю как сделать загрузить исходные данные из файла в окно (text или label)в программе чтоб значения показывались сначала в окне, потом нажимаешь на кнопку полученные данные переходят в другое окно, а потом нажав кнопку сохранить все в файл?
Ответить
|
Номер ответа: 2 Автор ответа:
Вопросов: 5 Ответов: 79
|
Профиль | | #2
|
Добавлено: 21.12.08 00:35
|
Хм, обработал я твой код. Я повыкидывал и Scripting Runtime и FSO - если надо сделаешь сам
Вот этот код стабилен:-
-
- Private Sub Command1_Click()
- Dim MyArrStr() As String
- Dim MyArr() As Long
- Dim sStr As String
- Dim i As Long
-
-
- sStr = MyRead("in.txt")
- Text1 = sStr
-
- MyArrStr = Split(sStr, ",")
- i = 0
- ReDim MyArr(i)
-
- For i = 0 To UBound(MyArrStr)
- ReDim Preserve MyArr(i)
- MyArr(i) = Val(MyArrStr(i))
- Next i
-
- Sort MyArr
-
- sStr = ""
- For i = LBound(MyArr) To UBound(MyArr)
- MyArrStr(i) = CStr(MyArr(i))
- sStr = sStr & MyArrStr(i)
- If i <> UBound(MyArr) Then sStr = sStr & ","
- Next i
- Text2 = sStr
-
- MyWrite sStr, "out.txt"
- End Sub
-
- Private Sub Sort(Mus() As Long)
- Dim n As Long, i As Long, j As Long, tmp As Long, f As Boolean
- Do While Not f
- f = True
- For i = 0 To UBound(Mus) - 1
- If Mus(i) > Mus(i + 1) Then
- tmp = Mus(i)
- Mus(i) = Mus(i + 1)
- Mus(i + 1) = tmp
- f = False
- End If
- Next i
- Loop
- End Sub
-
- Private Sub MyWrite(MyStr As String, outFile As String)
- Open app.Path + "\" + outFile For Output As #1
- Print #1, MyStr
- Close #1
- End Sub
-
- Private Function MyRead(inFile As String) As String
- Open app.Path + "\" + inFile For Input As #1
- Line Input #1, MyRead
- Close #1
- End Function
Ответить
|
Страница: 1 |
Поиск по форуму