Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

RFpro.ru: Программирование на Basic / VBA


Хостинг портала RFpro.ru:
Московский хостер
Профессиональный платный хостинг на базе Windows 2008

РАССЫЛКИ ПОРТАЛА RFPRO.RU

Чемпионы рейтинга экспертов в этой рассылке

Botsman
Статус: Специалист
Рейтинг: 516
∙ повысить рейтинг »
Megaloman
Статус: Бакалавр
Рейтинг: 461
∙ повысить рейтинг »
Тимошенко Дмитрий
Статус: Студент
Рейтинг: 461
∙ повысить рейтинг »

/ КОМПЬЮТЕРЫ И ПО / Языки программирования / Basic/VBA

Номер выпуска:930
Дата выхода:20.09.2009, 21:00
Администратор рассылки:Калашников О.А., Руководитель
Подписчиков / экспертов:363 / 92
Вопросов / ответов:1 / 1

Вопрос № 172209: Доброе время суток! Необходима помощь по написанию кода в VBA. Дана целочисленная квадратная матрица. Определить: 1) сумму элементов в тех строках, которые не содержат отрицательных элементов; 2) минимум среди сумм элементов диагоналей, ...



Вопрос № 172209:

Доброе время суток! Необходима помощь по написанию кода в VBA.

Дана целочисленная квадратная матрица. Определить:
1) сумму элементов в тех строках, которые не содержат отрицательных элементов;
2) минимум среди сумм элементов диагоналей, параллельных главной диагонали матрицы.

Предусмотреть ввод и вывод данных на лист Excel и через пользовательские формы.

Кому не трудно, помогите! Заранее благодарен!

Отправлен: 15.09.2009, 20:45
Вопрос задал: smayl, Посетитель
Всего ответов: 1
Страница вопроса »


Отвечает Витер Александр Анатольевич, 9-й класс :
Здравствуйте, smayl.
Я не совсем понял, что значит вывод данных на лист Excel. Предлагаю такой макрос для Excel. Нужно ввести числа в ячейки, выделить их и запустить макрос. Результат будет показан в виде сообщения:
Код:
Sub SquareMatrix()
Dim nCurrRowSumm As Long 'Сумма в текущей строке
Dim nTotalRowsSumm As Long 'Сумма во всех строках
Dim oRngWork As Range 'Переменная для диапазона, с которым будем работать
Dim oRow As Range 'Переменная для перебора строк в диапазоне
Dim oCell As Range 'Переменная для перебора ячеек в строке

'Если в выбранном диапазоне меньше четырех ячеек (минимальный размер квадратной матрицы) или количество строк _
не равно количеству столбцов (матрица не квадратн ая)
If Selection.Cells.Count < 4 Or Selection.Rows.Count <> Selection.Columns.Count Then Exit Sub

Set oRngWork = Selection.Cells(1).Resize(Selection.Rows.Count, Selection.Columns.Count)
For Each oRow In oRngWork.Rows
nCurrRowSumm = 0
For Each oCell In oRow.Cells
If oCell.Value >= 0 Then
nCurrRowSumm = nCurrRowSumm + CInt(oCell.Value)
Else
nCurrRowSumm = 0
Exit For
End If
Next oCell
nTotalRowsSumm = nTotalRowsSumm + nCurrRowSumm
Next oRow

Dim i As Long 'Счетчик строк
Dim j As Long 'Счетчик столбцов над или под диагональю
Dim k As Long 'Счетчик столбцов
Dim nMinDiagSumm As Long 'Минимальная сумма диагоналей
Dim nDiagSum As Long 'Сумма элементов текущей диагонали
'Минимальная сумма элементов диагоналей, параллельных главной и _
расположенных над ней
k = 2
Do While k < oRngWork. Rows.Count
nDiagSum = 0
i = 1
j = k
Do While i < oRngWork.Rows.Count - k + 2
'oRngWork.Cells(i, j).Interior.Color = RGB(0, 255, 0)
nDiagSum = nDiagSum + oRngWork.Cells(i, j).Value
'oRngWork.Cells(i, j).Interior.Color = 16777215
i = i + 1: j = j + 1
Loop
If nDiagSum < nMinDiagSumm And nMinDiagSumm <> 0 Then
nMinDiagSumm = nDiagSum
ElseIf nMinDiagSumm = 0 Then
nMinDiagSumm = nDiagSum
End If
k = k + 1
Loop
'Минимальная сумма элементов диагоналей, параллельных главной и _
расположенных под ней
k = oRngWork.Rows.Count - 1
Do While k > 1
i = oRngWork.Rows.Count
j = k
Do While i > oRngWork.Rows.Count - k
'oRngWork.Cells(i, j).Interior.Color = RGB(0, 255, 0)
nDiagSum = nDiagSum + oRngWork.Cells(i, j).Value
'oRngWork.Cells(i, j).Interior.Color = 16777215
i = i - 1: j = j - 1
Loop
If nDiagSum < nMinDiagSumm And nMinDiagSumm <> 0 Then
nMinDiagSumm = nDiagSum
ElseIf nMinDiagSumm = 0 Then
nMinDiagSumm = nDiagSum
End If
k = k - 1
Loop
MsgBox "Сумма элементов матрицы, в строках которых нет отрицательных элементов равна " & nTotalRowsSumm & vbCr & vbCr & _
"Минимум сумм элементов диагоналей, параллельных главной равен " & nMinDiagSumm, vbInformation + vbOKOnly, "Матрица " & oRngWork.Rows.Count & "x" & oRngWork.Columns.Count & " элементов"
End Sub

-----
Лучше день потерять - потом за пять минут долететь!

Ответ отправил: Витер Александр Анатольевич, 9-й класс
Ответ отправлен: 15.09.2009, 23:24

Оценка ответа: 5
Комментарий к оценке:
Спасибо! Сделано очень быстро! Я даже не ожидал такого быстрого ответа!

Как сказать этому эксперту "спасибо"?
  • Отправить SMS #thank 254228 на номер 1151 (Россия) | Еще номера »
  • Отправить WebMoney:
  • Вам помогли? Пожалуйста, поблагодарите эксперта за это!


    Оценить выпуск »
    Нам очень важно Ваше мнение об этом выпуске рассылки!

    Задать вопрос экспертам этой рассылки »

    Скажите "спасибо" эксперту, который помог Вам!

    Отправьте СМС-сообщение с тестом #thank НОМЕР_ОТВЕТА
    на короткий номер 1151 (Россия)

    Номер ответа и конкретный текст СМС указан внизу каждого ответа.

    Полный список номеров »

    * Стоимость одного СМС-сообщения от 7.15 руб. и зависит от оператора сотовой связи. (полный список тарифов)
    ** При ошибочном вводе номера ответа или текста #thank услуга считается оказанной, денежные средства не возвращаются.
    *** Сумма выплаты эксперту-автору ответа расчитывается из суммы перечислений на портал от биллинговой компании.


    © 2001-2009, Портал RFpro.ru, Россия
    Авторское право: ООО "Мастер-Эксперт Про"
    Автор: Калашников О.А. | Программирование: Гладенюк А.Г.
    Хостинг: Компания "Московский хостер"
    Версия системы: 2009.6.8 от 28.08.2009

    В избранное