Смена местами диагоналей матрицы

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Malone32®
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 116
Зарегистрирован: 23.01.2005 (Вс) 21:19
Откуда: Оттуда

Смена местами диагоналей матрицы

Сообщение Malone32® » 18.04.2006 (Вт) 8:17

Как поменять местами соответствующие элементы главной и побочной диагоналей матрицы? Никак не могу найти свою ошибку..

Dim i As Integer, j As Integer, razmer As Integer
Dim znak As Integer, k As Integer
Dim a() As Integer, c As Integer
Randomize
razmer = Int(Rnd * 3) + 2
ReDim a(1 To razmer, 1 To razmer)
For i = 1 To razmer
For j = 1 To razmer
znak = Int(Rnd * 2)
a(i, j) = Int(Rnd * 9)
If stroka = "" Then
stroka = a(i, j)
Else
stroka = stroka & " " & a(i, j)
End If
Next
List1.AddItem stroka
stroka = ""
Next

k = razmer + 1
For i = 1 To razmer
For j = 1 To razmer
If i = j Then
c = a(i, j)
k = k - 1
a(i, j) = a(i, k)
a(i, k) = c
End If
stroka = stroka & " " & a(i, j)
Next
List2.AddItem stroka
stroka = ""
Next

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 18.04.2006 (Вт) 8:30

Код: Выделить всё
For i = 1 To razmer
  If i <> (razmer-i)+1 Then
    c = a(i, i)
    a(i, i) = a(i, razmer-i+1)
    a(i, razmer-i+1) = c
  End If
Next i
Lasciate ogni speranza, voi ch'entrate.

Malone32®
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 116
Зарегистрирован: 23.01.2005 (Вс) 21:19
Откуда: Оттуда

Сообщение Malone32® » 18.04.2006 (Вт) 8:44

alibek, извини я не понял твой код... :oops: :oops: :oops:

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 18.04.2006 (Вт) 8:46

Что именно непонятно?
Этот код меняет местами диагональные элементы квадратной матрицы.
Lasciate ogni speranza, voi ch'entrate.

Malone32®
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 116
Зарегистрирован: 23.01.2005 (Вс) 21:19
Откуда: Оттуда

Сообщение Malone32® » 18.04.2006 (Вт) 8:50

Не понял куда его всталять. Если правильно вставил, то результат точно такой, каким и был....

Viper
Артефакт VBStreets
Артефакт VBStreets
Аватара пользователя
 
Сообщения: 4394
Зарегистрирован: 12.04.2005 (Вт) 17:50
Откуда: Н.Новгород

Сообщение Viper » 18.04.2006 (Вт) 10:47

Неужто не меняет?
Весь мир матрица, а мы в нем потоки байтов!

Malone32®
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 116
Зарегистрирован: 23.01.2005 (Вс) 21:19
Откуда: Оттуда

Сообщение Malone32® » 18.04.2006 (Вт) 15:20

alibek, ты такой код имел в виду? он не работает нормально, некоторые элементы не меняет

Код: Выделить всё
Dim i As Integer, j As Integer, razmer As Integer
Dim znak As Integer, k As Integer
Dim a() As Integer, c As Integer
Randomize
'znak = 1
razmer = Int(Rnd * 3) + 2
ReDim a(1 To razmer, 1 To razmer)
    For i = 1 To razmer
        For j = 1 To razmer
'            znak = Int(Rnd * 2)
'                If znak Mod 2 = 1 Then
'                    znak = -znak
'                Else
'                    znak = znak
'                End If
                     a(i, j) = Int(Rnd * 9) ' * znak
            If stroka = "" Then
                stroka = a(i, j)
            Else
                stroka = stroka & "   " & a(i, j)
            End If
        Next
        List1.AddItem stroka
    stroka = ""
    Next

For i = 1 To razmer
    For j = 1 To razmer
        If j <> (razmer - j) + 1 Then
            c = a(j, j)
            a(j, j) = a(j, razmer - j + 1)
            a(j, razmer - j + 1) = c
        End If
            If stroka = "" Then
                stroka = a(i, j)
            Else
                stroka = stroka & "   " & a(i, j)
            End If
    Next
    List2.AddItem stroka
stroka = ""
Next

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 18.04.2006 (Вт) 15:57

Зачем тебе два вложенных цикла???
Lasciate ogni speranza, voi ch'entrate.

Viper
Артефакт VBStreets
Артефакт VBStreets
Аватара пользователя
 
Сообщения: 4394
Зарегистрирован: 12.04.2005 (Вт) 17:50
Откуда: Н.Новгород

Сообщение Viper » 18.04.2006 (Вт) 16:42

у меня такое ощущение, что автор хочет что-то другое, а не то что спрашивает...
Весь мир матрица, а мы в нем потоки байтов!

Malone32®
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 116
Зарегистрирован: 23.01.2005 (Вс) 21:19
Откуда: Оттуда

Сообщение Malone32® » 19.04.2006 (Ср) 16:26

alibek, извиняюсь за наглость, но не мог бы ты написать полный рабочий код, а то я совсем запутался...
Два вложенных цикла использую для того, чтобы был выведен результат. А что, можно обойтись одним??
Спасибо.

Malone32®
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 116
Зарегистрирован: 23.01.2005 (Вс) 21:19
Откуда: Оттуда

Сообщение Malone32® » 20.04.2006 (Чт) 20:51

Кто-нибудь знает где моя ошибка, не мог бы кто-нибудь мне помочь?


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 186

    TopList  
cron