Практическое занятие №21

HАИМЕНОВАНИЕ: Решение задач по многомерным динамическим массивам

1.ЦЕЛЬ РАБОТЫ: Научится использовать двумерные массивы при программирование на С++

2.ПОДГОТОВКА К ЗАНЯТИЮ:

2.1. Изучить предложенную литературу.

2.2. Подготовить бланк отчёта.

3.ЛИТЕРАТУРА:

3.1 Белов В.В., Чистякова В.И. Программирование в Delphi: процедурное, объектно-ориентированное, визуальное. Учебное пособие. – М.: Горячая линия – Телеком, 2009

3.2 Голицына О.Л., Попов И.И. Основы алгоритмизации и программирования. – Форум, 2010

3.3Семакин И.Г., Шестаков А.П. Основы алгоритмизации и программирования. – М.: Издательский центр «Академия», 2008

3.4Семакин И.Г., Шестаков А.П. Основы программирования. – М.: Издательский центр «Академия», 2008

4. ПЕРЕЧЕНЬ ОБОРУДОВАНИЯ И ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ:
4.1. Персональный IBM PC.

5.ЗАДАНИЕ:

5.1 С помощью датчика случайных чисел заполнить двоичную матрицу 5x10. Определить номер строки с наибольшим количеством нулей.

5.2 Транспонировать целочисленную матрицу 5x5, т.е. отразить относительно главной диагонали.

5.3 В двоичной матрице 10х 10 найти совпадающие строки.

6. ПОРЯДОК ВЫПОЛНЕНИЯ РАБОТЫ:

6.1 По предложенной литературе изучить необходимый материал;

6.2 Выполнить задания практического занятия и записать листинг программы;

6.3 Дать ответы на контрольные вопросы;

7. СОДЕРЖАНИЕ ОТЧЕТА:

7.1 Наименование и цель работы

7.2 Код программы

7.3 Записать результат (листинг) выполненых заданий.

7.4 Ответы на контрольные вопросы

7.5 Вывод о проделанной работе

8. КОНТРОЛЬНЫЕ ВОПРОСЫ:

8.1 В чем разница при объявление двумерных массивов в Паскале и Си?

8.2 Как инициализируются элементы массива?

8.3 Что такое – манипулятор?

8.4 Что делает функция – rand?

ПРИЛОЖЕНИЕ:

Многомерные массивы. Двумерный массив трактуется как одномерный массив, элементами которого является массив с указанным в описании типом элементов. Например, оператор f l o a t R[5][10]; объявляет массив из пяти элементов, каждый из которых есть массив из десяти вещественных чисел. Отдельные величины этого массива обозначаются именами с двумя индексами: R [ 0 ] [0], R [ 0 ] [ 1 ],..., R [ 4 ] [ 9]. Объединять индексы в одну пару скобок нельзя, т.е. запись R[2, 3] ошибочна. Пример описания трехмерного массива:

double X[3][7][20];

Как и в Паскале, порядок расположения элементов многомерного массива в памяти такой, что прежде всего меняется последний индекс, затем предпоследний и т.д., и лишь один раз пробегает свои значения первый индекс. При описании многомерных массивов их также можно инициализировать. Делать это удобно так:

i n t M[3][3]={ 11,12,13,21,22,23,31,32,33 };

Рассмотрим примеры программ обработки матриц — числовых двумерных массивов.

Пример 4. Вычисление и вывод на экран таблицы умножения в форме матрицы Пифагора.

// Матрица Пифагора

•include <stdio.h>

•include <conio.h>

void main()

{ int i,j, A[10][10];

clrscr ();

for(i=l; i<=9; i++)

{ for(j=l; j<=9; j++)

{ A[i][j]=i*j;

printf("%5d",A[i][j]);

}

printf ("\n");

}

}

По данной программе в двумерном массиве А не будут заполнены нулевая строка и нулевой столбец. По-прежнему интерпретируем первый индекс двумерного массива как номер строки матрицы, а второй индекс — как номер столбца.

Пример 5. Заполнение матрицы случайными числами в диапазоне

от 0 до 99 и поиск в ней максимального значения.

# i n c l u d e <iostream.h>

# i n c l u d e <iomanip.h>

# i n c l u d e <conio.h>

# i n c l u d e < s t d l i b. h>

#define n 5

v o i d main()

{ i n t i, j, ImaxA,JmaxA,A[n] [ n ];

c l r s c r ();

r a n d o m i z e (); //Установка датчика случайных чисел

f o r (i = 0; i<n; i++)

{ for(j=0; j<n; j++)

{ A[i] [j]=rand()%100;

cout<<setw(6) «A [ i ] [ j ];

}

c o u t «e n d l;

}

ImaxA=JmaxA=0;

f o r (i = 0; i<n; i++)

{ f o r (j = 0; j<n; j++)

i f (A[i][j]>A[ImaxA][JmaxA])

{ ImaxA=i; JmaxA=j; }

}

соии<"Максимальное_значение: ["<<ImaxA«"] ["

<<JmaxA<<"]=" <<A[ImaxA][JmaxA];

}

В результате тестирования этой программы получен следующий

результат:

46 23 57 35 18

8 48 68 4 70

56 98 16 71 40

70 84 66 67 11

20 44 37 57 38

Максимальное значение: А[2][1]=98

В данной программе имеются новые элементы, использование которых требует пояснения. В стандартной библиотеке с заголовочным файлом s t d l i b. h содержится функция, прототип которой имеет вид: i n t rand (v o i d). Результатом этой функции является целое случайное число из диапазона от 0 до RAND_MAX. Значение константы RAND_MAX определено в заголовочном файле s t d l i b. h и обычно равно 32767 — максимально допустимому целому числу. Для получения случайных чисел в диапазоне от 0 до N- 1 достаточно вычислить остаток от целого деления rand () на N. Функция с прототипом void randomize (void) выполняет первоначальную настройку датчика случайных чисел так, чтобы последовательность чисел не повторялась при повторном выполнении программы. Другим новым элементом в данной программе является использование манипуляторов для управления потоковым выводом с помощью стандартного объекта cout. Манипуляторы объявляются в заголовочном файле iomanip.h. Манипулятор setw(n) влияет на формат следующего элемента выходного потока. Он указывает на то, что значение будет выводиться в п позиций на экране (в программе п = б). Другой использованный манипулятор — endl — обозначает конец строки и переводит экранный курсор на начало новой строки. Его действие аналогично действию управляющего символа \n.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: