Форум программистов, компьютерный форум, киберфорум
Наши страницы
VBA
Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 18, средняя оценка - 4.94
cooler_92
4 / 4 / 0
Регистрация: 22.05.2009
Сообщений: 69
#1

Прибавить к каждому элементу данной строки матрицы элемент, принадлежащий этой строке - VBA

25.09.2009, 20:29. Просмотров 2321. Ответов 7
Метки нет (Все метки)

Помогите плз, я запутался!
Дан массив A(N,N). Напишите программу, которая прибавляла бы к каждому элементу данной строки элемент, принадлежащий этой строке, и главной диагонали.

Кое что я написал, но у меня проблема - как из первого массива засунуть элементы главное диагонали во второй массив, до сложения я вообще еще не добрался... Приложу текст того, что я попытался написать..

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
Option Explicit
Option Base 1
 
Sub massiv()
 
Dim mas_1() As Integer
Dim mas_2() As Integer
Dim N As Integer
Dim i As Integer
Dim j As Integer
Dim elm As Integer
Dim elm_2 As Integer
Dim elm_3 As Integer
 
 
 
N = InputBox("Введите размерность массива:")
ReDim Preserve mas_1(N, N)
ReDim mas_2(N, N)
 
For i = 1 To N
  For j = 1 To N
  mas_1(i, j) = InputBox("Введите элементы массива")
    If i = j Then
    mas_2(elm, elm_2) = mas_1(i, j)
    End If
    For elm = 1 To N
      For elm_2 = 1 To N
      elm_3 = mas_2(elm, elm_2)
      Next elm_2
    Next elm
  Next j
Next i
 
End Sub
Помогите, пожалуйста, оч надеюсь..
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.09.2009, 20:29
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Прибавить к каждому элементу данной строки матрицы элемент, принадлежащий этой строке (VBA):

Построить вектор, каждый элемент которого равен сумме строк матрицы, деленной на элемент главной диагонали этой же строки
Построить вектор B,каждый элемент которого равен сумме рядков матрицы...

В каждой строке матрицы найти максимальный элемент и заменить им первый элемент строки
В матрице Х(4,5) в каждой строке найти максимальный элемент и заменить им...

В каждой строке матрицы найти количество элементов,меньших среднего арифметического всех элементов этой строки
2) Дана матрица размера MxN. В каждой ее строке найти количество...

Каждый элемент соответствующей строки разделить на сумму элементов этой строки
Задан двухмерный массив вещественных чисел А(n,m). Необходимо каждый элемент...

Поиск строки по значению ячейки в этой строке
Нужно найти строку по конкретному значению в колонке. А затем удалить ее или...

При вводе номерного знака в виде строки символов, найти в этой строке сочетание определенных цифр
Требуется написать программу которая при вводе номерного знака в виде строки...

7
Abu
1154 / 279 / 22
Регистрация: 28.09.2008
Сообщений: 553
25.09.2009, 22:54 #2
Лучший ответ Сообщение было отмечено Памирыч как решение

Решение

Если считать главной диагональю диагональ из элементов начиная с верхнего левого угла до нижнего правого угла, то вот так
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
Dim A() As Integer
Dim diagonal() As Integer
Dim i As Integer, j As Integer, N As Integer
N = Val(InputBox("Введите размерность массива:"))
If N < 1 Then Exit Sub
ReDim A(1 To N, 1 To N)
ReDim diagonal(1 To N)
For i = 1 To N
    For j = 1 To N
        A(i, j) = Val(InputBox("Введите элементы массива"))
        'заполняем А
        Cells(i, j) = A(i, j)
        'выводим для наглядности
    Next j
    diagonal(i) = A(i, i)
    'заполняем числом из главной диагонали
    Cells(N + 2, i) = diagonal(i)
    'выводим для наглядности
Next i
1
cooler_92
4 / 4 / 0
Регистрация: 22.05.2009
Сообщений: 69
26.09.2009, 20:17  [ТС] #3
Я примерно жо этого сегодня тоже добрался, но препод, плохая такая, говорит что вообще все вычисления должны производится в одном массиве, т.е. отдельный массив для диоганали нельзя создавать.
0
cooler_92
4 / 4 / 0
Регистрация: 22.05.2009
Сообщений: 69
27.09.2009, 11:41  [ТС] #4
Я тут посидел чуток... Подредактировал.. Итог такой

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
Option Explicit
Option Base 1
 
Sub massiv()
 
Dim mas_1() As Integer
Dim mas_2() As Integer
Dim a As String
Dim N As Integer
Dim i As Integer
Dim j As Integer
Dim elm As Integer
 
a = InputBox("Введите размерность массива:")
If a <= 0 Then
  MsgBox ("Размерность массива на может равняться нулю, или быть отрицательной!")
  Else
    If IsNumeric(a) = False Then
    MsgBox ("Разрешенно вводить только цифры!")
    Else
    N = CInt(a)
    ReDim mas_1(N, N)
    ReDim mas_2(N)
    End If
End If
 
For i = 1 To N
  For j = 1 To N
  mas_1(i, j) = InputBox("Введите элементы массива:")
    If i = j Then
    elm = elm + 1
    mas_2(elm) = mas_1(i, j)
    End If
  Next j
Next i
 
For i = 1 To N
  For j = 1 To N
  mas_1(i, j) = mas_1(i, j) + mas_2(i)
  Next j
Next i
 
End Sub
Теперь оч оч глупый вопрос... Как этот готовый массив показать на экране?? Перевести в строку, и через MsgBox? или еще как то? и еще... mas_2 мне тоже неоходимо убрать, чтоб программа работала только с одним массивом... Подскажите
0
galileopro
Пробующий
184 / 97 / 8
Регистрация: 28.04.2009
Сообщений: 1,040
27.09.2009, 12:32 #5
А нельзя так
Visual Basic
1
2
3
4
i=2 - номер строки, к которой будем прибавлять
For j = 1 To N
  mas_1(i, j) = mas_1(i, j) + mas_1(i, i)
  Next j
Добавлено через 7 минут
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
Dim mas_1() As Integer
Dim a As String
Dim N As Integer
Dim i As Integer
Dim j As Integer
Dim elm As Integer
 
a = InputBox("Введите размерность массива:")
If a <= 0 Then
  MsgBox ("Размерность массива на может равняться нулю, или быть отрицательной!")
  Else
    If IsNumeric(a) = False Then
    MsgBox ("Разрешенно вводить только цифры!")
    Else
    N = CInt(a)
    ReDim mas_1(N, N)
    End If
End If
 
 i = 2
  For j = 1 To N
  mas_1(i, j) = mas_1(i, j) + mas_1(i, i)
  Next j 
End Sub
1
cooler_92
4 / 4 / 0
Регистрация: 22.05.2009
Сообщений: 69
27.09.2009, 12:40  [ТС] #6
В первом случае, когда индексы равны, то прибавляется к первому элементу, а когда i=1 a j= предположим 2, то условие i=j не выполняется, и ко второму элементу первый не добавляется.

Добавлено через 1 минуту
Мне ведь не к одной строке добавлять нужно.
0
galileopro
Пробующий
184 / 97 / 8
Регистрация: 28.04.2009
Сообщений: 1,040
27.09.2009, 12:48 #7
Лучший ответ Сообщение было отмечено Памирыч как решение

Решение

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
Dim mas_1() As Integer
Dim a As String
Dim N As Integer
Dim i As Integer
Dim j As Integer
Dim elm As Integer
 
a = InputBox("Введите размерность массива:")
If a <= 0 Then
  MsgBox ("Размерность массива на может равняться нулю, или быть отрицательной!")
  Else
    If IsNumeric(a) = False Then
    MsgBox ("Разрешенно вводить только цифры!")
    Else
    N = CInt(a)
    ReDim mas_1(N, N)
    End If
End If
 
  For i = 1 To N
  For j = 1 To N
  mas_1(i, j) = mas_1(i, j) + mas_1(i, i)
  Next j
Next i 
End Sub
1
cooler_92
4 / 4 / 0
Регистрация: 22.05.2009
Сообщений: 69
27.09.2009, 14:49  [ТС] #8
Большое спасибо))) Сорри, за предыдущий глупый вопрос, что т я не заметил отсутствие условия))

Добавлено через 1 час 52 минуты
А я тут ошибку нашел.. результат не правильный выводится.
вот тут

Visual Basic
1
2
3
4
5
For i = 1 To N
  For j = 1 To N
  mas_1(i, j) = mas_1(i, j) + mas_1(i, i)
  Next j
Next i
например для первой строки первый элемент принадлежит главной диоганали, он наращивается на самого себя, а при следующем выполнении цикла значение этого элемента уже больше, и ко второму элементу прибавляется нарощенный элемент... Ппц запутанно получилось.. Лучше на примере.
Положим матрица
1 2 3
4 5 6
7 8 9

Элемент 1 на главной диоганали, он становится равным 2, а ко второму элементу уже не 1, а 2ка прибавляется.. Это не правильно...
И еще, все таки как его вывести на экран.. С помощью MsgBox внутри цикла выводится только по одному элементу, а мне необходимо всю измененную матрицу.. Помогитеее...)))
0
27.09.2009, 14:49
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.09.2009, 14:49
Привет! Вот еще темы с решениями:

Прибавить к каждому элементу данной строки элемент, принадлежащий этой строке и главной диагонали
Дан массив A. Составить программу, которая прибавила бы каждому элементу данной...

К каждому отрицательному элементу элементу матрицы прибавить количество положительных элементов в этой матрице
пожалуйста. еду в командировку по работе а надо сделать задачу Даны две...

К каждому элементу на главной диагонали прибавить сумму предшествующих ему элементов данной строки
заданы три квадратные матрицы А,В,С преобразовать эти матрицы по следующему...

Каждому элементу главной диагонали прибавить сумму предшествующих ему элементов данной строки
Если кому не трудно можете показать как это делается? Матрица квадратная


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

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

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