Форум программистов, компьютерный форум, киберфорум
Наши страницы
VBA
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.67/6: Рейтинг темы: голосов - 6, средняя оценка - 4.67
sageman
2 / 2 / 0
Регистрация: 28.05.2013
Сообщений: 5
1

Сформировать матрицу произвольной размерности по правилу

28.05.2013, 16:37. Просмотров 1080. Ответов 4
Метки нет (Все метки)

Здравствуйте!
Прошу помочь в решения задачи: Сформировать матрицу произвольной размерности на рабочем листе Excel
Вопрос как сформировать программно матрицу вот такого вида:
1 0 0 0 1
1 1 0 1 1
1 1 1 1 1
1 1 0 1 1
1 0 0 0 1


Может кто подскажет хотя бы где ошибка или куда надо копать. Попробовал сам, но ничего не получается. Скорее всего из-за того, что я не программист))
Вот мой код:
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
Sub Matrix()
Dim i, j, n, m As Integer
n = 5
m = 5
For i = 1 To n
    Cells(i, i) = 1
Next i
 
For j = 1 To n
    Cells(j, m) = 1
    m = m - 1
Next j
 
m = 1
For i = 1 To n
  For j = m To n
    If ((Cells(j, m) <> 1) And (j <> n)) Then
      Cells(j, m) = 1
    End If
    
    
    If (Cells(i, j) <> 1) Then
        Cells(i, j) = 0
    End If
    
   Next j
  m = m + 1
Next i
 
 
End Sub
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.05.2013, 16:37
Ответы с готовыми решениями:

Сформировать матрицу произвольной размерности на листе Excel
Здравствуйте! Помогите пожалуйста с последним заданием. В программировании не силен, если не сложно...

Сформировать матрицы произвольной размерности на рабочем листе Excel
Здравствуйте. Прошу помочь с последним заданием. Нужно сформировать матрицы произвольной...

Сформировать матрицы произвольной размерности на рабочем листе Excel
Всем привет.Прошу помочь с последним заданием.Нужно сформировать матрицы произвольной размерности...

Формирование двумерных массивов. Сформировать матрицы произвольной размерности на рабочем листе Excel
Здравствуйте. Люди добрые помогите пожалуйста. Формирование двумерных массивов. Сформировать...

Формирование двумерных массивов. Сформировать матрицы произвольной размерности на рабочем листе Excel в BVA
Ребята помогите пожалуйста! Формирование двумерных массивов. Сформировать матрицы произвольной...

4
second3
166 / 13 / 2
Регистрация: 21.05.2013
Сообщений: 66
28.05.2013, 17:24 2
Лучший ответ Сообщение было отмечено Памирыч как решение

Решение

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
Sub xxx()
Dim a() As Integer
n = 6
 
ReDim a(n, n) As Integer
 
For i = 0 To n       'все что ниже главной диагонали = 1
  For j = 0 To n
    If i > j Then a(i, j) = 1
  Next j
Next i
 
For i = 0 To n      'инвертировать все ниже побочной диагонали
  For j = 0 To n
    If i > (n - j) Then
      If a(i, j) = 1 Then
        a(i, j) = 0
      Else
        a(i, j) = 1
      End If
    End If
  Next j
Next i
 
For i = 0 To n      'выставить значения на диагоналях в 1
  For j = 0 To n
    If i = j Then: a(i, j) = 1
    If i = (n - j) Then: a(i, j) = 1
  Next j
Next i
 
For i = 0 To n     'вывод в окне дебагера к ячейкам привязывай сам ;)
  s = ""
  For j = 0 To n
    s = s + Str(a(i, j))
  Next j
  Debug.Print s
Next i
 
End Sub
Добавлено через 7 минут
Если добавить до процедуры две строки, индексы массивов начнутся с единицы и n будет нечетным
Option Explicit
Option Base 1
1
sageman
2 / 2 / 0
Регистрация: 28.05.2013
Сообщений: 5
28.05.2013, 18:09  [ТС] 3
second3, Огромное спасибо! За такую оперативность отдельное спасибо!
0
toiai
3147 / 911 / 206
Регистрация: 29.05.2010
Сообщений: 1,977
28.05.2013, 18:34 4
Лучший ответ Сообщение было отмечено Памирыч как решение

Решение

Вот еще вариант:
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Sub Matriza()
    Dim a() As Integer, n%, s%, i%, j%, zn%, zk%
    Cells.Clear
    n = CInt(InputBox("Ââåäèòå Г°Г*çìåðГ*îñòü Г¬Г*òðèöû ГЁГ§ Г*ГҐГ·ГҐГІГ*ûõ Г·ГЁГ±ГҐГ«"))
    ReDim a(1 To n, 1 To n)
    s = n \ 2 + 1
    For i = 1 To n
        zn = IIf(i <= s, i, s - (i + 1) \ 2 + 1)
        zk = IIf(i <= s, n - i + 1, s + (i - 1) \ 2)
        For j = zn To zk
            a(j, i) = 1
        Next
    Next
    Cells(1, 1).Resize(n, n) = a
End Sub
1
sageman
2 / 2 / 0
Регистрация: 28.05.2013
Сообщений: 5
28.05.2013, 18:44  [ТС] 5
toiai, и вам огромное спасибо)
Вариант second3 работал немного не так как мне надо было, но я исправил по своему и оно дало тот результат, который мне нужен был. Вот мой вариант исправленный:
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
Sub Matrix()
 
Dim i, j, n, m As Integer
n = 5
m = 5
 
 
For i = 1 To n       'все что ниже главной диагонали = 1
  For j = 1 To n
    If i > j Then Cells(i, j) = 1
 Next j
Next i
 
For i = 1 To n      'инвертировать все ниже побочной диагонали
  For j = 1 To n
    If i > (n - j) Then
      If Cells(i, j) = 1 Then
        Cells(i, j) = 0
      Else
        Cells(i, j) = 1
      End If
    End If
  Next j
Next i
 
 
For i = 1 To n      'главная диагональ
    Cells(i, i) = 1
Next i
 
For j = 1 To n      'побочная диагональ
    Cells(j, m) = 1
    m = m - 1
Next j
 
m = 1
For i = 1 To n
    For j = m To n
        If ((Cells(j, m) <> 1) And (j <> n)) Then
            Cells(j, m) = 1
        End If
        
        
        If (Cells(i, j) <> 1) Then
            Cells(i, j) = 0
        End If
    Next j
Next i
 
End Sub

toiai, кстати, хотел спросить у вас - функция IIf(выражение, если_истина, если_ложь) - это нечто подобное foreche в С? Или я ошибаюсь? Просто не сталкивался с данной функцией.
0
28.05.2013, 18:44
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.05.2013, 18:44

Сформировать матрицу по правилу
Сформировать матрицу 0 0 0 1 0 0 1 0 0 1 0 0 1 0 0 0

Сформировать матрицу по правилу
Сформировать матрицу 55555555 54444445 53333335 54444445 55555555 Помогите!!! Добавлено...

Сформировать матрицу по правилу
Написать процедуру, которая формирует двумерный массив размерностью 5х5 по следующей схеме: 1 2...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru