powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Найдите ошибку!!!!
2 сообщений из 2, страница 1 из 1
Найдите ошибку!!!!
    #34159302
Esera
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Дана матрица A(m, n), 2  m  10, 2  n  10, состоящая из целых чисел. Удалить из матрицы строки, состоящие из одинаковых элементов. Если таких строк в матрице больше половины, то вывести сообщение и матрицу не преобразовывать. Исходную и преобразованную матрицы вывести в текстовые поля. При решении задачи не использовать дополнительных массивов и матриц. Для решения задачи составить следующие подпрограммы:
- логическую функцию проверки одной строки матрицы;
- процедуру удаления одной строки матрицы;

Помогите, пожалуйста, исправить и дополнить!!!!!!

Private Sub Vvod (A() As Integer, ByRef m%, ByRef n%)
Dim i As Integer
Dim j As Integer

Do
m = Val(InputBox("stroki"))
n = Val(InputBox("stolbcyi="))
Loop Until n > 0 And n <= 10 And m > 0 And m <= 10

For i% = 1 To m
For j% = 1 To n

A(i, j) = Val(InputBox("A(i,j)="))
Next j
Next i

End Sub
Private Sub Вывод(Text1 As Object, A() As Integer, ByVal m%, ByVal n%)
Dim s As String
Dim i As Integer
Dim j As Integer

s$ = " "
For i% = 1 To m
For j% = 1 To n
s = s + Str(A(i, j)) + " "
Next
s = s + vbCrLf
Next
Text1.Text = s
End Sub

Private Function Проверка(A() As Integer, ByVal m%, ByVal n%, ByVal num%) As Boolean
Dim j As Integer
Dim i As Integer

Проверка = False

For j% = 1 To n - 1
If A(num, j) = A(num, j + 1) Then
Проверка = True
Exit Function
End If
Next
End Function

Private Sub Удаление(A() As Integer, ByRef m%, ByVal n%, ByVal num%)
Dim i As Integer
For i% = num + 1 To m

Next
m = m - 1


End Sub


Private Sub Command1_Click()
Dim b(1 To 10, 1 To 10) As Integer
Dim m As Integer
Dim n As Integer
Dim i As Integer

Ввод b, m%, n%
Вывод Text1, b, m, n
Вывод Text2, A, m, n
For i% = m To 1 Step -1
If Проверка(b, m, n, i) = True Then
Удаление b, m, n, i
End If
Next
Вывод Text2, b, m, n
End Sub
...
Рейтинг: 0 / 0
Найдите ошибку!!!!
    #34166860
Фотография AndreTM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А что ее искать? Ошиблись мы, пытаясь вникнуть в условие...
Совет на будущее - приводите пример исходных данных и получаемого результата.
А вообще, теперь-то я понял, что в исходнике просто есть строки, состоящие из
одних и тех же чисел (напр. 0 0 0 0 или -5 -5 -5), вот с ними и надо разобраться.
Лови:
Код: plaintext
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.
 
    Dim A( 10 ,  10 ) As Integer
    Dim m As Byte ' строки
    Dim n As Byte ' столбцы

    Private Sub Ввод()
        Dim i As Integer
        Dim j As Integer

        Do
            m = Val(InputBox("Кол-во строк"))
        Loop Until m >=  2  And m <=  10 
        Do
            n = Val(InputBox("Кол-во столбцов"))
        Loop Until n >=  2  And n <=  10 

        For i =  1  To m
            For j =  1  To n
                A(i, j) = Val(InputBox("A(" & i & "," & j & ")"))
            Next j
        Next i

    End Sub

    Private Sub Вывод(ByRef oText As Object)
        Dim s As String
        Dim i As Integer
        Dim j As Integer

        s$ = ""
        For i =  1  To m
            For j =  1  To n
                s = s + Str(A(i, j)) + " "
            Next
            s = s + vbCrLf
        Next
        oText.Text = s
    End Sub

    Private Function Проверка(ByVal num As Byte) As Boolean
        Dim j As Byte
        Проверка = True
        For j =  2  To n
            If A(num,  1 ) <> A(num, j) Then
                Проверка = False
                Exit Function
            End If
        Next
    End Function

    Private Sub Удаление(ByVal num As Byte)
        Dim j As Integer
        If num < m Then
            For j =  1  To n
                A(num, j) = A(m, j)
            Next
        End If
        m = m -  1 
    End Sub

    Private Sub Command1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Command1.Click
        Dim i As Byte
        Dim nums As Byte

        Ввод()
        Text1.Text = ""
        Text2.Text = ""
        Вывод(Text1)
        ' Сначала проверяем на количество строк с одинаковыми элементами
        nums =  0 
        For i =  1  To m
            If Проверка(i) Then
                nums = nums +  1 
            End If
        Next
        If nums > m /  2  Then
            MsgBox("Строк с одинаковыми элементами больше половины!")
        Else
            ' Теперь удаляем эти строки
            ' Поскольку Удаление() изменяет размерность массива,
            ' используем цикл do
            i =  1 
            Do
                If Проверка(i) Then
                    Удаление(i)
                Else
                    i = i +  1 
                End If
            Loop Until i > m
            Вывод(Text2)
        End If
    End Sub

И не забудь сделать обработку кнопки Cancel в InputBox'е...
...
Рейтинг: 0 / 0
2 сообщений из 2, страница 1 из 1
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Найдите ошибку!!!!
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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