Гость
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Массивы, помогите найти ошибки) Если таковы есть) / 16 сообщений из 16, страница 1 из 1
28.12.2013, 20:23
    #38515120
bridgetony
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Массивы, помогите найти ошибки) Если таковы есть)
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
Dim A(100)
Dim B(100)

Private Sub Command1_Click()
n = Val(Text1.Text)
For i = 1 To n
    A(i) = Val(InputBox("a(i)"))
    Picture1.Print "a"; i; "="; A(i)
    Next
    End Sub
    
Private Sub Command2_Click()
n = Val(Text1.Text)
For i = 1 To n
    A(i) = Int(1001 * Rnd + 1)
    B(j) = Int(1001 * Rnd + 1)
    Picture1.Print "a"; i; "="; A(i)
    Next
End Sub

Private Sub Command3_Click()
Amax = -10000000000#
Amin = 10000000000#
For i = 1 To n
If A(i) > Amax Then
Amax = A(i)
imax = i
End If
If A(i) < Amin Then
Amin = A(i)
imin = i
End If
Next
For i = 1 To n
j = i
If i = imax Then
B(j) = A(imin)
Else
If i = imin Then
B(j) = A(imax)
Else
B(j) = A(i)
End If
End If
Next
For i = 1 To n
Picture2.Print "b"; i; "="; B(i)
Next
End Sub


Модератор: Учимся использовать тэги оформления кода - FAQ
...
Рейтинг: 0 / 0
28.12.2013, 20:31
    #38515125
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Массивы, помогите найти ошибки) Если таковы есть)
Что конкретно вызывает проблему?
...
Рейтинг: 0 / 0
28.12.2013, 21:11
    #38515133
bridgetony
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Массивы, помогите найти ошибки) Если таковы есть)
Shocker.Pro,

Подскажите пожалуйста, код и форма программы совпадает с заданием?
Задание:
В массиве "В" по сравнению с массивом "А", максимальное и минимальное значение поменять местами.
Код(переработанный):

Dim A(100)
Dim B(100)

Private Sub Command1_Click()
n = Val(Text1.Text)
For i = 1 To n
Next
End Sub


Private Sub Command2_Click()
n = Val(Text1.Text)
For i = 1 To n
A(i) = Int(1001 * Rnd + 1)
B(j) = Int(1001 * Rnd + 1)
Picture1.Print "a"; i; "="; A(i)
Next
End Sub

Private Sub Command3_Click()
Amax = -10000000000#
Amin = 10000000000#
For i = 1 To n
If A(i) > Amax Then
Amax = A(i)
imax = i
End If
If A(i) < Amin Then
Amin = A(i)
imin = i
End If
Next
For i = 1 To n
j = i
If i = imax Then
B(j) = A(imin)
Else
If i = imin Then
B(j) = A(imax)
Else
B(j) = A(i)
End If
End If
Next
For i = 1 To n
Picture2.Print "b"; i; "="; B(i)
Next
End Sub


Форму прикрепил.
Надеюсь на вашу помощь.
...
Рейтинг: 0 / 0
28.12.2013, 21:17
    #38515135
bridgetony
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Массивы, помогите найти ошибки) Если таковы есть)
Shocker.Pro,

И, как сделать, чтобы от кнопки "Ввод" на picturebox1 выводило кол-во элементов, которое я задал.
А то, я в textbox ввожу, например - три. Программа, это "три" записывает вместо label, и все) picturebox вообще с кнопкой "ввод" ни как не задействован..
...
Рейтинг: 0 / 0
28.12.2013, 22:01
    #38515150
VladConn
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Массивы, помогите найти ошибки) Если таковы есть)
Не очень понятно, зачем для перемены мест в массиве В нужен массив А. Для чего их нужно сравнивать? Просто так поменять нельзя?
...
Рейтинг: 0 / 0
28.12.2013, 22:03
    #38515151
VladConn
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Массивы, помогите найти ошибки) Если таковы есть)
И зачем рулетка? Чтобы внести элемент игры и задора?
...
Рейтинг: 0 / 0
28.12.2013, 22:08
    #38515153
bridgetony
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Массивы, помогите найти ошибки) Если таковы есть)
VladConn,

Ответа на свой вопрос, я так и не увидел.
...
Рейтинг: 0 / 0
28.12.2013, 22:09
    #38515154
VladConn
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Массивы, помогите найти ошибки) Если таковы есть)
bridgetony,

Перескажи пожалуйста своими словами содержание этой главы. С примером: если в текст бокс введено значение "bridgetony", а n нигде не декларирован.

Код: vbnet
1.
2.
3.
4.
5.
Private Sub Command1_Click()
n = Val(Text1.Text)
For i = 1 To n
Next
End Sub
...
Рейтинг: 0 / 0
28.12.2013, 22:13
    #38515158
VladConn
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Массивы, помогите найти ошибки) Если таковы есть)
bridgetonyVladConn,

Ответа на свой вопрос, я так и не увидел.

Его трудно увидеть, потому что неясна постановка задачи. Для чего нужно округлять, для чего нужен еще один массив, для чего сравнивать его, я не вижу его место в процессе перестановки элементов в другом массиве. Для чего в конце концов нужен пустой цикл?
...
Рейтинг: 0 / 0
28.12.2013, 22:18
    #38515159
VladConn
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Массивы, помогите найти ошибки) Если таковы есть)
bridgetony,

Этот кусок кода с колоссальной скоростью, на которую только способен Пентиум 4, напечает одно поверх другого n значений, а ты увидишь только последнее.

Код: vbnet
1.
2.
3.
For i = 1 To n
Picture2.Print "b"; i; "="; B(i)
Next
...
Рейтинг: 0 / 0
28.12.2013, 22:31
    #38515164
bridgetony
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Массивы, помогите найти ошибки) Если таковы есть)
VladConn,

Dim A(100)
Dim B(100)

Private Sub Command1_Click()
n = Val(Text1.Text)
For i = 1 To n
A(i) = Int(1001 * Rnd + 1)
B(j) = Int(1001 * Rnd + 1)
Picture1.Print "a"; i; "="; A(i)
Next
End Sub

Private Sub Command2_Click()
Amax = -10000000000#
Amin = 10000000000#
For i = 1 To n
If A(i) > Amax Then
Amax = A(i)
imax = i
End If
If A(i) < Amin Then
Amin = A(i)
imin = i
End If
Next
For i = 1 To n
j = i
If i = imax Then
B(j) = A(imin)
Else
If i = imin Then
B(j) = A(imax)
Else
B(j) = A(i)
End If
End If
Next
For i = 1 To n
Picture2.Print "b"; i; "="; B(i)
Next
End Sub

Если что не так, переработай, покажи, как правильно. Я не понимаю.
...
Рейтинг: 0 / 0
28.12.2013, 23:47
    #38515184
qwerty112
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Массивы, помогите найти ошибки) Если таковы есть)
bridgetony,

студент, тебе ж показали как код оформлять ... ты и с этим не можешь справиться ?
...
Рейтинг: 0 / 0
29.12.2013, 01:25
    #38515210
VladConn
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Массивы, помогите найти ошибки) Если таковы есть)
bridgetony,

Извини, друг, я понимаю, ты в отчаянии, но я действительно не врубаюсь в постановку задачи. Что означает фраза "В массиве "В" по сравнению с массивом "А"..."? Что у тебя является мерой сравнения массивов А и В?
...
Рейтинг: 0 / 0
29.12.2013, 03:46
    #38515240
VladConn
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Массивы, помогите найти ошибки) Если таковы есть)
bridgetony,

У меня VB6 нет, поэтому сделал в VBA Excel.

1. Сначала в проекте сделай ссылку на Microsoft Scripting Runtime (в меню - Tools/References)

2. На странице Excel поставь кнопку. В ее событие клик вставь код:

Private Sub CommandButton1_Click()
UserForm1.Show
End Sub

3. В кодовом окне вставь форму. Проследи, чтобы ее имя было UserForm1

4. На форму посади маленький техт бокс TextBox1 для ввода размерности массива (подразумевается integer)

5. Ниже посади два высоких, чтобы поместилось строк 40, техт бокса TextBox2 (для массива А) и TextBox3 (для массива В)

6. Еще ниже посади комманд баттон CommandButton1

7. В кодовое окно формы скопируй код:

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
Option Explicit

Private intN As Integer
Private intA() As Integer
Private intB() As Integer
Private objDic As New Scripting.Dictionary

Private Sub CommandButton1_Click()
    
    intN = GetArrayDim

    If intN < 2 Then
        Exit Sub
    Else
        StartProcess
        ShowResults
    End If
End Sub

Private Function GetArrayDim() As Integer
    Dim intRet As Integer
    
    If IsNumeric(TextBox1.Text) Then
        intRet = Abs(CInt(TextBox1.Text))
    Else
        intRet = 0
    End If

    GetArrayDim = intRet
End Function

Private Sub StartProcess()
    ReDim intA(intN)
    ReDim intB(intN)
    Dim intI As Integer
    Dim intMinA As Integer
    Dim intMaxA As Integer
    Dim intMinI As Integer
    Dim intMaxI As Integer
    Dim intRand As Integer
    
    Randomize
    objDic.RemoveAll
    
    For intI = 0 To intN - 1
        
        While objDic.Exists(intRand)
            intRand = Int((intN * Rnd) + 1)
        Wend
        objDic.Add intRand, intI
        intA(intI) = intRand
        intB(intI) = intA(intI)
    Next intI
        
    intMinA = intA(0)
    intMaxA = intA(0)
    intMinI = 0
    intMaxI = 0
    
    For intI = 1 To intN - 1
        If intA(intI) < intMinA Then
            intMinA = intA(intI)
            intMinI = intI
        ElseIf intA(intI) > intMaxA Then
            intMaxA = intA(intI)
            intMaxI = intI
        End If
    Next intI
        
     intB(intMinI) = intMaxA
     intB(intMaxI) = intMinA
End Sub

Private Sub ShowResults()
    Dim intI As Integer
    Dim strTextA As String
    Dim strTextB As String
    
    TextBox2.Text = ""
    TextBox3.Text = ""
    
    TextBox1.MultiLine = True
    TextBox2.MultiLine = True
    
    For intI = 0 To intN - 1
         strTextA = strTextA & intI & "," & intA(intI) & vbCrLf
         strTextB = strTextB & intI & "," & intB(intI) & vbCrLf
    Next intI
    
    TextBox2.Text = strTextA
    TextBox3.Text = strTextB
    
End Sub



Good Luck.
...
Рейтинг: 0 / 0
29.12.2013, 04:22
    #38515242
VladConn
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Массивы, помогите найти ошибки) Если таковы есть)
bridgetony,

Улучшил несколько процедуру StartProcess.

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
Private Sub StartProcess()
    ReDim intA(intN)
    ReDim intB(intN)
    Dim intI As Integer
    Dim intMinA As Integer
    Dim intMaxA As Integer
    Dim intMinI As Integer
    Dim intMaxI As Integer
    Dim intRand As Integer
    
    Randomize
    objDic.RemoveAll
    
    intRand = Int(((intN + 1) * Rnd) + 1)
    objDic.Add intRand, -1

    For intI = 0 To intN - 1
        
        While objDic.Exists(intRand)
            DoEvents
            intRand = Int(((intN + 1) * Rnd) + 1)
        Wend
        objDic.Add intRand, intI
        intA(intI) = intRand
        intB(intI) = intA(intI)
    Next intI
        
    intMinA = intA(0)
    intMaxA = intA(0)
    intMinI = 0
    intMaxI = 0
    
    For intI = 1 To intN - 1
        If intA(intI) < intMinA Then
            intMinA = intA(intI)
            intMinI = intI
        ElseIf intA(intI) > intMaxA Then
            intMaxA = intA(intI)
            intMaxI = intI
        End If
    Next intI
        
     intB(intMinI) = intMaxA
     intB(intMaxI) = intMinA
End Sub

...
Рейтинг: 0 / 0
30.12.2013, 09:43
    #38515671
VladConn
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Массивы, помогите найти ошибки) Если таковы есть)
А как просил.
...
Рейтинг: 0 / 0
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Массивы, помогите найти ошибки) Если таковы есть) / 16 сообщений из 16, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]