Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
321 / Основы алгоритмизации и программирования.doc
Скачиваний:
112
Добавлен:
11.04.2015
Размер:
1.1 Mб
Скачать

Лабораторная работа . Двумерные массивы: задачи сортировок и перестановок в двумерных массивах.

Цель работы: изучить особенности применения алгоритмов сортировок и перестановок в двумерных массивах, научиться решать задачи сортировок и перестановок в двумерных массивах на языке C++.

Задания к лабораторной работе.

Выполните приведенные ниже задания.

  1. Объявите двумерный вещественный массив, в котором n  m элементов. Заполните его числами, полученными по закономерности: . Отсортируйте каждую строку массива по убыванию. Распечатайте его в виде таблицы с точностью до 3 знаков после запятой дважды – до и после сортировки. Оформите генерацию, вывод массива и сортировку строк с помощью функций.

  2. Объявите двумерный целочисленный массив, в котором n строк по m элементов. Выполните генерацию массива случайными целыми числами из промежутка [ab). Переставьте столбцы массива так, чтобы их максимальные элементы образовали возрастающую последовательность. Выведите массив на экран в виде таблицы дважды – до и после перестановки. Оформите генерацию, вывод массива и перестановку столбцов с помощью функций.

  3. Объявите двумерный вещественный массив, в котором n  m элементов. Выполните генерацию массива случайными вещественными числами из промежутка [ab). Отсортируйте каждый столбец массива по возрастанию. Распечатайте его в виде таблицы с точностью до 2 знаков после запятой дважды – до и после сортировки. Оформите генерацию, вывод массива и сортировку столбцов с помощью функций.

  4. Дана квадратная матрица размера 2n  2n. Получите новую матрицу, переставляя ее блоки размера n  n в соответствии с рисунком.

  1. Приведите квадратную целочисленную матрицу n  n к треугольному виду. Способ генерации матрицы выберите самостоятельно.

2.5. Контроль знаний (тесты, образец билета, вопросы для экзамена, зачета)

2.5.1. Текущий контроль знаний

Модуль 1 «Алгоритмы поиска, замены и сортировки данных»

Тесты «Массивы»

Задача 1.

Вариант 1 Задачи 1. В программе объявлен и проинициализирован массив int a[]={9,8,7,6,5,4,3,2,1,0}. Укажите значение a[a[a[9]]].

а) 9

б) +0

в) 1

г) элемент с таким индексом в данном массиве не определен

Вариант 2 Задачи 1. В программе объявлен и проинициализирован массив int a[]={2,4,6,8,10,12,14,16}. Укажите значение *(a+a[2]).

а) элемент с таким индексом в данном массиве не определен

б) 2

в) 10

г) +14

Вариант 3 Задачи 1. В программе объявлен и проинициализирован массив int a[]={1,3,8,5,0,4,9,2,13}. Укажите значение a(a[7]+a[1]).

а) элемент с таким индексом в данном массиве не определен

б) 8

в) +4

г) 13

Задача 2.

Вариант 1 Задачи 2. Укажите название алгоритма сортировки, фрагмент кода которой представлен ниже.

void Sort (int k,int x[max]) {

int i,j,min,temp;

for (i=0;i<k-1;i++) {

min=i;

for (j=i+1;j<k;j++){

if (x[j]<x[min])

min=j;

}

temp=x[i];

x[i]=x[min];

x[min]=temp;

}

}

а) пузырьковая сортировка

б) шейкерная сортировка

в) + сортировка методом простого выбора

г) сортировка методом простого включения

Вариант 2 Задачи 2. Укажите название алгоритма сортировки, фрагмент кода которой представлен ниже.

void Sort (int k,int x[max]) {

int i,j, temp;

for (i=0;i<k;i++) {

temp=x[i];

for (j=i-1; j>=0 && x[j]>temp; j--)

x[j+1]=x[j];

x[j+1]=temp;

}

}

а) пузырьковая сортировка

б) шейкерная сортировка

в) +сортировка методом простого выбора

г) сортировка методом простого включения

Вариант 3 Задачи 2. Укажите название алгоритма сортировки, фрагмент кода которой представлен ниже.

void Sort (int k,int x[max]) {

int i,j,buf;

for (i=k-1;i>0;i--)

for (j=0;j<i;j++)

if (x[j]>x[j+1]) {

buf=x[j];

x[j]=x[j+1];

x[j+1]=buf;

}

}

а)+пузырьковая сортировка

б) шейкерная сортировка

в) сортировка методом простого выбора

г) сортировка методом простого включения

Задача 3.

Вариант 1 Задачи 3. Укажите обращение, аналогичное обращению mas[i][j] к элементу двумерного массива размерности M×N.

а) mas[i,j]

б) +*(*(mas+i)+j)

в) mas[N*i+j]

г) mas[0][0]+ N*i+j

Вариант 2 Задачи 3. Укажите обращение, аналогичное обращению *(*(mas+i)+j) к элементу двумерного массива размерности M×N.

а) *(mas+N*i+j)

б)+mas[i][j]

в) mas[0][0]+ N*i+j

г) mas[i,j]

Вариант 2 Задачи 3. Укажите обращение, аналогичное обращению (*(arr+i))[j] к элементу двумерного массива размерности M×N.

а) *(mas+N*i+j)

б) +mas[i][j]

в) +*(*(mas+i)+j)

г) mas[i,j]

Задача 4.

Вариант 1 Задачи 4. Укажите в байтах размер памяти, занимаемой массивом, который объявлен так:

int m[][5][3]={{{1,2,3},{1}},{{4},{7,8}}};

а) 28

б) 32

в) +120

г) для безразмерного массива размер не определен

Вариант 2 Задачи 4. Укажите в байтах размер памяти, занимаемой массивом, который объявлен так:

float m[][6]={{6.2},{14.3,0.3},{7.0,1.0,5.5,7.8}};

а) 28

б) 48

в) +72

для безразмерного массива размер не определен

Вариант 3 Задачи 4. Укажите в байтах размер памяти, занимаемой массивом, который объявлен так:

а) int m[][7]={{6,2,4,8},{13},{5,6,7}};

б) +84

в) 32

г) 48

для безразмерного массива размер не определен

Модуль 2 «Динамические структуры данных»

Задача 1.

Вариант 1 Задачи 1. Чем ограничен размер динамической памяти?

а) +размером оперативной памяти

б) размером внешних накопителей

в) размером стековой области

г) нет никаких ограничений

Вариант 2 Задачи 1. Из какой области выделяются блоки динамической памяти?

а) стековой области

б) области программы

в) +области свободной памяти

г) области глобальных переменных

Вариант 3 Задачи 1. Динамическая память явно не освобождена в программе. Тогда:

а) она будет занята и после завершения программы

б) +она автоматически освободится после завершения работы программы

в) она освободится только при выходе из среды программирования

г) она освободится только после выключения компьютера

Задача 2.

Вариант 1 Задачи 2. Укажите некорректное выделение динамической памяти, если выполнено объявление int *pt;.

а) pt = new int;

б) pt = new int [15];

в) +pt = new int [];

г) pt = new int (15);

Вариант 2 Задачи 2. Укажите корректное выделение динамической памяти, если выполнено объявление float *pf;.

а) *pf = new float;

б) +pf = new float [15];

в) pf = new float [];

г) pf = new sizeof(float);

Вариант 3 Задачи 2. Укажите ошибку при использовании операции выделения динамической памяти, если выполнено объявление char *ph;.

а) ph = new char [20];

б) +ph = *(new char);

в) ph = new char ('&');

г) ph = new char;

Задача 3.

Вариант 1 Задачи 3. Какая область динамической памяти, выделенной под одномерный массив mass, будет освобождена следующим действием: delete mass;?

а) вся используемая динамическая память

б) область, занятая всеми элементами массива mass

в) +область, занятая только первым элементом массива mass

г) к массиву данная операция не применима

Вариант 1 Задачи 3. Укажите верное освобождение динамической памяти, занятой всеми элементами массива mass.

а) +delete [] mass;

б) delete mass;

в) +free (mass);

г) free (*mass);

Вариант 3 Задачи 3. Какая область динамической памяти, выделенной под одномерный а

массив mass, будет освобождена следующим действием: free (mass);?

а) вся используемая динамическая память

б) +область, занятая всеми элементами массива mass

в) область, занятая только первым элементом массива mass

г) к массиву данная операция не применима

Задача 4.

Вариант 1 Задачи 4. Какие действия выполняет приведенный фрагмент кода?

int *mas, n=10, i;

mas = new int [n];

mas[0]= a[1]=1;

for (i=2; i<n; i++)

mas[i]= mas[i-1]+ mas[i-2];

а) динамическая память под массив не выделена, фрагмент ошибочный

б) обращение к элементам массива неверно, фрагмент ошибочный

в) выделяет динамическую память для 10 целочисленных элементов и заполняет его случайными числами

г) +выделяет динамическую память для 10 целочисленных элементов массива и заполняет его числами Фибоначчи

Вариант 2 Задачи 4. Какие действия выполняет приведенный фрагмент кода?

int n=20, i;

float *mas;

mas = calloc(n,sizeof(float));

for (i=0; i<n; i++)

mas[i]= exp(i);

а) выделяет динамическую память для 20 вещественных элементов и заполняет его случайными числами

б) выделяет динамическую память для 20 вещественных элементов массива и заполняет его значениями экспоненциальной функции

в) +не выполнено явное преобразование типа указателя при выделении динамической памяти, фрагмент ошибочный

г) во фрагменте ошибка вследствие неверного обращения к элементам массива

Вариант 3 Задачи 4. Какие действия выполняет приведенный фрагмент кода?

int n=15, i;

double *mas;

mas = (double *)malloc(sizeof(double));

for (i=0; i<n; i++)

cin >> mas[i];

а) выделяет динамическую память для 15 вещественных элементов и считывает в него элементы с клавиатуры

б) не выполнено явное преобразование типа указателя при выделении динамической памяти, фрагмент ошибочный

в) во фрагменте ошибка вследствие неверного обращения к элементам массива

г) +динамическая память выделена только для одного вещественного числа, фрагмент ошибочный

Модуль 3 «Алгоритмы обработки данных»

Задача 1.

Вариант 1 Задачи 1. Укажите последовательности, которые являются бинарными пирамидами.

а) +8, 4, 7, 3, 1, 5, 2, 2, 0

б) 8, 7, 4, 3, 1, 5, 2, 2, 0

в) +8, 5, 7, 4, 3, 3, 2, 2, 3

г) 8, 5, 7, 4, 6, 3, 2, 2, 3

Вариант 2 Задачи 1. Укажите последовательности, которые не являются бинарными пирамидами.

а) 7, 5, 7, 4, 2, 6, 5, 3, 2

б) +7, 5, 7, 4, 6, 2, 5, 3, 2

в) 8, 6, 8, 3, 0, 7, 6, 1, 3

г) +8, 6, 8, 3, 0, 7, 6, 1, 3, 1

Вариант 3 Задачи 1. Укажите последовательности, которые являются бинарными пирамидами.

а) +9, 6, 8, 3, 5, 7, 4, 2, 1, 4

б) 9, 5, 8, 3, 4, 7, 4, 2, 1, 6

в) 9, 6, 6, 2, 5, 8, 7, 0, 1, 3

г) +9, 6, 8, 2, 5, 6, 7 0, 1, 3

Задача 2.

Вариант 1 Задачи 2. В вершину пирамиды помещен элемент. На какой позиции он остановится в результате спуска вниз? Нумерация элементов начинается с нуля.

а) 1

б) 3

в) +4

г) 7

Вариант 2 Задачи 2. В вершину пирамиды помещен элемент. На какой позиции он остановится в результате спуска вниз? Нумерация элементов начинается с нуля.

а) 2

б) +5

в) 6

г) 8

Вариант 3 Задачи 2. В вершину пирамиды помещен элемент. На какой позиции он остановится в результате спуска вниз? Нумерация элементов начинается с нуля.

а) 8

б) 4

в) +3

г) 2