*/
Пример 7.5. Вывод на экран свойств массива и всех его элементов.
#include "stdafx.h"
using namespace System;
void PrintValues(Array^ myArr) {
// Вывод содержимого массива
Collections::IEnumerator^ myEnumerator =
myArr->GetEnumerator();
int i = 0;
int cols = myArr->GetLength(myArr->Rank - 1);
while (myEnumerator->MoveNext()) {
if (i < cols)
i++;
else {
Console::WriteLine();
i = 1;
}
Console::Write("{0}\t", myEnumerator->Current);
}
Console::WriteLine();
}
int main(array<System::String^>^ args) {
// Создание и инициализация трехмерного массива типа Int32
Array^ myArr = Array::CreateInstance(Int32::typeid, 2, 3, 4);
for (int i = myArr->GetLowerBound(0); // Первый и последний
i <= myArr->GetUpperBound(0); i++) // индекс в измерении.
for (int j = myArr->GetLowerBound(1);
j <= myArr->GetUpperBound(1); j++)
for (int k = myArr->GetLowerBound(2);
k <= myArr->GetUpperBound(2); k++)
// Присваивание значения элементу
// в указанной позиции 3-мерного массива
myArr->SetValue((i * 100) + (j * 10) + k, i, j, k);
// Вывод свойств массива
Console::WriteLine("Массив имеет {0} размерность(и) и в общей"+
" сложности {1} элементов(а):", myArr->Rank, myArr->Length);
Console::WriteLine("\tДлина\tНижняя\tВерхняя");
for (int i = 0; i < myArr->Rank; i++) {
Console::Write("{0}:\t{1}", i, myArr->GetLength(i));
Console::WriteLine("\t{0}\t{1}", myArr->GetLowerBound(i),
myArr->GetUpperBound(i));
}
// Вывод содержимого массива
Console::WriteLine("\nМассив содержит следующие значения:");
PrintValues(myArr);
Console::ReadLine();
return 0;
}
/* Вывод:
Массив имеет 3 размерность(и) и в общей сложности 24 элементов(а):
Длина Нижняя Верхняя
0: 2 0 1
1: 3 0 2
2: 4 0 3
Массив содержит следующие значения:
0 1 2 3
10 11 12 13
20 21 22 23
100 101 102 103
110 111 112 113
120 121 122 123
*/
Сортировка массивов
Пример 7.6: Сортировка массива по возрастанию.
#include "stdafx.h"
using namespace System;
int main(array<System::String^>^ args) {
array<int>^ samples = { 27, 3, 54, 11, 18, 2, 16};
Array::Sort(samples); // Сортировка элементов массива
|
For each (int value in samples) // Вывод элементов массива
Console::Write("{0,8}", value);
Console::WriteLine();
Console::ReadLine();
return 0;
}
// Вывод: 2 3 11 16 18 27 54
Можно также отсортировать только диапазон элементов массива. Для этого обращение к функции в предыдущем примере нужно указать так.
Array::Sort(samples, 2, 3); // Сортировка элементов со 3-го по 4-й
...
// Вывод: 27 3 11 18 54 2 16
Пример 7.7. В двух массивах размещены соответственно имена людей и вес каждого из них. Необходимо отсортировать оба массива так, чтобы массив имен был отсортирован в алфавитном порядке, а массив показаний веса должен быть переупорядочен, чтобы эти показатели по-прежнему относились соответствующим людям.
#include "stdafx.h"
using namespace System;
// Сортировка массива ключей (names) и массива объектов (weights).
int main(array<System::String^>^ args) {
array<String^>^ names = { "Виктор", "Антон", "Максим",
"Евгений", "Борис", "Алексей" };
array<int>^ weights = { 62, 84, 72, 68, 90, 78 };
Array::Sort(names, weights); // Сортировка массивов
for each (String^ name in names) // Вывод имен
Console::Write("{0, 10}", name);
Console::WriteLine();
For each (int weight in weights) // Вывод показаний веса
Console::Write("{0, 10}", weight);
Console::WriteLine();
Console::ReadLine();
return 0;
}
/* Вывод:
Алексей Антон Борис Виктор Евгений Maксим
78 84 90 62 68 72
*/
Поиск в массиве
Пример 7.8. Поиск значения во всем массиве.
#include "stdafx.h"
using namespace System;
int main(array<System::String^>^ args) {
array<int>^ arr = { 23, 45, 68, 94, 123, 127, 150, 203, 299};
int toBeFound = 127; // Искомое значение
int position = Array::BinarySearch(arr, toBeFound); // Поиск
if (position<0)
Console::WriteLine("Значение {0} в массиве не найдено.",
toBeFound);
Else
|
Console::WriteLine("Значение {0} найдено в {1}-м элементе "+
"массива.", toBeFound, position);
Console::ReadLine();
return 0;
}
// Вывод: Значение 127 найдено в 5-м элементе массива.
Чтобы искать в заданном диапазоне элементов массива, можно применить версию функции BinarySearch() с четырьмя параметрами.
// Поиск в массиве, начиная с его 4-го элемента и до последнего.
int position = Array::BinarySearch(values, 3, 6, toBeFound);
Пример 7.9. Рассмотрим вариант примера 7.7 с добавлением поиска. В двух массивах, как и прежде, размещены имена людей и вес каждого из них, а в третьем – имена людей для поиска информации о них (их веса). Также как и ранее нужно отсортировать первые два массива, а затем выполнить поиск.
#include "stdafx.h"
using namespace System;
// Поиск в массиве.
int main(array<System::String^>^ args) {
array<String^>^ names = { "Виктор", "Антон", "Максим",
"Евгений", "Борис", "Алексей",
"Петр", "Сергей", "Даниил", "Иван"};
array<int>^ weights = { 62, 84, 72, 68, 90, 78, 86, 64, 81, 75 };
array<String^>^ toBeFound = { "Борис", "Иван", "Максим",
"Антон", "Федор" };