Массивы

  • Автор темы Shyrik
  • Дата начала
S

Shyrik

#1
Всем доброго времени суток.
Помогите, пожалуйста, отладить программу.
Задание: Лабораторная, включает в себя четыре задачи на массивы(3 на одномерные и 1 двумерный), всё сделано в менюшке.
Сами задания:
1)Напечатать индексы положительных элементов, содержащихся в массиве.
2)Поменять местами максимальный и минимальный элементы массива.
3)В массиве последний отрицательный элемент поставить на первое место.
4) Из матрицы сформировать одномерный массив, элементы которого равны элементам строки, имеющей максимальную сумму элементов.


Мой вопрос заключается в том, чтобы:
1) 1-й недочёт в том, что после выполнения второго задания первоначальный массив преобразовывается и в 3-й начинает работать уже с преобразованным. Помогите, пожалуйста, сделать так, чтобы он работал с изначальным.
2) 2-й недочёт в том, что в 4-й задаче нужно, чтобы одномерный массив ФОРМИРОВАЛСЯ из матрицы, а не печатался.

p.s. Помогите, пожалуйста, кто может.
В знак благодарности могу кинуть голосов к рейтингу в контакте. :)


Далее форма.


Программный код.
[codebox]Dim ex As Byte
Dim i, j As Integer
Dim s, suma, maxsuma As Integer
Dim m, n As Integer
Dim min, max As Integer
Dim minN, maxN As Integer
Dim tmp As Integer
Dim a() As Integer
Dim b() As Integer

Private Sub mnuTask1_Click()
Task1
End Sub
Private Sub cmdTask1_Click()
Task1
End Sub
Private Sub mnuTask2_Click()
Task2
End Sub
Private Sub cmdTask2_Click()
Task2
End Sub
Private Sub mnuTask3_Click()
Task3
End Sub
Private Sub cmdTask3_Click()
Task3
End Sub
Private Sub mnuTask4_Click()
Task4
End Sub
Private Sub cmdTask4_Click()
Task4
End Sub
Private Sub mnuArr1CreateA_Click()
GetArray1
GetArray1A
PrintArray1
End Sub
Private Sub mnuArr1CreateH_Click()
GetArray1
GetArray1H
PrintArray1
End Sub
Private Sub mnuArr2CreateA_Click()
GetArray2
GetArray2A
PrintArray2
End Sub
Private Sub mnuArr2CreateH_Click()
GetArray2
GetArray2H
PrintArray2
End Sub
Private Sub mnuClear_Click()
mnuStart.Caption = "Включить"
mnuArray.Enabled = False
mnuArray1.Enabled = True
mnuArray2.Enabled = True
mnuTasks.Enabled = False
mnuTask1.Enabled = False
mnuTask2.Enabled = False
mnuTask3.Enabled = False
mnuTask4.Enabled = False
cmdTask1.Enabled = False
cmdTask2.Enabled = False
cmdTask3.Enabled = False
cmdTask4.Enabled = False
txtO.Text = ""
End Sub
Private Sub cmdClear_Click()
txtO.Text = ""
End Sub
Private Sub mnuExit_Click()
ex = MsgBox("Вы действительно хотите выйти?", 36, "Выход")
If ex = 6 Then End
End Sub
Private Sub mnuStart_Click()
If mnuArray.Enabled = False Then
mnuArray.Enabled = True
mnuTasks.Enabled = True
mnuStart.Caption = "Отключить"
Else
mnuArray.Enabled = False
mnuTasks.Enabled = False
mnuStart.Caption = "Запустить"
End If
End Sub
Sub GetArray1()
m = Val(InputBox("Введите длинну одномерного массива:", "Создание одномерного массива", "5"))
ReDim a(1 To m)
mnuTask1.Enabled = True
mnuTask2.Enabled = True
mnuTask3.Enabled = True
cmdTask1.Enabled = True
cmdTask2.Enabled = True
cmdTask3.Enabled = True
mnuArray2.Enabled = False
txtO.Text = ""
End Sub
Sub GetArray2()
m = Val(InputBox("Введите M для двумерного массива:", "Создание двумерного массива", "5"))
n = Val(InputBox("Введите N для двумерного массива:", "Создание двумерного массива", "5"))
ReDim a(1 To m, 1 To n)
mnuTask4.Enabled = True
cmdTask4.Enabled = True
mnuArray1.Enabled = False
txtO.Text = ""
End Sub
Sub GetArray1A()
Randomize Timer
For i = 1 To m
a(i) = Rnd * 101
Next i
End Sub
Sub GetArray1H()
For i = 1 To m
a(i) = Val(InputBox("Введите элемент массива a (" + Str(i) + " ):", "Ввод одномерного массива", "1"))
Next i
End Sub
Sub GetArray2A()
Randomize Timer
For i = 1 To m
For j = 1 To n
a(i, j) = Rnd * 101
Next j
Next i
End Sub
Sub GetArray2H()
For i = 1 To m
For j = 1 To n
a(i, j) = Val(InputBox("Введите элемент массива a (" + Str(i) + " , " + Str(j) + " ):", "Ввод двумерного массива", "1"))
Next j
Next i
End Sub
Sub PrintArray1()
txtO.Text = txtO.Text + "Содержимое одномерного массива:" + vbCrLf
For i = 1 To m
txtO.Text = txtO.Text + Str(a(i)) + " "
Next i
txtO.Text = txtO.Text + vbCrLf

End Sub
Sub PrintArray2()
txtO.Text = txtO.Text + "Содержимое двумерного массива:" + vbCrLf
For i = 1 To m
For j = 1 To n
txtO.Text = txtO.Text + Str(a(i, j)) + " "
Next j
txtO.Text = txtO.Text + vbCrLf
Next i
End Sub
Sub Task1()
s = 0
PrintArray1
txtO.Text = txtO.Text + "Выполнение задания №1" + vbCrLf
txtO.Text = txtO.Text + "Номера положительных элементов:" + vbCrLf
For i = 1 To m
If a(i) > 0 Then
txtO.Text = txtO.Text + Str(i) + " "
Else
s = s + 1
End If
Next i
If s = 0 Then MsgBox "Все элементы положительные"
If s = 5 Then MsgBox "Все элементы отрицательные"
txtO.Text = txtO.Text + vbCrLf
End Sub
Sub Task2()
PrintArray1
min = a(1)
max = a(1)
minN = 1
maxN = 1
For i = 2 To m
If a(i) < min Then min = a(i): minN = i
If a(i) > max Then max = a(i): maxN = i
Next i
tmp = a(minN)
a(minN) = a(maxN)
a(maxN) = tmp
txtO.Text = txtO.Text + "Выполнение задания №2" + vbCrLf
txtO.Text = txtO.Text + "Итоговый массив (после обмена значений элементов):" + vbCrLf
For i = 1 To m
txtO.Text = txtO.Text + Str(a(i)) + " "
Next i
txtO.Text = txtO.Text + vbCrLf + "Поменялись местами следующие элементы:" + vbCrLf
txtO.Text = txtO.Text + "Максимальный: a (" + Str(maxN) + " ) = " + Str(a(minN)) + vbCrLf
txtO.Text = txtO.Text + "Минимальный: a (" + Str(minN) + " ) = " + Str(a(maxN)) + vbCrLf
End Sub
Sub Task3()
s = 0
PrintArray1
For i = 1 To m
If a(i) < 0 Then minN = i
Next i
tmp = a(1)
a(1) = a(minN)
a(minN) = tmp
txtO.Text = txtO.Text + "Выполнение задания №3" + vbCrLf
txtO.Text = txtO.Text + "Итоговый массив (после обмена значений элементов):" + vbCrLf
For i = 1 To m
txtO.Text = txtO.Text + Str(a(i)) + " "
If a(i) < 0 Then s = 1
If a(i) < 0 And i = m Then s = m + 1
Next i
If s = 0 Then MsgBox " отрицательных элементов нет"
If s = m + 1 Then MsgBox "отрицательный элемент на последнем месте"
txtO.Text = txtO.Text + vbCrLf + "Элемент a (" + Str(minN) + " ), равный" + Str(a(1)) + ", поменялся значениями с первым элементом." + vbCrLf
End Sub
Sub Task4()
maxN = 0
For i = 1 To m
suma = 0
For j = 1 To n
suma = suma + a(i, j)
Next
If suma > maxsuma Then maxsuma = suma: maxN = i
txtO.Text = txtO.Text + "Сумма элементов строки №" + Str(i) + " = " + Str(suma) + vbCrLf
Next
txtO.Text = txtO.Text + "Максимальная сумма обнаружена в строке №" + Str(maxN) + " и равна" + Str(maxsuma) + vbCrLf
txtO.Text = txtO.Text + "Формирование строки №" + Str(maxN) + vbCrLf
For i = 1 To n
txtO.Text = txtO.Text + Str(a(maxN, i)) + " "
Next
txtO.Text = txtO.Text + vbCrLf
End Sub[/codebox]