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

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

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

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

Continue reading

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

Задача:

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

Continue reading

Android: Как тестировать на реальном устройстве?

Ранее я написал, как создать эмулятор для разработки Android-приложений, а также описал проблему, при которой эмулятор не запускается. Можно решить проблему кардинально, не использовать эмулятор, а тестировать сразу на мобильном устройстве под управлением android. Continue reading

О API Яндекс.Фоток. Как получить Token из php

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

Сейчас занялся Яндексом, а точнее его api для приложений. Первое что пригодилось — Api Яндекс.Фоток. Этот интерфейс позволяет общаться с сервисом хранения фотографий яндекса. Первое что нужно для работы с ним — получение токена от пользователя. Для того, что бы получить этот token я написал следующую функцию:

 

function GetToken($username, $password, $client_id, $client_secret)
	{
		$url = 'https://oauth.yandex.ru/token';
		$ch = curl_init();
		curl_setopt($ch, CURLOPT_URL,$url); // set url to post to
		curl_setopt($ch, CURLOPT_FAILONERROR, 1);
		curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);// allow redirects
		curl_setopt($ch, CURLOPT_RETURNTRANSFER,1); // return into a variable
		curl_setopt($ch, CURLOPT_TIMEOUT, 9); 
		curl_setopt($ch, CURLOPT_POST, 1); // set POST method
		curl_setopt($ch, CURLOPT_POSTFIELDS, "grant_type=password&username=$username&password=$password&client_id=$client_id&client_secret=$client_secret"); // add POST fields
		$result = curl_exec($ch); // run the whole process
		curl_close($ch);  
		$Resp = json_decode($result, true);
		return $Resp['access_token'];
	}

Я захотел использовать метод по логину и паролю, поэтому передаю и эти параметры. Процедура получения токена описана в api на этой странице. Для получения token’а нужно отправить POST запрос на специальный адрес.Здесь я в основном настраиваю тот самый запрос.

Указываю, куда отправить запрос; Указываю, что нужно прерываться при ошибке; Что нужно следовать редиректам; Указываю, что нужно сохранить результат выполнения в переменную; Указываю время до тайм-аута в 9 ms; говорю, что это будет тот самый POST-запрос и указываю данные которые нужно отправить — как в документе с Яндекса. После чего выполняю запрос и завершаю работу с cURL.

После выполнения запроса, в переменной $result будет находится документ в формате json, который остается только преобразовать в массив и извлечь нужные данные.

Преобразование делается с помощью функции json_decode(). Флаг true означает, что на выходе мне нужен ассоциативный массив. Последний шаг — возвращение самого ключа из функции. На этом всё.

 

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

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

Continue reading

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

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

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

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

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

С++: Является ли символ большой буквой?

Еще одна функция-помогалка в дополнение к функции, которая проверяет символ на число — это функция проверки на большую английскую букву. Таковая функция мне сегодня потребовалась. Вот она:

bool isCappital(char ch)
{
    return (ch >= 'A' && ch <= 'Z');
}

Принцип работы такой же, как и у «проверки числа». Так же можно реализовать функции, которые проверяли бы на буквы, на определенные символы.