Перечисляемые подмножествами и маски

Маски — это самые настоящие логические выражения, если для данного элемента массива значений условие в индексе истинное, значит элемент попадет в подмножество. Вот простой пример маски:

array[array!= 0] = 0;

В этом примере array — это массив значений, в индексе которого указана маска != 0. То есть для каждого элемента массива значений не равного нулю присваивается нуль. Все очень просто и понятно. В качестве маски может быть указано любое логическое выражение, что очень удобно, если необходимо использовать составное условие. Давайте рассмотрим простой пример программы с использованием маски в для выделения подмножества:

#include <iostream>
#include <valarray>     // заголовочный файл массивов значений
#include <cstdlib>

using namespace std;
int main()
{
    srand(time(NULL));
    valarray<int> array(0, 15);
    cout << "Исходный масссив: ";
    for(int i = 0; i < array.size(); i++) {
        array[i] = rand() % 10;
        cout << array[i] << " ";
    }

    array[array> 5 && array < 8] = -1; // по маске присваиваем значение -1

    cout << "\nИзмененный массив значений: ";
    for(int i = 0; i < array.size(); i++) {
        cout << array[i] << " ";
    }

    return 0;
}

В программе, в строке 17 в индексе массива значений array указана маска — array> 5 && array < 8 по которой выполняется выборка значений массива и этим значениям присваивается -1. То есть значением -1 присваивается всем тем элементам массива значений, которые больше пяти, но и не больше 8. Это хорошо видно в результате работы программы:

CppStudio.com
Исходный массив: 2 6 4 6 5 4 8 2 6 4 8 1 4 5 4 
Измененный массив значений: 2 -1 4 -1 5 4 8 2 -1 4 8 1 4 5 4

По маскам — все. Это не сложная тема, все свои вопросы задавайте на нашем форуме или в комментариях, ниже.

Перечисляемые подмножествами

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

#include <iostream>

#include <valarray>     // заголовочный файл массивов значений
#include <cstdlib>

using namespace std;
int main()
{
    srand(time(NULL));
    valarray<int> array(0, 15);
    cout << "Исходный масссив: ";
    for(int i = 0; i < array.size(); i++) {
        array[i] = rand() % 10;
        cout << array[i] << " ";
    }

    //определяем подмножество (тип данных для подмножества обязательно должен быть size_t)
    valarray<size_t> index(5);
    index[0] = 7;
    index[1] = 12;
    index[2] = 14;
    index[3] = 2;
    index[4] = 0;

    valarray<int> array2(array[index]); // присвоили значения подмножества другому массиву значений
    cout << "\nЗначения подмножества: ";
    for(int i = 0; i < array2.size(); i++) {
        cout << array2[i] << " ";
    }

    array[index] = 99; // всем элементам подмножества присвоили значение 99
    cout << "\nИзмененный массив значений: ";
    for(int i = 0; i < array.size(); i++) {
        cout << array[i] << " ";
    }

    return 0;
}

Как всегда, начало программы одинаковое. Начнем со строк 18 -23, мы объявили перечисляемое подмножество. Запомните, что тип данных у перечисляемого подмножества должен быть size_t. Это подмножество состоит из пяти элементов, каждый из элементов подмножества содержит целое положительное число — это индекс элемента из основного множества. В нашем примере указаны индексы 7, 12, 14, 2 и 0. То есть в это подмножество будут входить следующие элементы из главного множества: восьмой, тринадцатый, пятнадцатый, третий и первый. Мы можем например  используя это подмножество, присвоить элементы подмножества другому массиву значений, это сделано в строке 25. Кроме того, каждому значению подмножества можно присвоить одинаковое значение всего одной простой строкой, как показано в строке 31. Все эти изменения хорошо видны в результате работы программы:

CppStudio.com
Исходный массив: 2 9 4 3 7 1 8 3 6 3 1 4 5 1 7 
Значения подмножества: 3 5 7 4 2 
Измененный массив значений: 99 9 99 3 7 1 8 99 6 3 1 4 99 1 99

Из вывода программы видно, какие значения выделены в подмножество, кроме этого, всем значениям подмножества было присвоено число 99.

Автор: Marienko L.
Дата: 25.01.2014
Поделиться:

Оставить комментарий

Вы должны войти, чтобы оставить комментарий.