Сложные типы данных: одномерные массивы
Массив – это совокупность элементов любого одного допустимого типа. Элементы массива образуют последовательность, упорядоченную по номерам их элементов. Форма объявления массива:
имя_типа имя_массива [k1] [k2] … [kn];
где k1..kn – количество элементов массива по 1..n измерениям.
Следует учитывать, что размер и размерность массива имеют различные значения.
Объявление целочисленного массива:
int a[5];
Объявление массива символов:
char str[7];
Массивы можно инициализировать при объявлении:
int mas[5] = {1, 2, 3, 4, 5};
или
int a[ ] = {-125, 13, 34, -78, -2, 11, 45};
Обращение к элементам массива:
a[2] = 1;
a[0] = -5;
Задание 3. Выполните задания в соответствие с индивидуальным вариантом. Введите с клавиатуры массив-вектор А из 10 элементов. Затем нужно:
3.1. Найти наибольший элемент и поменять его местами с первым элементом. Преобразованный массив вывести на экран.
3.2. Найти наименьший элемент и поменять его местами с последним элементом. Преобразованный массив вывести на экран.
3.3. Найти произведение положительных элементов и вывести его на экран.
3.4. Найти произведение отрицательных элементов и вывести его на экран.
3.5. Найти сумму положительных элементов и вывести ее на экран.
3.6. Найти сумму отрицательных элементов и вывести ее на экран.
3.7. Найти сумму элементов, больших 3 и меньших 8, и вывести ее на экран.
3.8. Найти сумму элементов, меньших 5 (по модулю), и вывести ее на экран.
3.9. Отсортировать вектор по возрастанию и убыванию методом «пузырька».
3.10. Отсортировать вектор по возрастанию и убыванию любым способом (кроме метода «пузырька»).
Сложные типы данных: двумерные массивы. Псевдослучайные числа
Объявление двумерного целочисленного массива:
int mas [10][20];
Если размер массива не указан, то его определяет только количество инициализированных значений.
При инициализации многомерных массивов используются вложенные скобки:
int a[2][4] = { {1, 2, 4, -1}, // элементы 0-ой строки
{2, 5, 7, 0}}; // элементы 1-ой строки
Обращение к элементам массива:
b[1][1] = 12;
Пример. Перед выполнением индивидуального задания создайте в среде Microsoft Visual Studio проект обработки двумерного массива с исходным кодом на С++:
// подключение заголовочных файлов
#include "stdio.h"
#include <stdlib.h> // библиотека с описанием функций rand, srand;
#include <iomanip.h> // для setw
#include <time.h> // содержит описание функций для работы с
// системным таймером
#include "iostream.h"
using namespace std;
int main(int argc, char* argv[])
{
char * str = "|--------------------------------------|\n"
"| |\n"
"| Task 5 (Example) |\n"
"| |\n"
"|--------------------------------------|\n";
cout << str;
// объявление переменных:
const int M = 5, N = 7;
float mas[M][N], max, min;
int i, j;
// установка генератора случайных чисел функцией srand
srand(time(0));
// инициализация элементов матрицы случайными числами
for (i=0; i<M; i++)
{
for (j=0; j<N; j++)
{
mas[i][j] = (float)rand()/100;
}
}
cout << "\n---------------------------------------------------\n\n\n";
// вывод элементов матрицы в виде таблицы:
for (i=0; i<M; i++)
{
cout << "\n";
for (j=0; j<N; j++)
cout << setw(3)<< mas[i][j] << "\t";
}
cout << "\n---------------------------------------------------\n";
// Поиск минимального и максимального элемента в матрице:
max = min = mas[0][0];
for (i=0; i<M; i++)
for (j=0; j<N; j++)
{
if (mas[i][j] > max)
max = mas[i][j];
if (mas[i][j] < min)
min = mas[i][j];
}
cout << "Maximum = " << setw(3)<< max;
cout << setw(3) << "\nMinimum = " << setw(3)<< min << "\n";
system("PAUSE");
return 0;
}
После набора исходного кода откомпилируйте программу, запустите ее на
выполнение. Результат работы программы:
В данном исходном коде наибольший интерес представляют функции:
rand()
srand(int)
time(0)
Функция rand() возвращает псевдослучайное число типа int. Для инициализации генератора псевдослучайных чисел применяется функция srand().
Для того чтобы последовательность псевдослучайных чисел была каждый раз новая (не повторялась при разных запусках программы), необходимо передавать в качестве параметра в функцию srand() случайное значение. Таким значением является значение, возвращаемое функцией time(0).
Внимательно изучите код программы. Обратите внимание на использование вложенных циклов, генерацию случайных чисел, использование setw, cout.
Задание 4
4.1. Даны матрица A размером m*n и вектор В размером m. Записать в главную диагональ элементы вектора, а в вектор - элементы главной диагонали. Матрицу А, вектор В и результаты вывести на экран.
4.2. Найти максимальный элемент матрицы С (размер m*n), элементы четных строк разделить на максимальный элемент, а к элементам нечетных прибавить максимальный элемент. Исходную и результирующую матрицы вывести на экран.
4.3. Найти минимальный элемент матрицы С (размер m*n) и поменять его местами с первым элементом. Исходную и результирующую матрицы вывести на экран.
4.4. Дана матрица Е размером m*n. Вычислить суммы элементов каждого столбца. Определить наибольшее значение суммы и номер соответствующего столбца. Исходную матрицу, максимальную сумму и номер столбца вывести на экран.
4.5. В матрице К размером m*n найти в каждом столбце произведение отрицательных элементов и количество нулевых элементов в матрице. Исходную матрицу, произведение и количество нулевых элементов вывести на экран.
4.6. Даны две матрицы А и В одинаковой размерности m*n. Получить матрицу C = max (a i j, b i j ) и матрицу D = min (a i j, b i j). Исходные и результирующие матрицы вывести на экран.
4.7. Дана матрица Р размером m*n. Найти сумму минимальных элементов каждого столбца матрицы. Исходную матрицу и сумму вывести на экран.
4.8. Даны две матрицы: А размером m*k и В размером k*n. Получить матрицу С=A*В. Исходные и результирующие матрицы вывести на экран.
4.9. Найти сумму и произведение элементов главных диагоналей квадратной матрицы. Исходную матрицу и результаты вывести на экран.
4.10. Транспонировать (поменять местами строки и столбцы) матрицу m*n. Исходную и результирующую матрицу вывести на экран.