Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Генерация двумерных массивов

Поиск

Принцип генерации двумерных массивов такой же, как и одномерных.

//Описание функции генерации массива

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 с.)