Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 15.03.2010, 16:39   #11
Mikle1990
Пользователь
 
Регистрация: 13.03.2010
Сообщений: 16
По умолчанию

Вот после нескольких модификаций, но ещё не доработанный.

Код:
                             'Старт - Нахождение и вывод наименьшего элемента в первой строке 
        i = 0
        zs = 0
        sb = 0
        max = a(i, sb)
        For j = 1 To n
            If a(i, j) < max Then
                max = a(i, j)
                sb = j
            End If
        Next

        For k = 0 To n
            If a(i, sb) = a(i, k) Then
                zs = zs + 1
            End If
        Next

        'Если zs > 1, то найденный минимальный элемент совпадает(по значению) с другим элементом в строке
        ', и, следовательно, минимальный элемент уже не явл-ся минимальным. 
        If zs = 1 Then
            z1 = CStr("a(") + Format(i) + CStr(",") + Format(sb) + CStr(")=") + Format(a(i, sb)) + CStr(";")
            LB.Items.Add(z1)
        End If
        'Конец - Нахождение и вывод наименьшего элемента в первой строке

Последний раз редактировалось Mikle1990; 15.03.2010 в 16:53.
Mikle1990 вне форума Ответить с цитированием
Старый 15.03.2010, 17:38   #12
Mikle1990
Пользователь
 
Регистрация: 13.03.2010
Сообщений: 16
По умолчанию

Вроде решил!) Жирный шрифт - это то что я думал как решить.
Код написан. Комментарии есть даже. Люди добрые, проверьте please!

Ещё раз привожу текст задания:
Сформировать произвольно двумерный массив R(8,3) Найти и вывести значение и индексы элемента, являющегося одновременно наименьшим в своей строке и наибольшим в своем столбце. При отсутствии такого элемента вывести сообщение.

Вот код этой главной процедуры:
Код:

    'процедура поиска необходимого элемента
    Sub Poisk(ByVal a(,) As Single, ByRef LB As ListBox)
        Dim m As Integer
        Dim n As Integer
        Dim sb As Integer 'столбец
        Dim z1 As String = ""
        Dim max As Single
        Dim i As Integer
        Dim j As Integer
        Dim k As Integer
        Dim l As Integer
        Dim zs As Integer
        Dim zk As Integer
        m = a.GetLength(0) - 1 'строки
        n = a.GetLength(1) - 1 'столбцы

        'Старт - Нахождение необходимой точки
        For i = 0 To m
            zs = 0
            zk = 0
            sb = 0
            max = a(i, sb)
            For j = 1 To n
                If a(i, j) < max Then
                    max = a(i, j)
                    sb = j
                End If
            Next

            For k = 0 To n
                If a(i, sb) = a(i, k) Then
                    zs = zs + 1
                End If
            Next
            For l = 0 To m
                If a(i, sb) <= a(l, sb) Then
                    zk = zk + 1
                End If
            Next

            'Если zs > 1, то найденный минимальный элемент совпадает(по значению) с другим элементом в строке
            ', и, следовательно, минимальный элемент уже не явл-ся минимальным. 
            'Если zk > 1, то найденный элемент меньше какого-либо элемента из его столбца.

            If zs = 1 And zk = 1 Then
                z1 = CStr("a(") + Format(i) + CStr(",") + Format(sb) + CStr(")=") + Format(a(i, sb))
                LB.Items.Add(z1)
            End If
        Next
        'Конец - Нахождение необходимой точки
    End Sub
Это просто сумасшедший код. Не пытаясь подначивать вас его проверять, скажу, что данный алгоритм придуман лично мной и, потому, он может быть вам интересен. честно честно)

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Блин, с отрицательными числами не правильно работает(

Последний раз редактировалось Mikle1990; 15.03.2010 в 17:46.
Mikle1990 вне форума Ответить с цитированием
Старый 15.03.2010, 17:50   #13
Mikle1990
Пользователь
 
Регистрация: 13.03.2010
Сообщений: 16
По умолчанию

Вот в этом участке кода:
Код:
            For l = 0 To m
                If a(i, sb) <= a(l, sb) Then
                    zk = zk + 1
                End If
            Next
При отладке -7 <= -8 даёт ответа - да!
как это понимать?((
такое впечатление, что сравниваются модули чисел!(
Mikle1990 вне форума Ответить с цитированием
Старый 15.03.2010, 18:14   #14
Mikle1990
Пользователь
 
Регистрация: 13.03.2010
Сообщений: 16
По умолчанию

так... что-то я перепутал.
Mikle1990 вне форума Ответить с цитированием
Старый 15.03.2010, 18:37   #15
Mikle1990
Пользователь
 
Регистрация: 13.03.2010
Сообщений: 16
По умолчанию

Ура! нашёл ошибку!) забыл дописать Exit For при нахождении элемента, а то так z1 переписывалась на "не найдено".

Вот теперь я точно уверен, что код работоспособен на все сто!

Вот код, попробуйте найти в нём какие-нибудь недочёты(или ошибки?):
Код:

    'процедура поиска необходимого элемента
    Sub Poisk(ByVal a(,) As Single, ByRef LB As ListBox)
        Dim m As Integer
        Dim n As Integer
        Dim sb As Integer 'столбец
        Dim z1 As String = ""
        Dim min As Single
        Dim i As Integer
        Dim j As Integer
        Dim k As Integer
        Dim l As Integer
        Dim zs As Integer
        Dim zk As Integer
        m = a.GetLength(0) - 1 'строки
        n = a.GetLength(1) - 1 'столбцы

        'Старт - Нахождение необходимой точки
        For i = 0 To m
            zs = 0
            zk = 0
            sb = 0
            min = a(i, sb)
            For j = 1 To n
                If a(i, j) < min Then
                    min = a(i, j)
                    sb = j
                End If
            Next

            For k = 0 To n
                If a(i, sb) = a(i, k) Then
                    zs = zs + 1
                End If
            Next
            For l = 0 To m
                If a(i, sb) <= a(l, sb) Then
                    zk = zk + 1
                End If
            Next

            'Если zs > 1, то найденный минимальный элемент совпадает(по значению) с другим элементом в строке
            ', и, следовательно, минимальный элемент уже не явл-ся минимальным. 
            'Если zk > 1, то найденный элемент меньше какого-либо элемента из его столбца.

            If zs = 1 And zk = 1 Then
                z1 = CStr("a(") + Format(i) + CStr(",") + Format(sb) + CStr(")=") + Format(a(i, sb))
                Exit For
            Else
                z1 = "не найден"
            End If

        Next
        LB.Items.Add(z1)
        'Конец - Нахождение необходимой точки
    End Sub

P.S. Я стремлюсь к тому, чтоб код был практически идеален. Надеюсь кто-нибудь мне поможет в этом)

Последний раз редактировалось Mikle1990; 15.03.2010 в 18:56.
Mikle1990 вне форума Ответить с цитированием
Старый 09.03.2015, 23:05   #16
убью
Новичок
Джуниор
 
Регистрация: 09.03.2015
Сообщений: 2
По умолчанию

У меня такая же ситуация:
Option Strict On
Option Explicit On
Imports System.Math
Public Class Form1
Dim k, imin, jmin As Integer, R(8, 3), Rmin As Single
Sub Chk1()
Dim i, j, imin, jmin As Integer
Rmin = R(i, 0)
For j = 0 To 3
If R(i, j) < Rmin Then
Rmin = R(i, j)
imin = i
jmin = j
End If
Next
End Sub
Sub Poisk(ByVal a(,) As Single, ByRef LB As ListBox)
Dim m As Integer
Dim n As Integer
Dim sb As Integer 'столбец
Dim z1 As String = ""
Dim min As Single
Dim i As Integer
Dim j As Integer
Dim k As Integer
Dim l As Integer
Dim zs As Integer
Dim zk As Integer
m = a.GetLength(0) - 1 'строки
n = a.GetLength(1) - 1 'столбцы

'Старт - Нахождение необходимой точки
For i = 0 To m
zs = 0
zk = 0
sb = 0
min = a(i, sb)
For j = 1 To n
If a(i, j) < min Then
min = a(i, j)
sb = j
End If
Next

For k = 0 To n
If a(i, sb) = a(i, k) Then
zs = zs + 1
End If
Next
For l = 0 To m
If a(i, sb) <= a(l, sb) Then
zk = zk + 1
End If
Next

'Если zs > 1, то найденный минимальный элемент совпадает(по значению) с другим элементом в строке
', и, следовательно, минимальный элемент уже не явл-ся минимальным.
'Если zk > 1, то найденный элемент меньше какого-либо элемента из его столбца.

If zs = 1 And zk = 1 Then
z1 = CStr("a(") + Format(i) + CStr(",") + Format(sb) + CStr(")=") + Format(a(i, sb))
Exit For
Else
z1 = "не найден"
End If

Next
LB.Items.Add(z1)
'Конец - Нахождение необходимой точки
End Sub
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim i, j, m As Integer
Randomize()
For i = 0 To 8
For j = 0 To 3
R(i, j) = 10 * Rnd() - 5
Poisk(R(i, j), ListBox4)
Next
Next
k = 0
Line1:
For i = 0 To 8
Chk1()
Line2:
For m = 0 To 8
If R(m, jmin) < Rmin Then
GoTo Line1
ElseIf Rmin > R(m, jmin) Then
GoTo Line2
End If
Next
k = k + 1
ListBox1.Items.Add(Rmin)
ListBox2.Items.Add(imin)
ListBox3.Items.Add(jmin)
Next
If k = 0 Then
MsgBox("Таких элементов не существует", MsgBoxStyle.Critical, "Ашибачко")
End If
End Sub

Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
ListBox1.Items.Clear()
ListBox2.Items.Clear()
ListBox3.Items.Clear()
End Sub

Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
Application.Exit()
End Sub
End Class

И пишет, что Ошибка 1 Невозможно преобразовать значение типа "Single" в "2-мерный массив из Single".
убью вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
работа с двумерными массивами curly182 Паскаль, Turbo Pascal, PascalABC.NET 1 16.05.2009 17:56
Подпрограммы(работа с двумерными массивами) DimoniusX Помощь студентам 0 15.04.2009 09:52
задача Visual Basic. Работа с массивами ProgramBad Помощь студентам 3 14.02.2009 02:10
Работа с двумерными массивами KJIOyH Помощь студентам 4 03.11.2007 20:03