Форум программистов, компьютерный форум, киберфорум
VBA
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/21: Рейтинг темы: голосов - 21, средняя оценка - 4.67
0 / 0 / 0
Регистрация: 04.12.2011
Сообщений: 6
1

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

12.12.2011, 23:45. Показов 4317. Ответов 11
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Задача: Составьте процедуру, изменяющую исходный одномерный массив путем деления его положительных элементов на свои индексы и считающую число таких замен. Используя эту процедуру, определите, в каком из двух заданных одномерных массивов А или В будет больше измененных элементов.

Последовательность решения:
1. Введите в столбцы Excel A и B любые числовые значения (положительные и отрицательные) в количестве 10-15 на каждый столбец.
2. Создайте макрос или кнопку.
3. В коде макроса объявите и инициализируйте c листа Excel два массива A и B необходимой размерности (используйте функцию Cells)
4. Напишите код процедуры принимающую следующие аргументы по ссылке:
M – одномерный массив (тип Double)
R – число перестановок (тип Double)
5. Используя эту процедуру выполните необходимые преобразования и вычисления для массивов А и B.
6. Массив у которого будет большее количество замен необходимо вывести в столбец Excel D
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
12.12.2011, 23:45
Ответы с готовыми решениями:

Изменить исходный одномерный массив путем деления его положительных элементов на свои индексы
Уж извините,что беспокою,но не могли бы вы мне помочь с заданием-просто в Visual Basic я никакой,а...

Образовать массив B (N, M) путем деления элементов массива A (N, M) на сумму его положительных элементов
помогите пожалуйста... Дан двумерный массив A(N,M). образовать массив B(N,M) путем деления...

Одномерный массив.Найти среднее положительных элементов.максимум и его индексы
В массиве из К чисел найти среднее положительных элементов,определить максимум и его...

Составьте функцию, изменяющую одномерный массив целых чисел следующим обра-зом: к значению каждого положительного элемента прибавляется его индекс
Составьте функцию, изменяющую одномерный массив целых чисел следующим обра-зом: к значению каждого...

11
ZV
3 / 3 / 0
Регистрация: 17.04.2011
Сообщений: 128
13.12.2011, 00:01 2
Свойства - макросы - редактор вба. В открывшееся окошко пишешь код на вба. Продлемы с кодом - пишешь сюда. Поглядим, подправим. Если необходимо готовое решение - укажи сроки и напиши мне. Или в фриланс.
0
0 / 0 / 0
Регистрация: 04.12.2011
Сообщений: 6
13.12.2011, 00:49  [ТС] 3
Большое спасибо за ответ)
Вот, пыталась что-то сделать... Нужно, лучше к завтрашнему вечеру, не могу понять это вообще, т.к. не проходила процедуры.
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
Sub CommandButton1_Click()
Dim i As Integer, j As Integer, R As Double, R1 As Integer, R2 As Integer
ReDim A(1 To 10) As Double
ReDim B(1 To 10) As Double
For i = 1 To 10
For j = 1 To 2
A(i) = Int(-50 + 100 * Rnd())
Cells(i, 1) = A(i)
B(i) = Int(-50 + 100 * Rnd())
Cells(i, 2) = B(i)
Call procedura(A(), B(), M, R)
Next j
Next i
End Sub
 
Sub procedura(ByRef A() As Double, ByRef B() As Double, ByVal M As Double, ByRef R As Double)
Dim R1 As Integer, R2 As Integer
R = 0
For i = 1 To 10
If A(i) > 0 Then
M = A(i) / i
R = R + 1
Else
M = A(i)
End If
Cells(i, 6) = M
R1 = R
If B(i) > 0 Then
M = B(i) / i
R = R + 1
Else
M = B(i)
End If
R2 = R
Cells(i, 7) = M
Next i
For i = 1 To 10
If R1 < R2 Then
Cells(i, 4) = Cells(i, 7)
ElseIf R1 > R2 Then
Cells(i, 4) = Cells(i, 6)
End If
Cells(i, 6) = Cells(i, 8)
Cells(i, 7) = Cells(i, 8)
Next i
End Sub
0
11508 / 3794 / 681
Регистрация: 13.02.2009
Сообщений: 11,197
13.12.2011, 01:00 4
Ошибка в том, что процедура должна принимать только один массив.
Её нужно вызвать 2 раза.
Сейчас посмотрю
0
0 / 0 / 0
Регистрация: 04.12.2011
Сообщений: 6
13.12.2011, 01:01  [ТС] 5
Спасибо) Буду ждать)
0
11508 / 3794 / 681
Регистрация: 13.02.2009
Сообщений: 11,197
13.12.2011, 01:21 6
Ну, вроде так:
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
Sub CommandButton1_Click()
Dim i As Integer, j As Integer, R As Double
Dim R1 As Integer, R2 As Integer
Dim A(1 To 10) As Double
Dim B(1 To 10) As Double
Dim C() As Double
Cells.ClearContents
For i = 1 To 10
A(i) = Int(-50 + 100 * Rnd())
Cells(i, 1) = A(i)
B(i) = Int(-50 + 100 * Rnd())
Cells(i, 2) = B(i)
Next i
 procedura A, R
 R1 = R
 procedura B, R
 R2 = R
C = IIf(R1 > R2, A, B)
j = IIf(R1 > R2, 1, 2)
For i = 1 To 10
Cells(i, 3) = C(i)
Next i
MsgBox "В массиве №1 сделано " & R1 & " перестановок" & vbCrLf _
& "В массиве №2 сделано " & R2 & " перестановок" & vbCrLf _
& "На лист выведен массив № " & j, 64, "Итог работы"
 
End Sub
 
Sub procedura(ByRef M, ByRef R As Double)
Dim i as Byte
R = 0
For i = 1 To 10
If M(i) > 0 Then M(i) = M(i) / i: R = R + 1
Next i
End Sub
0
0 / 0 / 0
Регистрация: 04.12.2011
Сообщений: 6
13.12.2011, 01:24  [ТС] 7
Огромное спасибо!!!
Только подскажите, пожалуйста, что это значит?)
C = IIf(R1 > R2, A, B)
j = IIf(R1 > R2, 1, 2)
0
11508 / 3794 / 681
Регистрация: 13.02.2009
Сообщений: 11,197
13.12.2011, 01:30 8
Обратите внимание на ньанс:
Хоть в основной процедуре массивы объявлены Double, в процедуру массив передаётся как Variant

Добавлено через 2 минуты
Это значит если если условие выплоняется массив С будет равен масиву А. В противном случае массиву В. А цикл выводит на лист всегда С.
Т.е. проверяется условие где было больше перестановок
1
0 / 0 / 0
Регистрация: 04.12.2011
Сообщений: 6
13.12.2011, 01:31  [ТС] 9
Спасибо большое))))
0
11508 / 3794 / 681
Регистрация: 13.02.2009
Сообщений: 11,197
13.12.2011, 01:33 10
А J используется как номер массива в сообщении

Добавлено через 1 минуту
Для "спасиб" кнопочка
1
0 / 0 / 0
Регистрация: 04.12.2011
Сообщений: 6
13.12.2011, 01:33  [ТС] 11
То есть это можно переписать попроще?) с помощью if else endif? или я не так понимаю?) просто я такое еще в первый раз вижу)
0
11508 / 3794 / 681
Регистрация: 13.02.2009
Сообщений: 11,197
13.12.2011, 01:34 12
Можно. Но разве 5 строчек проще 1?
0
13.12.2011, 01:34
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
13.12.2011, 01:34
Помогаю со студенческими работами здесь

Сформировать массив путем деления положительных элементов заданной матрицы на число K
Дан двумерный массив. Сформировать одномерный массив путем деления положительных элементов заданной...

Получить новый массив путем деления всех элементов массива на его наименьший элемент
Решите плиз задачи 2)19. Дан двумерный массив размерностью n*m, в котором не все элементы равны...

Получить новый массив путем деления всех элементов данного массива на его больший по модулю элемент
Дан действительный массив размерностью n*m, в которой не все элементы равны нулю. Получить новый...

Сформировать одномерный массив путём деления положительных элементов заданной матрицы на число к
заполнить двумерный массив с клавиатуры 1) предусмотрите замену вводимых отрицательных элементов...


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

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru