Лабораторная работа по С . Обработка многомерных массивов.. Л5 103 Меньшиков. Отчет о выполнении лабораторной работы 5 по дисциплине Языки и методы программирования по теме
Скачать 0.59 Mb.
|
О Т Ч Е Т о выполнении лабораторной работы № 5 по дисциплине «Языки и методы программирования» по теме ОБРАБОТКА МНОГОМЕРНЫХ МАССИВОВ Преподаватель к.т.н., доцент 10.11.2021 Е.А. Халикова (должность) (подпись) (дата) (инициалы, фамилия) Студент 103 10.11.2021 А. Меньшиков (группа) (подпись) (дата) (инициалы, фамилия) Самара 2021 г. МИНОБРНАУКИ РОССИИ федеральное государственное бюджетное образовательное учреждение высшего образования «Самарский государственный технический университет» (ФГБОУ ВО «СамГТУ») 2 Цель и задачи работы Целью работы является получение обучающимися навыков работы со средства- ми обработки двумерных массивов в языке С++. Задачами работы являются: написание программы на языке С++ с использованием двумерных массивов; тестирование работоспособности программы для различных исходных дан- ных. Задание 1 Разработать консольное приложение, выполняющее задания, представлен- ные ниже тремя способами: Вычислить сумму и число положительных элементов квадратной матрицы размера N × N, находящихся над главной диагональю. 1. C использованием статического массива. Программный код: #include #include using namespace std; int main() { setlocale( LC_ALL , "Russian" ); srand(time( NULL )); const int N = 5; int sum = 0, count = 0; int arr[N][N]; cout << "N = 5\n\n" ; for ( int i = 0; i < N; i++) for ( int j = 0; j < N; j++) arr[i][j] = rand() % 200 - 100; cout << "\nИсходная матрица: \n\n" ; for ( int i = 0; i < N; i++) { for ( int j = 0; j < N; j++) { cout << setw(5) << arr[i][j] << " " ; } cout << "\n\n" ; } for ( int i = 0; i < 5; i++) for ( int j = i + 1; j < 5; j++) { if (arr[i][j] > 0) { sum += arr[i][j]; count++; } } cout << "Сумма положительных элементов над главной диагонали = " << sum << ", число положительных элементов над главной диагональю = " << count << endl; system( "pause" ); return 0; } 3 Графическая схема алгоритма. 4 Пример работы программы \ 2. C использованием одномерного динамического массива. Программный код: #include #include using namespace std; int main() { setlocale( LC_ALL , "Russian" ); srand(time( NULL )); int N; int sum = 0, count = 0; while ( true ) { cout << "Введите N: " << endl; cin >> N; if (N <= 0) cout << "Значение некорректное, повторите запрос" << endl; else break ; } int * arr = new int [N * N]; for ( int i = 0; i < N; i++) { for ( int j = 0; j < N; j++) { *(arr + (i * N + j)) = rand() % 200 - 100; } } cout << "\nИсходная матрица: \n\n" ; for ( int i = 0; i < N; i++) { for ( int j = 0; j < N; j++) { cout << setw(5) << *(arr + (i * N + j)) << " " ; } cout << "\n\n" ; } for ( int i = 0; i < N; i++) for ( int j = i + 1; j < N; j++) 5 { if (*(arr + (i * N + j)) > 0) { sum += *(arr + (i * N + j)); count++; } } cout << "Сумма положительных элементов над главной диагонали = " << sum << ", число положи- тельных элементов над главной диагональю = " << count << endl; system( "pause" ); delete[] arr; return 0; } Пример работы программы 3. C использованием двумерного динамического массива. Программный код: #include #include using namespace std; int main() { setlocale( LC_ALL , "Russian" ); srand(time( NULL )); int N; int sum = 0, count = 0; while ( true ) 6 { cout << "Введите N: " << endl; cin >> N; if (N <= 0) cout << "Значение некорректное, повторите запрос" << endl; else break ; } int ** arr = new int * [N]; for ( int i = 0; i < N; i++) { *(arr + i) = new int [N]; for ( int j = 0; j < N; j++) { *(*(arr + i) + j) = rand() % 200 - 100; } } cout << "\nИсходная матрица: \n\n" ; for ( int i = 0; i < N; i++) { for ( int j = 0; j < N; j++) { cout << setw(5) << *(*(arr + i) + j) << " " ; } cout << "\n\n" ; } for ( int i = 0; i < N; i++) for ( int j = i + 1; j < N; j++) { if (*(*(arr + i) + j) > 0) { sum += *(*(arr + i) + j); count++; } } cout << "Сумма положительных элементов над главной диагонали = " << sum << ", число положительных элементов над главной диагональю = " << count << endl; system( "pause" ); for ( int i = 0; i < N; i++) { delete[] * (arr + i); } delete[] arr; return 0; } Пример работы программы 7 Вывод: В ходе выполнения лабораторной работы были получены навыки рабо- ты с средствами обработки двумерных массивов в языке С++. Научился писать программы на языке С++ с использованием двумерных массивов, а также тестировать работоспособность программы для различных исходных данных. Контрольные вопросы. 1.Что такое многомерный массив и как он объявляется?\ Многомерный массив — это массив, который состоит из набора массивов, то есть имеет более одного индекса на каждый элемент. Он объявляется путем задания после- довательности константных выражений в квадратных скобках, следующей за именем: <спецификация типа> <имя> [<константное выражение>][<константное выражение>] 2. Какими способами можно обращаться к элементам массива? Для доступа к элементам массива существует два различных способа. Первый способ связан с использованием обычных индексных выражений в квадрат- ных скобках, например, array[16]=3 или array[i+2]=7. Второй способ доступа к элементам массива связан с использованием адресных выра- жений и операции раз адресации в форме *(array+16)=3 или *(array+i+2)=7 3. Каково назначение индексов в многомерном массиве? Индексация в многомерных массивах работает также как и в одномерных, только ин- дексы указываются для каждой оси. 4. Какова общая схема работы с многомерным массивом? Схема обращения к элементам двумерного массива осуществляется так: ИмяМассива[ЗначениеИндекса][ЗначениеИндекса]; Например: a[0][0] – индексы задаются как константы s[i][j] – индексы задаются как переменные Соответсвенно для трехмерного ИмяМассива[ЗначениеИндекса][ЗначениеИндекса][ЗначениеИндекса]; Например: a[0][0][0] – индексы задаются как константы s[i][j][k] – индексы задаются как переменные и т.д. 5. Как организовать вложенные циклы? 8 Вложенные циклы – это когда в теле одного цикла (внешнего) размещается другой цикл (внутренний). Таких вложенных циклов во внешнем цикле может быть несколь- ко. 6. Как представить двумерный массив в виде одномерного? Массив A[n][m] можно представить в виде одномерного массива B[n * m] простым преобразованием индексов. Элемент A[i][j] соответствует элементу В [i * m + j]. Эле- мент B[k] соответствует элементу A[k / m][k % m]. 7. Как осуществляется работа с двумерным динамическим массивом? При работе с динамической памятью в языке С++ используется способ выделения па- мяти под двумерный динамический массив при помощи операции new, которая позво- ляет выделить в динамической памяти участок для размещения массива соответству- ющего типа, но не позволяет его инициализировать. Доп. вопрос: описать и заполнить трехмерный массив логических значений. #include #include #include #include using namespace std; int main() { setlocale( LC_ALL , "Russian" ); srand(time(0)); size_t arraySize; cout << "Введите размер массива: " << endl; cin >> arraySize; bool *** array = new bool ** [arraySize]; for ( size_t i = 0; i < arraySize; i++) { array[i] = new bool * [arraySize]; for ( size_t j = 0; j < arraySize; j++) { array[i][j] = new bool [arraySize]; for ( size_t l = 0; l < arraySize; l++) cout << setw(5) << (array[i][j][l] = rand() % 2); cout << endl; } cout << std::endl; } return 0; } |