Матрицы

Тема в разделе "Visual Basic", создана пользователем koka278, 16 дек 2010.

  1. koka278

    koka278 New Member

    Регистрация:
    12 дек 2010
    Сообщения:
    3
    Симпатии:
    0
    Здравствуйте помогите пожалуйста исправить ошибки и дописать 3 функции, для программы работы с квадратными матрицами : транспонирование, нахождение определителя, умножение 2х матриц и сложение 2х матриц
    вот программа с функцией нахождения определителя
    Код (LotusScript):
    Dim i As Integer, j As Integer, k As Integer, N As Integer
    Dim Result As String
    Dim Matrix() As Double, Matrix2() As Double, Matrix3() As Double


    'Вычисление определителя. приведение к треугольному виду
    Function Determinant() As Double
    Dim maxl As Integer
    Dim maxe As Double, d As Double, del As Double, det As Double
    det = 1
    For k = 0 To N - 2
    maxe = Matrix(k, k)
    maxl = k
    For i = k + 1 To N - 1
    If Abs(Matrix(i, k)) > Abs(maxe) Then'выбор максимального элемента столбца
    maxl = i
    maxe = Abs(Matrix(i, k))
    End If
    Next i
    If maxl <> k Then 'если индекс строки максимального элемента столбца не равен индексу
    det = det * (-1)
    For j = 0 To N - 1
    d = Matrix(k, j) 'то переставляем строку так, чтобы максимальный элемент стоял на диагонали
    Matrix(k, j) = Matrix(maxl, j)
    Matrix(maxl, j) = d
    Next j
    End If

    If Matrix(k, k) <> 0 Then'вычитание строк
    For i = k + 1 To N - 1
    del = Matrix(i, k) / Matrix(k, k)
    For j = 0 To N - 1
    Matrix(i, j) = Matrix(i, j) - del * Matrix(k, j)
    Next j
    Next i
    Else
    Exit Function
    End If
    Next k
    For i = 0 To N - 1
    det = det * Matrix(i, i)
    Next i
    Determinant = det

    End Function

    'считывание матрицы из таблицы
    Private Sub ChtMtr()
    For i = 0 To N - 1
    For j = 0 To N - 1
    On Error GoTo ErrDbl
    Matrix(i, j) = CDbl(FGMatrix.TextMatrix(i + 1, j + 1))
    Next j
    Next i
    Exit Sub
    For i = 0 To N - 1
    For j = 0 To N - 1
    On Error GoTo ErrDbl
    Matrix2(i, j) = CDbl(FGMatrix2.TextMatrix(i + 1, j + 1))
    Next j
    Next i
    Exit Sub
    For i = 0 To N - 1
    For j = 0 To N - 1
    On Error GoTo ErrDbl
    Matrix2(i, j) = CDbl(FGMatrix2.TextMatrix(i + 1, j + 1))
    Next j
    Next i
    Exit Sub
    ErrDbl:
    If Err.Number = 13 Then
    MsgBox (("Неверный ввод."), ), vbExclamation, "Ошибка"

    Exit Sub
    End If
    End Sub


    Private Sub Razmer_Change()
    If CInt(Razmer.Text) < 1 Then N = 1: Razmer.Text = CStr(N): TabCreate
    End Sub

    'создание таблицы.Ввод только цифр в текстовое поле "Razmer" и создание таблицы принажатии ENTER
    Private Sub Razmer_KeyPress(KeyAscii As Integer)
    If KeyAscii > 47 And KeyAscii < 59 Or KeyAscii = 8 Or KeyAscii = 13 Then 'рарешается вводить значения клавишь от 48 до 58,т.е. 0-9 а также использование клавиш ENTER(13) и Backspase(8)
    If KeyAscii = 13 Then
    On Error GoTo ErrNotNum 'обработка ошибки
    If CInt(Razmer.Text) > 0 And CInt(Razmer.Text) < 101 Then 'размер матрицы от 1 до 100
    N = CInt(Razmer.Text)
    TabCreate
    Else
    MsgBox ("Введите значение от 1 до 100"), , vbCritical, "Ошибка"
    End If
    End If
    Else
    KeyAscii = 0
    End If
    Exit Sub
    ErrNotNum:
    If Err.Number = 13 And Razmer.Text <> "" Then MsgBox ("Должны быть только цифры"), vbCritical, "Ошибка" '13-ошибка не соответсвия типа
    End Sub
    'создание новой таблицы. Нажатие кнопки "Создать"
    Private Sub Sozdat_Click()
    On Error GoTo ErrNotNum 'обработка ошибки
    If CInt(Razmer.Text) > 0 And CInt(Razmer.Text) < 101 Then 'размер матрицы от 1 до 100
    N = CInt(Razmer.Text)
    TabCreate
    Else
    MsgBox ("Введите значение от 1 до 100"), vbCritical, "Ошибка"
    End If
    ErrNotNum:
    If Err.Number = 13 Then MsgBox ("Должны быть только цифры"), vbCritical, "Ошибка" '13-ошибка не соответсвия типа
    End Sub
    Private Sub Form_Load()
    ' bExit = False
    ' bReshenie = True
    N = 1
    TabCreate

    End Sub
    'измениение размеров и положений элементов при измениении размеров основного окна
    Private Sub Matrix_Resize()
    If Matrix.Height - 1800 > 0 Then
    FlexGridMatrix.Height = Matrix.Height - 1800
    FGMatrix.Height = Matrix.Height - 2600
    FGMatrix2.Height = Matrix.Height - 2600
    FGMatrix3.Height = Matrix.Height - 2600
    End If
    If Matrix.Width - 300 > 0 Then
    FlexGridMatrix.Width = Matrix.Width - 300
    FGMatrix.Width = Matrix.Width - 500
    FGMatrix2.Width = Matrix.Width - 500
    FGMatrix3.Width = Matrix.Width - 500
    End If
    End Sub
    'процедура создания таблицы
    Private Sub TabCreate()
    Dim Ntab As Integer
    Ntab = N + 1
    With FGMatrix
    .Rows = Ntab
    .Cols = Ntab
    For i = 1 To N
    .Col = 0
    .Row = i
    .CellAlignment = 4
    .TextMatrix(i, 0) = CStr(i)
    Next i
    For i = 1 To Ntab - 1
    .Row = 0
    .Col = i
    .ColWidth(i) = 500
    .CellAlignment = 4
    .TextMatrix(0, i) = CStr(i)
    Next i
    .RowHeight(0) = 300
    .ColWidth(0) = 300
    End With
    With FGMatrix2
    .Rows = Ntab
    .Cols = Ntab
    For i = 1 To N
    .Col = 0
    .Row = i
    .CellAlignment = 4
    .TextMatrix(i, 0) = CStr(i)
    Next i
    For i = 1 To Ntab - 1
    .Row = 0
    .Col = i
    .ColWidth(i) = 500
    .CellAlignment = 4
    .TextMatrix(0, i) = CStr(i)
    Next i
    .RowHeight(0) = 300
    .ColWidth(0) = 300
    End With
    With FGMatrix3
    .Rows = Ntab
    .Cols = Ntab
    For i = 1 To N
    .Col = 0
    .Row = i
    .CellAlignment = 4
    .TextMatrix(i, 0) = CStr(i)
    Next i
    For i = 1 To Ntab - 1
    .Row = 0
    .Col = i
    .ColWidth(i) = 500
    .CellAlignment = 4
    .TextMatrix(0, i) = CStr(i)
    Next i
    .RowHeight(0) = 300
    .ColWidth(0) = 300
    End With

    End Sub
    'ввод данных в ячейку
    Private Sub FGMatrix_KeyPress(KeyAscii As Integer)
    If FGMatrix.Col <> N + 1 Then
    If KeyAscii >= 48 And KeyAscii <= 57 Or KeyAscii = 45 Or KeyAscii = 46 Or KeyAscii = 44 Then
    If KeyAscii = 46 Then KeyAscii = 44
    FGMatrix.Text = FGMatrix.Text + Chr(KeyAscii)
    ElseIf KeyAscii = 8 And Len(FGMatrix.Text) > 0 Then
    FGMatrix.Text = Mid(FGMatrix.Text, 1, Len(FGMatrix.Text) - 1)
    ElseIf KeyAscii = 13 And FGMatrix.Row = N Then
    FGMatrix.Row = 1
    ElseIf KeyAscii = 13 And FGMatrix.Row <> N Then
    FGMatrix.Row = FGMatrix.Row + 1
    End If
    End If
    Polozhenie.Caption = CStr(FGMatrix.Row) + "x" + CStr(FGMatrix.Col)
    Soderzhanie.Text = FGMatrix.Text
    End Sub
    Private Sub FGMatrix2_KeyPress(KeyAscii As Integer)
    If FGMatrix2.Col <> N + 1 Then
    If KeyAscii >= 48 And KeyAscii <= 57 Or KeyAscii = 45 Or KeyAscii = 46 Or KeyAscii = 44 Then
    If KeyAscii = 46 Then KeyAscii = 44
    FGMatrix2.Text = FGMatrix2.Text + Chr(KeyAscii)
    ElseIf KeyAscii = 8 And Len(FGMatrix2.Text) > 0 Then
    FGMatrix2.Text = Mid(FGMatrix2.Text, 1, Len(FGMatrix2.Text) - 1)
    ElseIf KeyAscii = 13 And FGMatrix2.Row = N Then
    FGMatrix2.Row = 1
    ElseIf KeyAscii = 13 And FGMatrix2.Row <> N Then
    FGMatrix2.Row = FGMatrix2.Row + 1
    End If
    End If
    Polozhenie2.Caption = CStr(FGMatrix2.Row) + "x" + CStr(FGMatrix2.Col)
    Soderzhanie2.Text = FGMatrix2.Text
    End Sub

    'размер матрицы
    Private Sub UpDown1_Change()
    N = CInt(Razmer.Text)
    TabCreate
    End Sub
    'выбор ячейки
    Private Sub FGMatrix_SelChange()
    Polozhenie.Caption = CStr(FGMatrix.Row) + "x" + CStr(FGMatrix.Col)
    Soderzhanie.Text = FGMatrix.Text
    End Sub
    Private Sub FGMatrix2_SelChange()
    Polozhenie2.Caption = CStr(FGMatrix2.Row) + "x" + CStr(FGMatrix2.Col)
    Soderzhanie2.Text = FGMatrix2.Text
    End Sub
    Private Sub Soderzhanie_KeyPress(KeyAscii As Integer)
    If FGMatrix.Col <> (N) And FGMatrix.Col <> 0 And FGMatrix.Row <> 0 Then
    If KeyAscii >= 48 And KeyAscii <= 58 Or KeyAscii = 45 Or KeyAscii = 46 Or KeyAscii = 44 Or KeyAscii = 8 Then
    If KeyAscii = 46 Then KeyAscii = 44
    Else
    KeyAscii = 0
    End If
    End If
    End Sub
    Private Sub Soderzhanie_Change()
    If FGMatrix.Col <> N And FGMatrix.Col <> 0 And FGMatrix.Row <> 0 Then
    FGMatrix.Text = Soderzhanie.Text
    End If
    End Sub
    Private Sub Soderzhanie2_KeyPress(KeyAscii As Integer)
    If FGMatrix2.Col <> (N) And FGMatrix2.Col <> 0 And FGMatrix2.Row <> 0 Then
    If KeyAscii >= 48 And KeyAscii <= 58 Or KeyAscii = 45 Or KeyAscii = 46 Or KeyAscii = 44 Or KeyAscii = 8 Then
    If KeyAscii = 46 Then KeyAscii = 44
    Else
    KeyAscii = 0
    End If
    End If
    End Sub
    Private Sub Soderzhanie2_Change()
    If FGMatrix2.Col <> N And FGMatrix2.Col <> 0 And FGMatrix2.Row <> 0 Then
    FGMatrix2.Text = Soderzhanie2.Text
    End If
    End Sub

    Private Sub Matrix_Load()
    N = 1
    TabCreate
    End Sub
    Программа не присваивает значения табличек FGMatrix, FGmatrix2, FGMatrix3 матрицам Matrix,Matrix2,Matrix3
    Вот форма:
    [​IMG]

    Помогите дописать чтобы значение определителя выводилось в Textbox(Text1), а результат суммы, умножения и транспонирования в 3ью табличку FGMatrix3

    У меня есть умножение, транспонирование и сложение только на си:
    умножение:
    Код (C++):
    // умножение двух матриц
    double umnozhenie()
    {

    Matrix3=new double*[N];  
    for (int i=0; i<N; i++)
    {                  
    Matrix3[i]=new double[N];
    for (int j=0; j<N; j++)
    {
    Matrix3[i][j]=0;
    for(int k=0;k<N;k++)
    Matrix3[i][j] +=Matrix[i][k]*Matrix2[k][j];
    }
    }


    return 0;
    }
    Сложение:
    Код (C++):
    // сложение двух матриц
    double slozhenie()
    {

    Matrix3=new double*[N];
    for (int i=0; i<N; i++)
    {
    Matrix3[i]=new double[N];
    for (int j=0; j<N; j++)
    {
    Matrix3[i][j] = Matrix[i][j] + Matrix2[i][j];
    cout<<Matrix3[i][j]<<"\t";
    }
    cout<<endl;
    }

    return 0;
    }
    Транспонирование:
    Код (C++):
    //транспонирование
    double transpon()
    {
    Matrix3=new double*[N];
    for (int i=0; i<N; i++)
    {
    Matrix3[i]=new double[N];
    for (int j=0; j<N; j++)
    {
    Matrix3[i][j] = Matrix[j][i];
    cout<<Matrix3[i][j]<<"\t";
    }
    cout<<endl;
    }

    return 0;
    }
     
  2. androE51

    androE51 Гость

    Парни помогите что означает: 3Public N_correct As Boolean
     
  3. hosm

    hosm * so what *

    Регистрация:
    18 май 2009
    Сообщения:
    2.450
    Симпатии:
    7
    описание глобальное переменной N_correct типа Boolean (принимает значения True или False)
    Подробнее?
    3 - хз, если не опечатка, то скорее всего, просто номер строки =)
    Public - служебное слово для описания глобальной переменной (используется также для ф-ции, процедуры...)
    N_correct - идентификатор (имя переменной)
    As - служебное слово для описания типа переменной
    Boolean - имя типа
     
Загрузка...
Похожие Темы - Матрицы
  1. Dantes95
    Ответов:
    0
    Просмотров:
    1.013
  2. kobrin13
    Ответов:
    0
    Просмотров:
    1.031
  3. FCDK
    Ответов:
    0
    Просмотров:
    1.263
  4. PahaStar
    Ответов:
    0
    Просмотров:
    1.077
  5. Evgesha777
    Ответов:
    1
    Просмотров:
    1.398

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