Консультация № 176450
03.02.2010, 03:46
0.00 руб.
0 4 1
Добрый день! Помогите пожалуйста сделать программу, так как сам я это сделать несмог(.
Задание такое: дана прямоугольная матрица. Определить:
1) номер первого из столбиков который содержит хотябы один ноль (и выводить этот номер в отдельный Label или TextBox разницы нету);
2) отсортировать матрицу таким образом чтобы первая строка содержала числа по возростающей!
Сама матрица у меня сделана, а вот первое и второе я сделать немогу. Вот ссылка на саму матрицу http://ifolder.ru/16172254 .
Вот ответы которые я получил с сайта ru-board.com :
Код:

1)Допустим у нас матрица 4х4, тогда

Код:
Dim i, j as Integer
Dim mat(4)(4) as Integer

For i=0 to 4
For j=0 to 4
if(arr(j)(i)==0)
Label.Text=j
Next
Next

2) Вот так:
Dim i,j,t as Integer
Dim temp(4) as Integer //Вспомогательный массив. В него временно перепишим значения из первой строки. Отсортируем и запишим обратно в массив.
For i-0 To 4
temp(i)=mat(0)(i)
Next

//Теперь сортируем значения в временном массиве
For i=0 To 4
For j=i+1 To 4
if(temp(j)<temp(i))
t=temp(j)
temp(j)=temp(i)
temp(i)=t
Next j
Next i

//Теперь вернем отсортированные значения в массив
For i=0 To 4
mat(0)(i)=temp(i)

Но добавить эти два примера к себе в проэкт у меня неполучилось(. Проверьте пожалуйста правильность этих ответов и если можна доделайте мой проэкт.
Помогите!!! Это просто задача на экзамен и её нужно срочно сделать и чтобы она была работоспособна.
Заранее огромное Вам всем спасибо.

Обсуждение

давно
Модератор
137394
1850
03.02.2010, 12:03
общий
это ответ
Здравствуйте, Куценко Андрей.
В Вашем вопросе ошибка в том, что в Basic индексы массивов по умолчанию изменяются от 0 до N-1, где N- число элементов в массиве. Если у Вас матрица 4*4, то цикл от 0 до 4 неизбежно приведёт к ошибочному результату. Да и синтаксис там, похоже, неверный.
После уточнения задачи в мини-форуме вопроса предлагаю решение в следующем виде (Внизу код с решением).
Отлаживал программу как макрос в Excel, так как Microsoft Visual Basic 6.0 SP5 у меня нет.
Там, где мне не на чем было отладить Ваш код (ввод-вывод, вы вызываете свой код из формы, а у меня её нет), я строки закомментировал. Но на логику работы это не скажется - Вы можете убрать мои строки и сделать ввод-вывод как вам надо.
Код:
Dim i, j, n, m As Integer
Dim r As String

Dim j0, k, p As Integer

' n = Text1.Text ' Ваш способ ввода мне не на чем отладить - закомментировал
' m = Text2.Text

n = 3 ' n - число строк (Ввожу явным образом)
m = 4 ' m - число столбцов

ReDim a(1 To n, 1 To m)

r = ""
For i = 1 To n ' Ввод элементов матрицы
For j = 1 To m
a(i, j) = InputBox("Введите элемент матрицы" + vbCrLf + "строка " + CStr(i) + vbCrLf + "столбец " + CStr(j))
r = r + Mid(CStr(a(i, j)) + " ", 1, 5)
Next j
r = r + vbCrLf
Next i

' Label2.Caption = r ' не на чем отладить, закомментировал
MsgBox r ' результат выдал в MsgBox

' В матрице найти номер первого из столбцов, который содержит хотя бы один ноль

j0 = -1 ' В эту переменную найдём номер первого столбца, в котором присутствует нулевой элемент

For j = 1 To m
For i = 1 To n
If a(i, j) = 0 Then ' Если в столбце нашли нулевой элемент
j0 = j ' запоминаем номер столбца
Exit For ' и покидаем цикл - задача выполнена
End If
Next i
If j0 <> -1 Then ' Если найден индекс столбца с нуль элементом
MsgBox " Номер первого столбца с нулевым элементом " + CStr(j0) ' результат выдал в MsgBox
Exit For ' - покидаем цикл - задача выполнена
End If
Next j

' Отсортировать матрицу таким образом, чтобы первая строка содержала числа по возрастающей

For j = 1 To m
For i = j To m
If a(1, i) < a(1, j) Then ' Ищем min элемент в 1 строкt
For p = 1 To n ' переставляем столбец с мин элементом на начало
k = a(p, i)
a(p, i) = a(p, j)
a(p, j) = k
Next
End If
Next
Next

' Формируем результат в симв форме
r = ""
For i = 1 To n ' Ввод элементов матрицы
For j = 1 To m
r = r + Mid(CStr(a(i, j)) + " ", 1, 5)
Next j
r = r + vbCrLf
Next i

MsgBox r ' результат выдал в MsgBox
5
Об авторе:
Понеже не словес красных бог слушает, но дел наших хощет
Неизвестный
03.02.2010, 12:19
общий
Здравствуйте, Megaloman.
У меня в матрице количество столбиков и строк должен вводить сам пользователь, она может быть любая. Я пользуюсь Microsoft Visual Basic 6.0 SP5
А вот код моей прямоугольной матрицы:
Код:

Private Sub Command1_Click()
Dim i As Integer
Dim j As Integer
Dim r As String
n = Text1.Text
m = Text2.Text
ReDim a(n, m)
For i = 1 To n
For j = 1 To m
a(i, j) = InputBox("ââåä³òü çíà÷åííÿ a(" & i & ", " & i & ")")
r = r & a(i, j) & vbTab
Next j
r = r & vbCrLf
Next i
Label2.Caption = r

End Sub

В этот код мне нужно добавить только вышенаписанные два задания и всё. Помогите пожалусйта доделать программу. Огромное Вам спасибо за то, что откликнулись!!!
давно
Модератор
137394
1850
03.02.2010, 20:50
общий
Куценко Андрей:
Изменил решение после уточнения задачи - посмотрите пожалуйста
Об авторе:
Понеже не словес красных бог слушает, но дел наших хощет
Неизвестный
04.02.2010, 15:49
общий
Спасибо Вам огромное, Вы мне очень помогли!!!
Форма ответа