Форум программистов, компьютерный форум, киберфорум
Наши страницы

VBA

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

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

25.09.2009, 20:29. Просмотров 2272. Ответов 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):

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

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

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

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

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

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

7
Abu
1154 / 279 / 14
Регистрация: 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
Пробующий
183 / 96 / 1
Регистрация: 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
Пробующий
183 / 96 / 1
Регистрация: 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
Привет! Вот еще темы с ответами:

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

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

Каждому элементу главной диагонали прибавить сумму предшествующих ему элементов данной строки - Turbo Pascal
Ребятки помогите пожалуйста, если не сложно будет поясните кратенько :) В заданной квадратной матрице А порядка n к каждому элементу...

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


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

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

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