Работа с матрицей в 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

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

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

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

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

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

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

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

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

Continue reading

PHP: Правильный сдвиг часов

Несколько дней назад понадобилось написать скрипт, который учитывал бы время с каким-либо интервалом. Время определить удалось, но возникла проблема как задать точность. Например время определилось как 0 часов. Тогда при точности +- 2 будет интервал от -2 до 2 часов. Но что такое минус 2 часа? Такого не бывает! Для исправления этой ситуации потребовалось написать функцию, которая бы правильно считала время.
[code lang=»c»]
function TimeChange($hour, $shift)
{
if ($shift + $hour > 24)
{
return abs($hour + $shift) — 24;
}
else if ($shift + $hour < 0)
{
return 24 — abs($hour + $shift);
}
else
{
if ($shift + $hour == 24)
return 0;
return $shift + $hour;
}
}[/code]
Функция принимает текущий час (24-часовой формат) и число, на которое нужно сдвинуть часы.

 

php,mysql, Reg_exp : http://go.pyatnitsev.ru или удобная навигация

Мне сильно понравилась мысль коротких ссылок на сайтах. Нет, это не сервисы как bit.ly или goo.gl, а страницы переадресации внутри домена. Таковые есть у Microsoft, Intel. Нужны, чтобы их можно было легко запомнить и раздать клиентам, для их же удобства.

Захотелось сделать такую же страничку. Сделал. Дело было так:

Иду и создаю поддомен http://go.pyatnitsev.ru, пока он развертывается, начинаю продумывать структуру базы и php-кода, который этим занимался бы.

Continue reading

C++: Антисимметричная матрица

Задача:

Напишите программу которая создает антисимметричную матрицу размера N, заполненную случайными числами. Антисимметричная матрица: Aij=-Aji

Алгоритм примерно такой: Спрашиваем у пользователя, какого размера матрицу он бы хотел видеть. Стандартно всё заполняем случайными числами. После этих операций инициируем еще циклы, в которых изменяем значения

Continue reading