Нужна помощь в Vb. (Код я сделал помогите найти ошибку)

Тема в разделе "Visual Basic", создана пользователем Bernuar, 11 май 2011.

Статус темы:
Закрыта.
  1. Bernuar

    Bernuar Гость

    Вот такая задачка:
    Дан двумерный массив размером n*m, заполненный случайными числами. Определить в нем строку с максимальной и столбец с минимальной суммой элементов.

    Заполнить массив 7*7 по правилу:
    Код (LotusScript):
    Public Class Form1

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    If Text1.Text <> "" And Text2.Text <> "" Then
    Dim n, m, a, b As Integer
    n = Text1.Text
    m = Text2.Text
    a = 0
    b = 0
    Dim mas(0 To n - 1, 0 To m - 1) As Integer
    For i = 0 To (n) * (m) + (m - 1)
    If b <= n - 1 Then
    Randomize()
    mas(a, b) = Int(Rnd() * 30)
    b = b + 1
    Else
    a = a + 1
    b = 0
    End If
    Next
    a = 0
    b = 0
    Dim stolb(0 To m - 1), strok(0 To n - 1) As Integer
    Dim schot(0 To n - 1, 0 To m - 1) As Integer
    For i = 0 To (n) * (m) + (m - 1)
    If b <= m - 1 Then
    stolb(a) = stolb(a) + mas(a, b)
    b = b + 1
    ElseIf b = n Then
    a = a + 1
    b = 0
    End If
    Next
    End If
    End Sub
    End Class
    Выдает ошибку что индекс находится вне границ массива. И еще помогите составить пр. форму
    тут выдает
    Код (LotusScript):
    mas(a, B) = Int(Rnd() * 30)
     
  2. hosm

    hosm * so what *

    Регистрация:
    18 май 2009
    Сообщения:
    2.450
    Симпатии:
    7
    разве это правильно? (Индекс b меняется 0 To m - 1)
    Должно быть b <= m - 1.
    И дальше внизу ElseIf b = m.
    тут что-то с кол-вом не то. Надо что-то типа i=0 to (n-1)*(m) + (m - 1)
    или как-то иначе проверить нужное кол-во, типа такого:
    Код (Text):
                 If b <= m - 1 Then
    Randomize()
    mas(a, b) = Int(Rnd() * 30)
    b = b + 1
    Else
    a = a + 1
    if a<n then
    b = 0
    else
    Exit for
    end if
    End If
     
  3. Bernuar

    Bernuar Гость

    Спасибо. Та же самая ошибка только тут
    Код (LotusScript):
     stolb(a) = stolb(a) + mas(a, b)
    System.IndexOutOfRangeException не обработано
    Message=Индекс находился вне границ массива.
    Source=WindowsApplication23
    StackTrace:
    в WindowsApplication23.Form1.Button1_Click(Object sender, EventArgs e) в c:\users\programmer\documents\visual studio 2010\Projects\WindowsApplication23\WindowsApplication23\Form1.vb:строка 32
    в System.Windows.Forms.Control.OnClick(EventArgs e)
    в System.Windows.Forms.Button.OnClick(EventArgs e)
    в System.Windows.Forms.Button.OnMouseUp(MouseEventArgs mevent)
    в System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks)
    в System.Windows.Forms.Control.WndProc(Message& m)
    в System.Windows.Forms.ButtonBase.WndProc(Message& m)
    в System.Windows.Forms.Button.WndProc(Message& m)
    в System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
    в System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
    в System.Windows.Forms.NativeWindow.DebuggableCallback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
    в System.Windows.Forms.UnsafeNativeMethods.DispatchMessageW(MSG& msg)
    в System.Windows.Forms.Application.ComponentManager.System.Windows.Forms.UnsafeNat
    iveMethods.IMsoComponentManager.FPushMessageLoop(Int32 dwComponentID, Int32 reason, Int32 pvLoopData)
    в System.Windows.Forms.Application.ThreadContext.RunMessageLoopInner(Int32 reason, ApplicationContext context)
    в System.Windows.Forms.Application.ThreadContext.RunMessageLoop(Int32 reason, ApplicationContext context)
    в System.Windows.Forms.Application.Run(ApplicationContext context)
    в Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase.OnRun()
    в Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase.DoApplicat
    ionModel()
    в Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase.Run(String
    [] commandLine)
    в WindowsApplication23.My.MyApplication.Main(String[] Args) в 17d14f5c-a337-4978-8281-53493378c1071.vb:строка 81
    в System.AppDomain._nExecuteAssembly(Assembly assembly, String[] args)
    в System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args)
    в Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()
    в System.Threading.ThreadHelper.ThreadStart_Context(Object state)
    в System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
    в System.Threading.ThreadHelper.ThreadStart()
    InnerException:
    Не знаю поможет или нет, а я еще подумаю
     
  4. hosm

    hosm * so what *

    Регистрация:
    18 май 2009
    Сообщения:
    2.450
    Симпатии:
    7
    1)
    А вы тут верхний лимит цикла пофиксили, как я выше писала?
    2)
    Dim mas(0 To n - 1, 0 To m - 1)
    Dim stolb(0 To m - 1), так почему индексация этого массива идет по a, а не по b?
    stolb(a) = stolb(a) + mas(a, b)
     
  5. Bernuar

    Bernuar Гость

    Тьфу. Забыл) Спасибо. хех
     
Загрузка...
Статус темы:
Закрыта.

Поделиться этой страницей