Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > VB6 > Сортировка текста специальным образом


Автор: Viton 25.10.2005, 19:19
немогу разобраться в цикле чтобы получилось при выполнение этого кода не Р369
а 258Р369Р1470


Код

Sum = "1470258P369P"
int2 = Len("321")
txt2 = "321"
hir = Len(Sum)
oy = hir \ int2
For n = 1 To int2

For k = 1 To int2
kl = CInt(Mid(txt2, k, 1))
If n = kl Then
kodtxt = kodtxt & Mid(Sum, ox, oy)
Print kodtxt
End If
ox = ox + oy
Next k

Next n


Автор: Akina 25.10.2005, 19:47
Совершенно непонятна задача. Код тоже ничего не проясняет.

Автор: Viton 25.10.2005, 20:02
э последний этап кода
поставили задачю написать шифрование методом перестановки и на этом месте у меня не получается отсортировать а до этого всё работает ок
вот графич пример
312-(ключевое число)
---
123
456
789
0РР -(символ Р дополняюший таблицу)

а мне надо чтобы было
123 (ключевое число отсартированное)
---
231
564
897
Р0Р

Автор: Akina 25.10.2005, 20:21
Ну так сперва собери столбцы, потом отсортируй, потом разбери обратно.

Код

dim key as string
dim txt(0 to 3) as string

key="312"

txt(0)="123"
txt(1)="456"
txt(2)="789"
txt(3)="0PP"

' определить промежуточный массив для манипуляций
dim tag(0 to len(key)-1)

' пересобрать в него данные по столбцам
for i=lbound(tag) to lbound(tag)
tag(i)=mid(key,i+1,1)
for j=0 to 3
tag(i)=tag(i) & mid(txt(j),i+1,1)
next j
next i

' отсортироватьпромежуточный  массив
call sort(tag)

' аналогичным образом разобрать по строкам 
' это ты уж как-нить сам...

Автор: Viton 26.10.2005, 19:58
Вот я сам и разобрался.
Но всёравно спасибо что предлагали различные способы
вот код той части которая у меня работал не так как надо.
Код

hir = Len(Sum)
oy = hir \ int2
kodtxt = ""
ox = 1
'начало блок сортировки по ключю
For n = 1 To int1
ox = 1
For k = 1 To int2
kl = CInt(Mid(txt2, k, 1))
If n = kl Then
tet6 = Mid(Sum, ox, oy)
kodtxt = kodtxt & tet6

End If
ox = ox + oy
Next k

Next n

Добавлено @ 20:01
Вот полеый код той программы которую я писал
а суть программы щифрование текста методом перестановки
вот её полный работаюший код.
Буду рад выслушать критику.

Код

Private Sub Command1_Click()
txt1 = Text1.Text
txt2 = Text2.Text
int2 = CInt(Len(txt2))
int1 = CInt(Len(txt1))
'цик Do
            'Некоторые операторы
'        Loop While k > 0
'пример(2)
'представленная таблица |должно получится
'1234                       1234
'5678                       5678
'90                         90PP (Р добавочный символ)
'в этом цикле добаваться два символа для полноценности таблицы
tmp1 = int1 / int2
tmp2 = int1 \ int2
tmp3 = tmp1 - tmp2

If tmp3 > 0 Then
Do While Not (tmp3 = 0)
If tmp3 > o Then Text1.Text = txt1 & "P"
txt1 = Text1.Text
int1 = CInt(Len(txt1))
tmp1 = int1 / int2
tmp2 = int1 \ int2
tmp3 = tmp1 - tmp2
Loop
End If

'конец дополнения таблицы
'-----------------------------------
'определние максимального числа в ключивом числе
int2q = CInt(Mid(txt2, 1, 1))
For i = 1 To int2
    int2w = CInt(Mid(txt2, i, 1))
    If int2q < int2w Then
    int2q = int2w
    max2 = int2w
    Else
    int2w = int2q
    max2 = int2q
    End If
    
Next i
'конец определения максимального числа в ключевом числе

'цикл пример(1)
'кодир число 1234567890
'ключевое чилсо 123
'образное представление в таблицу
'123
'456
'789
'0
'после этого цикла получим 1470258P369P


For o = 1 To int2

    For h = o To int1 Step int2
    ti = Mid(txt1, h, 1)
    Sum = Sum & ti
    Next h
    
Next o

'конец цикла с примером(1)
hir = Len(Sum)
oy = hir \ int2
kodtxt = ""
ox = 1
'начало блок сортировки по ключю
For n = 1 To int1
ox = 1
For k = 1 To int2
kl = CInt(Mid(txt2, k, 1))
If n = kl Then
tet6 = Mid(Sum, ox, oy)
kodtxt = kodtxt & tet6

End If
ox = ox + oy
Next k

Next n
Text3.Text = kodtxt

'конец  блока
End Sub


Автор: cardinal 26.10.2005, 22:40
Цитата(Viton @ 26.10.2005, 17:58)
Буду рад выслушать критику.

Ну чтож... smile
Вот она:
http://forum.vingrad.ru/index.php?showtopic=8778&view=findpost&p=57864

То есть в основном в этом случае она касается читаемости кода...

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)