Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь 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 знаков после запятой. Найдите в каждом столбце наибольший элемент. Распечатайте найденные элементы под соответствующим столбцом. 4. Объявите двумерный целочисленный массив, в котором n ´ m элементов. Выполните генерацию массива случайными целыми числами из промежутка [ a; b). Распечатайте массив в виде таблицы. Найдите суммы элементов массива по строкам. Распечатайте найденные суммы по образцу: Сумма элементов 0-й строки равна … Сумма элементов 1-й строки равна …. Домашние задания 1. На основе предложенных функций в Примерах 4, 5 и 6 разработайте коды программ. Выполните компиляцию и запуск программ. 2. Объявите двумерный вещественный массив, в котором n ´ m элементов. Заполните его числами, полученными по закономерности: . Распечатайте его в виде таблицы с точностью до 3 знаков после запятой. Найдите в каждом столбце среднее арифметическое элементов. Распечатайте найденные средние арифметические под соответствующим столбцом с той же точностью. 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 элементов. Заполните его числами, полученными по закономерности: . Отсортируйте каждую строку массива по убыванию. Распечатайте его в виде таблицы с точностью до 3 знаков после запятой дважды – до и после сортировки. Оформите генерацию, вывод массива и сортировку строк с помощью функций. 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; просмотров: 524; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.145.81.252 (0.006 с.) |