жизненный цикл ПО(техничсекое задание по мдк 01. массивы. Лабораторная работа Использование двумерных массивов Цель работы знакомство и получение навыков при навыков при работе с массивами
Скачать 29.72 Kb.
|
Лабораторная работа № «Использование двумерных массивов» Цель работы: знакомство и получение навыков при навыков при работе с массивами. Образовательные результаты, заявленные во ФГОС третьего поколения: Студент должен уметь: -осуществлять разработку кода программного модуля на современных языках программирования; - оформлять документацию на программные средства; - использовать инструментальные средства для автоматизации оформления документации; знать: - основные этапы разработки программного обеспечения; - основные принципы технологии структурного и объектно-ориентированного программирования; - методы и средства разработки технической документации. Краткие теоретические и учебно-методические материалы по теме лабораторной работы Переменные с двумя и более индексами служат для описания многомерных массивов. Двумерный массив состоит из элементов, образующих прямоугольную таблицу. В этом случае первый индекс обозначает номер строки, а второй индекс – номер столбца таблицы, на пересечении которых и расположен данный элемент. Учитывая, что начальное значение индекса в языке Си нуль, и предполагая, что размеры двумерного массива M×N, прямоугольную таблицу можно представить в виде: ⌠ а[0][0] a[0][1] .a[0][N-1] a[1][0] a[1][1] .a[1][N-1] i-строк { a[i][0] a[i][1] a[i][j].a[i][N-1] j- элементов a[M-1][0] a[M-1][1]a[M-1][N-1] В памяти элементы двумерного массива располагаются в виде последовательности (строка за строкой). Номер k элемента двумерного массива a[i][j] в последовательности может быть вычислен по формуле k=i*N+j, где N- число элементов в строке. Такие объекты в математике называются матрицами, т.е. двумерный массив- это представление в языке программирования матрицы. При объявлении двумерного массива описание имеет следующий вид: Тип имя_массива [размер1][размер2]; В этом описании можно трактовать объявление двумерного массива как объявление массива массивов, т.е. массив размера [размер2], элементами которого являются одномерные массивы имя_массива [размер1]. Размеры массива в языке Си могут задаваться константами или выражениями, состоящими из констант. Нельзя задавать массивы переменного размера. Пример: Лабиринт должен быть построен на основе двумерного массива. Размер лабиринта выберем на свое усмотрение. #include "stdafx.h" #include using namespace std; int main(int argc, char* argv[]) { for (int i = 0; i < 33; i++) //переключение по строкам { for (int j = 0; j < 20; j++)// переключение по столбцам if (mas[i][j] == 1) { // вывести два раза символ (номер которого 176 в таблице аски) в консоль cout << static_cast cout << static_cast } else cout << " "; // вывести два пробела cout << endl; } system("pause"); return 0; } Задания для лабораторной работы: Дан целочисленный массив размера N. Назовем серией группу подряд идущих одинаковых элементов, а длиной серии - количество этих элементов (длина серии может быть равна 1). Вывести массив, содержащий длины всех серий исходного массива. Дано число k (0 < k < 11) и матрица размера 4 x 10. Найти сумму и произведение элементов k-го столбца данной матрицы. Дана матрица размера а x б. Найти суммы элементов всех ее четных строк и нечетных столбцов. Дана матрица размера а x б. Найти минимальное значение в каждой строке. Дана матрица размера а x б. В каждой строке найти количество элементов, больших среднего арифметического всех элементов этой строки. Дана матрица размера а x б. Преобразовать матрицу, поменяв местами минимальный и максимальный элемент в каждой а) строке б) столбце. Дана целочисленная матрица размера а x б. Вывести номер ее первой строки, содержащего равное количество положительных и отрицательных элементов (нулевые элементы не учитываются). Если таких строк нет, то вывести 0. Дана целочисленная матрица размера M x N. Найти количество ее строк и столбцов, все элементы которых различны. Дана квадратная матрица порядка M. Найти сумму элементов ее главной и побочной диагонали. Дана квадратная матрица порядка M. Заменить нулями элементы матрицы, лежащие а) ниже главной диагонали, б) выше главной диагонали, в) нижепобочной диагонали. Дана квадратная матрица порядка M. Повернуть ее на 90,180,270 градусов в положительном направлении. Даны два числа k1 и k2 и матрица размера а x б. Поменять местами столбцы матрицы с номерами k1 и k2. Дано число k и матрица размера а x б. Удалить столбец матрицы с номером k. Даны целые числа а1, а2, а3. Получить целочисленную матрицу [bij]i,j=1,2,3, для которой bij=ai-3aj. Получить [aij]i=1,…10; j=1,…12 - целочисленную матрицу, для которой aij=i+2j. Дано натуральное число n. Получить действительную матрицу [aij]i, j=1,…n, для которой aij= . Дана действительная квадратная матрица порядка n. Найти наибольшее из значений элементов, расположенных в заштрихованной части матрицы. а) б) в) г) Дана квадратная вещественная матрица размерности n. Найти количество нулевых элементов, стоящих: выше главной диагонали; ниже главной диагонали; выше и ниже побочной. Дана вещественная матрица размерности n * m. По матрице получить логический вектор, присвоив его k-ому элементу значение True , если выполнено указанное условие и значение False иначе: - все элементы k столбца нулевые; - элементы k строки матрицы упорядочены по убыванию; - k строка массива симметрична. Дана вещественная матрица размерности n * m. Сформировать вектор b, в котором элементы вычисляются как: - произведение элементов соответствующих строк; - среднее арифметическое соответствующих столбцов; - разность наибольших и наименьших элементов соответствующих строк; - значения первых отрицательных элементов в столбце. Дан двухмерный массив A[1..m,1..n]. Написать программу построения одномерного массива B[1..m], элементы которого соответственно равны а) суммам элементов строк, б) произведениям элементов строк, в) наименьшим средних арифметических элементов строк. Расположить элементы данного массива в обратном порядке (первый элемент меняется с последним, второй - с предпоследним и т.д. до середины; если массив содержит нечетное количество элементов, то средний остается без изменения). В данном массиве поменять местами элементы, стоящие на нечетных местах, с элементами, стоящими на четных местах. Контрольные вопросы: Может ли массив быть элементом массива? В каком случае массивы совместны по присваиванию? Пусть элементами массива A (a[1], a[2], a[3], a[4]) являются соответственно x, -x, x2, -x2. Можно ли выполнять обход двумерного массива, организовав внешний цикл по столбцам, а внутренний — по строкам? Целесообразно ли использовать ли вложенные циклы, если совершается обход только главной диагонали квадратной матрицы? одной строки матрицы? одного столбца матрицы? Лабораторная работа № «Использование многомерных массивов» Цель работы: знакомство и получение навыков при навыков при работе с массивами. Образовательные результаты, заявленные во ФГОС третьего поколения: Студент должен уметь: -осуществлять разработку кода программного модуля на современных языках программирования; - оформлять документацию на программные средства; - использовать инструментальные средства для автоматизации оформления документации; знать: - основные этапы разработки программного обеспечения; - основные принципы технологии структурного и объектно-ориентированного программирования; - методы и средства разработки технической документации. Краткие теоретические и учебно-методические материалы по теме лабораторной работы По аналогичному принципу располагаются в памяти и массивы большей размерности. Предположим, b – трехмерный массив, имеющий размеры L×M×N.Тогда номерkэлемента трехмерного массива b[l][i][j] в последовательности может быть вычислен по формуле k= (l*M+i)*N+j или k= l*M*N+i*N+j. Основная форма описания массива размерности R такова: тип имя_массива [размер1][ размер2] …[размерR]; где размер1, размер2, размерR – количество значений соответствующего индекса массива. Пример: Первая величина (4) задает количество строк, вторая (3) – количество столбцов. Объект ia определен как массив из четырех строк по три элемента в каждой. Многомерные массивы тоже могут быть инициализированы: int ia[ 4 ][ 3 ] = { { 0, 1, 2 }, { 3, 4, 5 }, { 6, 7, 8 }, { 9, 10, 11 } }; Внутренние фигурные скобки, разбивающие список значений на строки, необязательны и используются, как правило, для удобства чтения кода. Приведенная ниже инициализация в точности соответствует предыдущему примеру, хотя менее понятна: int ia[4][3] = { 0,1,2,3,4,5,6,7,8,9,10,11 }; Следующее определение инициализирует только первые элементы каждой строки. Оставшиеся элементы будут равны нулю: int ia[ 4 ][ 3 ] = { {0}, {3}, {6}, {9} }; Если же опустить внутренние фигурные скобки, результат окажется совершенно иным. Все три элемента первой строки и первый элемент второй получат указанное значение, а остальные будут неявно инициализированы 0. int ia[ 4 ][ 3 ] = { 0, 3, 6, 9 }; При обращении к элементам многомерного массива необходимо использовать индексы для каждого измерения (они заключаются в квадратные скобки). Так выглядит инициализация двумерного массива с помощью вложенных циклов: int main() { const int rowSize = 4; const int colSize = 3; int ia[ rowSize ][ colSize ]; for ( int i = 0; i < rowSize; ++i ) for ( int j = 0; j < colSize; ++j ) ia[ i ][ j ] = i + j j;} Конструкция ia[ 1, 2 ] является допустимой с точки зрения синтаксиса С++, однако означает совсем не то, чего ждет неопытный программист. Это отнюдь не объявление двумерного массива 1 на 2. Агрегат в квадратных скобках – это список выражений через запятую, результатом которого будет последнее значение 2 (см. оператор “запятая” в разделе 4.2). Поэтому объявление ia[1,2] эквивалентно ia[2]. Это еще одна возможность допустить ошибку Задания для лабораторной работы: 1. Прямоугольное поле m×n разбито на mn квадратных клеток. Некоторые клетки покрашены в чёрный цвет. Известно, что все чёрные клетки могут быть разбиты на несколько непересекающихся и не имеющих общих вершин чёрных прямоугольников. Считая, что цвета клеток даны в виде массива типа array[1..m] of array [ 1..n] of boolean; подсчитать число чёрных прямоугольников, о которых шла речь. Число действий должно быть порядка mn. 2. В матрице найти номер строки, сумма чисел в которой максимальна. Записаны числа N и M - количество строк и столбцов матрицы (каждое из них - из диапазона от 1 до 100), а затем сама матрица. Элементы матрицы - числа из диапазона integer. Вывести номер строки,сумма чисел в которой максимальна. Если таких строк несколько,вывести последнюю из них. 3. Дана квадратная матрица. Проверить, является ли она симметричной относительно главной диагонали.. Записано число n (0 В следующих n строках записано по n целых чисел от -32768 до 32767.вывести YES, если матрица симметрична относительно главной диагонали, иначе вывести NO. 4. Даны две квадратных таблицы чисел. Требуется построить третью,каждый элемент которой равен сумме элементов, стоящих на том же местев 1-й и 2-й таблицах.Записано сначала число N, затем записана первая таблица,а после нее - вторая. Элементы таблиц - числа от 0 до 100.1<=N<=100. 5. Ввести число n и заполнить двумерный массив размером n * n числами 1, 2, ... по спирали (рис.). 6. Элементами массива a[1..n] являются неубывающие массивы [1..m] целых чисел:a: array [1..n] of array [1..m] of integer; a[1][1]≤...≤a[1][m], ..., a[n][1]≤...≤a[n][m].Известно, что существует число, входящее во все массивы a[i] (существует такое x, что для всякого i из 1..n найдётся j из 1..m, для которого a[i][j] = x). Найти одно из таких чисел х. Контрольные вопросы: 1. Как организуются многомерные числовые массивы в языке С++? 2. Как организуется индексирование числовых массивов в языке С++? 3. На кого или на что возлагается контроль границ числовых массивов в языке программирования С? 4. В какой очередности и как происходит заполнение многомерных числовых массивов в программах на языке С? 5. Для чего применяется начальная инициализация числовых массивов при дальнейшем их использовании? |