Работа с матрицей в VBA

Внезапно появились лабораторные :)

Задачка такая:

Создать матрицу размера n x n, заполнить случайными числами от (-20 до 30). Сформировать одномерный массив от 1 до n, каждый элемент которого равен произведению положительных четных элементов данного столбца.

Решаем так (естественно все делаем в Excel):

[code lang=»vb»]

Public Sub glav_diag()
Dim i As Integer ‘ Индекс строки
Dim j As Integer ‘ Индекс столбца
Dim q As Double ‘ Переменная результата для столбца
Dim cond As Integer ‘ Дополнительная переменная. Сколько раз выполнилось условие. Ее в принципе можно сделать булевой

n = InputBox(«n=») ‘ Просим ввести n — размерность массива. У нас он всегда квадратный

ReDim arr(n, n) ‘ Объявляем его
q = 1 ‘ Так как у нас по условию «произведение», то мы вынуждены написать тут 1, иначе (в случае 0) произведение всегда будет равно 0
cond = 0 ‘ условие пока не выполнилось
‘ Generation of array
For i = 1 To n
For j = 1 To n
arr(i, j) = Int((-20 — 30 + 1) * Rnd + 30) ‘ Рандом от -20 до 30
Cells(i, j).Value = arr(i, j) ‘ Забить это в ячейку
Cells(i, j).Interior.ColorIndex = xlNone ‘ Убрать цвет если он был
Next j
Next i

‘ Обработка и вычисления
For j = 1 To n
For i = 1 To n
If ((arr(i, j) > 0) And (arr(i, j) Mod 2 = 0)) Then ‘ Если значение массива больше 0 и четное
q = q * arr(i, j) ‘ тогда домножаем его на q и записываем новый результат в q
cond = cond + 1 ‘ Если условие выполнилось увеличиваем переменную
Cells(i, j).Interior.Color = vbCyan ‘ Закрашиваем соответствующую ячейку на листе цветом
End If
Next i
If (cond > 0) Then ‘ Если условие выше выполнилось хотя бы раз…
Cells(n + 1, j).Value = q ‘ тогда записываем значение вычислений в ячейку ниже нашей матрицы
Cells(n + 1, j).Interior.Color = vbGreen ‘ и красим в заленый
Else
Cells(n + 1, j).Value = 0 ‘ Если не выполнилось пишем туда 0 (таких элементов нет) просто q записать нельзя, так как он равен 1
Cells(n + 1, j).Interior.Color = vbGreen ‘ и тоже в зеленый
End If
cond = 0
q = 1
Next j
End Sub

[/code]

Вот такой простой код. Все комментарии в коде.

Скачать тестовым документом

Результат работы:

Continue reading

C++: Решето эратосфена на си. Простые числа

Ранее писал о простых числах. Нахождение простых чисел решетом эратосфена на C# тут сейчас же тоже самое на C++:

#include "stdafx.h"
#include <math.h>

void erato(int number)
{
	bool *a = new bool[number];
	for (int i = 0; i < number; i++)
		a[i] = true;
	for (int i = 0; i < number; i++)
	{
		for (int i = 2; i < sqrt(number*1.0) + 1; ++i)
		{
			if (a[i])
			{
				for (int j = i * i; j < number; j += i)
				{
					a[j] = false;
				}
			}
		}
	}
	for (int i = 2; i < number; i++)
	{
		if (a[i])
		printf("%d ", i);
	}
}

int _tmain(int argc, _TCHAR* argv[])
{
	int n;
	scanf("%d", &n);
	erato(n);
	return 0;
}

Access, C#: Получить список таблиц в Combobox и по нему загружать данные

Интересная вчера попалась задача. Есть стандартная база данных для MS Access. «Борей» называется. Что это может значить мне так и не понятно. Нужно написать программу которая загружает список таблиц в combobox, а потом по выбору из него таблицы загружает содержимое в DataGridView. Язык реализации C#.

Голову поломал, ушло 7 часов, но сделал. Я буду рад, если кому пригодится.

Continue reading

С++: Записать первые n членов геометрической прогрессии в файл

Задача:

Написать программу, которая принимает параметры, задающие геометрическую последовательность, а так же число n — количество элементов последовательности. Записать результат работы программы в файл.

Continue reading

Microsoft MVA: Всем учиться!

На почту пришла уведомлялка о новом сервисе Microsoft.

Приглашаем вас посетить новый бесплатный образовательный ресурс – виртуальную академию Microsoft (MVA). Ресурс предназначен для всех, кто стремится получать актуальные технические знания по продуктам и технологиям Microsoft, прежде всего, по виртуализации, публичному и частному облаку.

Мне кажется, такой ресурс полезен для изучения технологий Microsoft. Таким образом, в Российские образовательные ресурсы, помимо http://TechDays.ru, http://dreamspark-academy.ru/ , добавился еще один. Читать больше и регистрироваться можно тут: https://www.microsoftvirtualacademy.com/

C#: Чтение XML-документа (XmlDocument)

На сегодняшний день XML является одним из наиболее распространенных (наряду с JSON) форматов для передачи данных. Сегодня я хотел бы рассказать о том, как можно читать XML-документы штатными средствами C#.

Continue reading

Pascal: Сумма некоторых элементов массива

Задача: Дан одномерный массив А(n). Получить сумму тех элементов массива, которые не четны и отрицательны.

Идея в том, чтобы заполнить массив, вывести его, а потом в том же цикле проверять, являются ли элементы подходящими. Условие первое — нечетность. Остаток от деления на 2 должен быть не равен нулю. Второе условие — элемент массива меньше нуля. Таким образом выбираются необходимые нам элементы.

Остается лишь сложить эти элементы между собой.

Вот исходный код:
Continue reading

C#: Метод Симпсона. Нахождение интеграла.

Случилось интересное. Некоторое время назад я разместил код метода Симпсона на pascal. После его индексации на него стало приходить большое количество поисковых запросов (до 30% от всех за сутки), и я решил написать этот метод на основных языках. Пусть первым будет C#.

В коде объявлена дополнительная функция double Y(double p) Возвращает значение функции в данной точке. Т.е при решении ваших задач достаточно просто изменить формулу внутри этой функции.

Continue reading

VBA: Выделить слова в Microsoft Word

Условие: Написать макрос для Word, который запрашивает слово и выделяет его каким-либо образом в тексте.

Алгоритм: пробежаться по всем словам в тексте, и если слово совпадает с заданным- применить к нему некоторые изменения.

Continue reading