![]() Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь FAQ Написать работу КАТЕГОРИИ: ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву ![]() Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Генерация двумерных массивовСодержание книги
Поиск на нашем сайте
Принцип генерации двумерных массивов такой же, как и одномерных. //Описание функции генерации массива void gen(int str,int slb, int a, int b, int m[max_x][max_y]){ int i,j; srand(time(NULL)*1000); //устанавливает начальную точку генерации случайных чисел for (i=0;i<str;i++) for (j=0;j<slb;j++) m[i][j]=(rand()*1.0/(RAND_MAX)*(b-a)+a); //функция генерации случайных чисел на [a,b) } Вывод двумерных массивов Двумерные массивы выводятся на экран так же, как и одномерные. //Описание функции вывода массива void out (int str,int slb, int m[max_x][max_y]){ int i,j; for (i=0;i<str;i++) { for (j=0;j<slb;j++) printf("%4d",m[i][j]); printf("\n"); } } Задачи поиска, замены и суммирования элементов двумерного массива В программировании двумерные массивы называют также матрицами. В задачах на обработку двумерных массивов следует определить способ просмотра массива (по строкам, по столбцам, вдоль диагоналей и т.д.). При этом, как правило, используют кратные циклы, в которых один изменяющийся параметр соответствует пробегу по индексам строк, другой – колонок. При выборе пути обхода матрицы следует учитывать, что параметр внешнего цикла меняется медленнее, чем параметры вложенных в него циклов. Пример 4. Найдем максимальный элемент главной диагонали двумерного целочисленного массива размерностью n´n, заданном случайными числами на промежутке [-100; 100). /*Описание функции поиска максимального элемента главной диагонали*/ int maxim (int str,int slb, int m[max_x][max_y]) { int i,j, e_max=m[0][0]; for (i=0;i<str;i++) for (j=0;j<slb;j++) if ((i==j) && (m[i][j]>e_max)) e_max=m[i][j]; return e_max; }
Пример 5. Найдите сумму элементов столбца двумерного массива, номер которого задается с клавиатуры. /*Описание функции суммирования элементов заданного номера столбца матрицы*/ int summa (int str,int slb, int nom, int m[max_x][max_y]){ int i,j, sum=0; for (i=0;i<str;i++) for (j=0;j<slb;j++) if (j==nom-1) sum+=m[i][j]; return sum; } Пример 6. Дан двумерный вещественный массив размерностью n´n, заданный случайными числами на промежутке [-100; 100). Замените все элементы выше главной диагонали на 0.0 и ниже ее на 1.1. //Описание функции замены void zamena (int str,int slb, double m[max_x][max_y]) { int i,j; for (i=0;i<str;i++) for (j=0;j<slb;j++) { if (i>j) m[i][j]=0.0; if (i<j) m[i][j]=1.1; } } Задания 1. Наберите коды программ из Примеров 1, 2 и 3. Выполните компиляцию и запуск программ. 2. Объявите двумерный целочисленный массив, в котором 10 строк по 7 элементов. Выполните генерацию массива случайными целыми числами количеством n ´ m (n ≤10, m ≤7) из промежутка [ a; b). Выведите массив на экран в виде таблицы. Оформите генерацию и ввод массива с помощью функций.
3. Объявите двумерный вещественный массив, в котором n ´ m элементов. Заполните его числами, полученными по закономерности: 4. Объявите двумерный целочисленный массив, в котором n ´ m элементов. Выполните генерацию массива случайными целыми числами из промежутка [ a; b). Распечатайте массив в виде таблицы. Найдите суммы элементов массива по строкам. Распечатайте найденные суммы по образцу: Сумма элементов 0-й строки равна … Сумма элементов 1-й строки равна …. Домашние задания 1. На основе предложенных функций в Примерах 4, 5 и 6 разработайте коды программ. Выполните компиляцию и запуск программ. 2. Объявите двумерный вещественный массив, в котором n ´ m элементов. Заполните его числами, полученными по закономерности: 3. Объявите двумерный целочисленный массив, в котором n ´ m элементов. Выполните генерацию массива случайными целыми числами из промежутка [ a; b). Замените в массиве максимальные элементы каждой строки произведением их цифр. Распечатайте массив в виде таблицы дважды: до и после замены. 4. Объявите двумерный целочисленный массив, в котором n ´ n элементов. Выполните транспонирование полученной квадратной матрицы. Распечатайте массив в виде таблицы дважды: до и после транспонирования. Лабораторная работа 32 Двумерные массивы. Задачи сортировок и перестановок в двумерных массивах
Цель работы: изучить особенности применения алгоритмов сортировок и перестановок в двумерных массивах, научиться решать задачи сортировок и перестановок в двумерных массивах на языке C++.
Теоретические сведения
В силу особенности представления двумерных массивов в виде таблиц смысл сортировки такого массива сводится к упорядочиванию элементов, объединенных в столбцы или строки. Например, сортировка по убыванию элементов столбцов означает, что элементы следует расположить по убыванию сверху вниз в каждом столбце отдельно. При этом, рассматривая строку или столбец как одномерный массив, к ним применяют алгоритмы сортировок одномерных массивов. Пример 1. Сортировка в двумерном целочисленном массиве элементов k-той строки по убыванию. void sort_dn(int k,int slb, int m[max_x][max_y]) { int i,j,buf; for (i=0;i<slb-1;i++) for (j=slb-1;j>=i;j--) if (m[k][j]>m[k][j-1]){ //фиксированная строка с номером k buf= m[k][j]; m[k][j]= m[k][j-1]; m[k][j-1]=buf; } }
Для поиска максимальных (минимальных) элементов с целью их дальнейшего упорядочивания удобно выделять отдельно одномерный массив, в котором хранить не значения элементов, а номера столбцов или строк, в которых они располагаются. Например, чтобы найти минимальные элементы в каждом столбце массива n ´ m отдельно, удобно выделить одномерный массив min[m], в котором число элементов равно числу столбцов. Значениями элементов такого массива будут номера строк, в которых располагаются минимальные элементы каждого столбца. Если же минимальных элементов в столбце несколько, то будет найден первый (или последний) минимальный, что не скажется на значении. Пример 2. Поиск минимальных элементов в каждом столбце двумерного массива. void minimum(int str,int slb, int m[max_x][max_y],int min[max_y]){ int i,j; for (j=0;i<slb;i++){//фиксируем номер столбца min[j]=0; for (i=1;i<str;i++) //пробег по столбцу, меняется номер строки if (m[i][j]<m[min[j]][j]) min[j]=i; } } В данном примере min[max_y] – это массив, значениями которого будут номера строк, в которых располагается первый минимальный элемент столбца. Так для min[j] начальное значение инициализируется как 0, то есть предполагается, что минимальный элемент расположен в строке с номером 0. Обращение m[min[j]][j]понимается так: элемент массива m, расположенный в строке с номером min[j] и столбце с номером j. Но в строке min[j] для столбца j как раз и находится минимальный элемент.
В задачах на перестановку отдельных элементов массива, столбцов или строк используется алгоритм обмена значениями двух переменных через третью переменную (возможны и другие способы обмена значениями двух переменных).
Пример 3. Обмен значениями элементов диагоналей квадратной матрицы, расположенных в одной строке. void obmen(int strslb, int m[max_x][max_y]) { int i,buf,t; for (i=0;i<strslb;i++){ //номера строки и столбца элемента главной диагонали равны buf= m[i][i]; //t-номер столбца соответствующего элемента побочной диагонали t= abs(strslb-i-1); m[i][i]= m[i][t]; m[i][t]=buf; } }
Задания 1. Объявите двумерный вещественный массив, в котором n ´ m элементов. Заполните его числами, полученными по закономерности: 2. Объявите двумерный целочисленный массив, в котором n строк по m элементов. Выполните генерацию массива случайными целыми числами из промежутка [ a; b). Переставьте столбцы массива так, чтобы их максимальные элементы образовали возрастающую последовательность. Выведите массив на экран в виде таблицы дважды – до и после перестановки. Оформите генерацию, вывод массива и перестановку столбцов с помощью функций.
3. Дана квадратная матрица размера n ´ т, заполненная с клавиатуры целыми числами так, что в каждой строке и каждом столбце ровно по одному нулевому элементу. Переставьте строки матрицы так, чтобы нулевые элементы были расположены вдоль главной диагонали. Выведите массив на экран в виде таблицы дважды – до и после перестановки. Оформите генерацию, вывод массива и перестановку строк с помощью функций. Домашние задания 1. Объявите двумерный вещественный массив, в котором n ´ m элементов. Выполните генерацию массива случайными вещественными числами из промежутка [ a; b). Отсортируйте каждый столбец массива по возрастанию. Распечатайте его в виде таблицы с точностью до 2 знаков после запятой дважды – до и после сортировки. Оформите генерацию, вывод массива и сортировку столбцов с помощью функций. 2. Дана квадратная матрица размера 2 n ´ 2 т. Получите новую матрицу, переставляя ее блоки размера n ´ n в соответствии с рисунком.
3. Приведите квадратную целочисленную матрицу n ´ n к треугольному виду. Способ генерации матрицы выберите самостоятельно.
ИНДИВИДУАЛЬНЫЕ ЗАДАНИЯ Требования к оформлению индивидуальных заданий 1. ФИО автора, номер варианта (определяется по журналу) и условие задачи должны выводится на экран при выполнении программы. /*Назначение: Программа вычисляет длину окружности и площадь круга по радиусу Входные данные: имя переменной: Radius назначение: хранит введенный радиус тип данных: float - действительное число Выходные данные: имя переменной: len назначение: содержит длину окружности тип данных: float - действительное число имя переменной: Skruga назначение: содержит площадь круга тип данных: float - действительное число Вызываемые модули: stdio.h - для работы с экраном при форматированном вводе-выводе Автор: Иванов И.И.*/
2. Файлы с программами должны называться следующим образом: V*N*.cpp, где V* – Ваш вариант (V01...V26), N* – номер задачи (N1...N8). (Например, V03N5.cpp – вариант номер 3, задание номер 5).
3. Задачи сдаются индивидуально преподавателю.
4. Задачи, оформленные не по правилам, рассматриваться не будут.
Задание 1. Указатели Решите уравнение указанным в варианте методом. Функцию передать как параметр с помощью указателя.
|
||||||||||
Последнее изменение этой страницы: 2016-09-13; просмотров: 545; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 18.118.100.38 (0.007 с.) |