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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 16.12.2010, 12:53   #1
koka278
 
Регистрация: 16.12.2010
Сообщений: 3
По умолчанию Матрицы(Visual Basic)

Здравствуйте помогите пожалуйста исправить ошибки и дописать 3 функции, для программы работы с квадратными матрицами : транспонирование, нахождение определителя, умножение 2х матриц и сложение 2х матриц
вот программа с функцией нахождения определителя
PHP код:
Dim i As IntegerAs IntegerAs IntegerAs Integer
Dim Result 
As String
Dim Matrix
() As DoubleMatrix2() As DoubleMatrix3() 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(ik))
        
End If
    
Next i
    
If maxl <> k Then 'если индекс строки максимального элемента столбца не равен индексу 
        det = det * (-1)
        For j = 0 To N - 1
            d = Matrix(k, j) '
то переставляем строку такчтобы максимальный элемент стоял на диагонали
            Matrix
(kj) = Matrix(maxlj)
            
Matrix(maxlj) = d
        Next j
    End 
If

    If 
Matrix(kk) <> 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 
0 To N 1
    
For 0 To N 1
        On Error 
GoTo ErrDbl
            Matrix
(ij) = CDbl(FGMatrix.TextMatrix(11))
    
Next j
Next i
Exit Sub
For 0 To N 1
    
For 0 To N 1
        On Error 
GoTo ErrDbl
            Matrix2
(ij) = CDbl(FGMatrix2.TextMatrix(11))
    
Next j
Next i
Exit Sub
For 0 To N 1
    
For 0 To N 1
        On Error 
GoTo ErrDbl
            Matrix2
(ij) = CDbl(FGMatrix2.TextMatrix(11))
    
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 1Razmer.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 

Последний раз редактировалось koka278; 16.12.2010 в 12:57. Причина: Не указал язык
koka278 вне форума Ответить с цитированием
Старый 16.12.2010, 12:54   #2
koka278
 
Регистрация: 16.12.2010
Сообщений: 3
По умолчанию

продолжение:
PHP код:
'измениение размеров и положений элементов при измениении размеров основного окна
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 
1
With FGMatrix
    
.Rows Ntab
    
.Cols Ntab
    
For 1 To N
        
.Col 0
        
.Row i
        
.CellAlignment 4
        
.TextMatrix(i0) = CStr(i)
    
Next i
    
For 1 To Ntab 1
        
.Row 0
        
.Col i
        
.ColWidth(i) = 500
        
.CellAlignment 4
        
.TextMatrix(0i) = CStr(i)
    
Next i
    
.RowHeight(0) = 300
    
.ColWidth(0) = 300
End With
With FGMatrix2
.Rows Ntab
    
.Cols Ntab
    
For 1 To N
        
.Col 0
        
.Row i
        
.CellAlignment 4
        
.TextMatrix(i0) = CStr(i)
    
Next i
    
For 1 To Ntab 1
        
.Row 0
        
.Col i
        
.ColWidth(i) = 500
        
.CellAlignment 4
        
.TextMatrix(0i) = CStr(i)
    
Next i
    
.RowHeight(0) = 300
    
.ColWidth(0) = 300
End With
With FGMatrix3
.Rows Ntab
    
.Cols Ntab
    
For 1 To N
        
.Col 0
        
.Row i
        
.CellAlignment 4
        
.TextMatrix(i0) = CStr(i)
    
Next i
    
For 1 To Ntab 1
        
.Row 0
        
.Col i
        
.ColWidth(i) = 500
        
.CellAlignment 4
        
.TextMatrix(0i) = 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()
    
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 
koka278 вне форума Ответить с цитированием
Старый 16.12.2010, 12:57   #3
koka278
 
Регистрация: 16.12.2010
Сообщений: 3
По умолчанию

Программа не присваивает значения табличек FGMatrix, FGmatrix2, FGMatrix3 матрицам Matrix,Matrix2,Matrix3
Вот форма:

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

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

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

Сложение:
PHP код:
// сложение двух матриц
double slozhenie()
{
    
    
Matrix3=new double*[N];
    for (
int i=0i<Ni++)
    {
        
Matrix3[i]=new double[N];
        for (
int j=0j<Nj++)
        {
            
Matrix3[i][j] = Matrix[i][j] + Matrix2[i][j];
            
cout<<Matrix3[i][j]<<"\t";
        }
        
cout<<endl;
    }

return 
0;

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

koka278 вне форума Ответить с цитированием
Старый 09.03.2015, 23:14   #4
убью
Новичок
Джуниор
 
Регистрация: 09.03.2015
Сообщений: 2
Восклицание Вывод массива в матричном виде!!!

Подскажите мне как вывести массив в матричном виде! VS2008 Express
убью вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Обращение матрицы методом союзной матрицы dofmat Помощь студентам 6 03.10.2011 15:01
TurboPascal: графы, матрицы смежности и матрицы инцидентности. ulala Помощь студентам 1 03.03.2011 19:28
Матрицы:функция изменения порядка столбцов матрицы Fajyz Помощь студентам 0 13.01.2010 09:40
На главную диагональ матрицы поместить наибольшие элементы этой матрицы mivel Помощь студентам 2 23.12.2009 21:19