русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

Многомерные массивы


Дата добавления: 2015-08-14; просмотров: 3019; Нарушение авторских прав


Лабораторная работа № 4

Составление программ с использованием
двумерных массивов

Цель работы: 1) изучить описание, ввод и вывод двумерных статических массивов на языке С++; 2) освоить обработку матриц с использованием вложенных циклов.

Теоретические сведения

Многомерные массивы

В многомерном массиве каждый дополнительный индекс обеспечивает дополнительное средство доступа к конкретному элементу, или дополнительное измерение. Наиболее распространенным видом многомерного массива являются двумерные массивы или матрицы.

Общий синтаксис для объявления двумерных и трехмерных массивов:

тип_элемента имя_массива [размер_1] [размер_2];

тип_элемента имя_массива [размер_1 ] [размер_2] [размер_3];

Как и в одномерных массивах, каждый индекс имеет нижнюю границу, равную 0, а число элементов для каждого уровня индекса определяется при объявлении многомерного массива.

Пример 4.1.Объявление многомерных массивов

double matrix A [100][10];

char table [41][22][3];

int index [7][12];

Большинство компиляторов хранит элементы многомерного массива друг за другом, т.е. как длинный одномерный массив. Исполняемый модуль вычисляет, где расположен искомый элемент в этом массиве.

Однако заполнение и обработку многомерных массивов чаще всего производят пользуясь вложенными циклами.

С++ дает возможность инициализировать многомерный массив способом, аналогичным инициализации одномерных массивов. Для этого нужно использовать список значений, расположенных в той же последовательности, в которой элементы многомерного массива хранятся в памяти ЭВМ.

Пример 4.2.Инициализация матрицы

. . .

int main ( )

{ const int MAX_COL=4;

const int MAX_ROW=3;

double x[MAX_ROW][MAX_COL]= {{ 1, 2, 3, 4}, // строка # 1

{ 5, 6, 7, 8}, // строка # 2



{ 9,10,11,12}}; // строка # 3

. . .

return 0 };

Пример 4.3. Ввод многомерных массивов с клавиатуры.

. . .

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

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

{ cout << "x[" << i <<"][" << j<<"]=";

cin >> x[i][ j]; }

}

. . .

Пример 4.4. Ввод многомерных массивов с помощью генератора случайных чисел.

. . .

#include <time.h>

time_t t;

srand(time(&t)); //<stdlib.h>

. . .

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

{ for (j=0; j<MAX_COL; j++) x[i][ j]=rand ()%10;

}

. . .

Вывод массивов также осуществляется с помощью циклов, одиночных для одномерных массивов или вложенных для многомерных массивов.

Пример 4.5.Вывод матриц

. . .

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

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

{ cout << setw(5) << x[i][ j];

}

cout << endl; }

При обработке матриц чаще всего встречаются следующие типы задач:

1) работа с матрицей в целом;

2) работа со строкой (столбцом) матрицы;

3) работа с диагональными элементами.

При работе с матрицей в целом, в качестве объекта для сравнения выбирают элемент с индексами (0,0), затем, последовательно перебирая все элементы матрицы, выполняют необходимые действия. Перебор элементов происходит с использованием вложенных циклов.

Пример 4.6.Определить среднее арифметическое значение элементов матрицы x[6][7] целого типа.

#include <iostream>

#include <stdlib.h>

#include <conio.h>

#include <time.h>

#include <iomanip>

using namespace std;

 

int main()

{ const int MAX_COL=6;

const int MAX_ROW=7;

int x[MAX_ROW][MAX_COL];

int i,j,sum=0;

float sred;

time_t t;

srand(time(&t)); // инициализация генератора случайных

// чисел

for(i=0; i<MAX_ROW; i++) // Заполнение массива случайными

for(j=0; j<MAX_COL; j++) // числами

x[i][j]=rand()%10;

for(i=0; i<MAX_ROW; i++) // Вывод матрицы на экран

{ cout << endl;

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

{ cout << setw(5) << x[i][j]; // и вычисление суммы

sum+=x[i][j]; // ее элементов

}

}

sred= float (sum)/(MAX_ROW*MAX_COL);

cout << "\nСумма = " << sum << "\nСреднее арифметическое = " << sred;

return 0;

}

Для поиска элемента строки (столбца) объектом сравнения является первый элемент строки с индексами i,0 или столбца с индексами 0,j и обработка идет до конца строки (столбца). Обычно результатом такой обработки массива является вектор-столбец или вектор-строка.

Пример 4.7.Определить минимальный элемент каждой строки действительной матрицы matr [8][4].

#include <iostream.h>

#include <stdlib.h>

#include <conio.h>

#include <time.h>

#include <iomanip>

using namespace std;

 

int main()

{ const int COL=4;

const int ROW=8;

float matr[ROW][COL]; //объявление матрицы вещественного типа

int i,j;

float min[ROW];

time_t t;

srand(time(&t));

 

for (i=0; i<ROW; i++) // заполнение и вывод матрицы

{ for (j=0; j<COL; j++) // на экран

{ matr[i][j]=rand(100);

cout << setw(6) << matr[i][j];

}

cout << endl;

}

for (i=0; i<ROW; i++) // формирование вектора-столбца

{ min[i]=matr[i][0]; // из минимальных элементов строк

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

if (matr[i][j]<min[i]) min[i]=matr[i][j];

cout << "min= " << min[i];

}

cout <<endl ;

for (i=0; i< ROW; i++) cout << setw(6) << min[i];

}

При работе с диагональными элементами учитывают, что индексы элементов, стоящих на главной диагонали, удовлетворяют условию i = j.

Элементы,стоящиена побочной диагонали, имеют индексы, удовлетворяющие условию

i=n - j - 1,

если n - порядок матрицы (предполагается, что матрица - квадратная).

Пример 4.8. Найти количество четных элементов целочисленной квадратной матрицы порядка 9, стоящих ниже побочной диагонали.

#include <iostream>

#include <stdlib.h>

#include <conio.h>

#include <math.h>

#include <time.h>

#include <iomanip>

using namespace std;

 

void main()

{ const int RANG=9;

int matr[RANG][RANG];

int i,j,kol=0;

time_t t;

srand(time(&t));

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

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

{ matr[i][j]=rand()%10;

cout << setw(4) << matr[i][j];

}

cout <<endl;

}

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

{ for (j=0; j<RANG; j++) if ((i>RANG-j-1) && (matr[i][j]%2==0)) kol++; }

cout << "Количество четных элементов под главной диагональю равно " << kol; }

Контрольные вопросы

1. Позволяет ли С++ изменять размер массива?

2. Как расположены в памяти элементы многомерных массивов?

3. Необходимо ли использовать для массивов только предопределенные типы?

4. Как объявить двумерный массивы?

На оценку "3" нужно выполнить свой вариант из табл. 4.1, на "4" и "5" – из табл. 4.2.

Варианты заданий

Таблица 4.1

Номер варианта Задание
    1, 15 Дана целочисленная матрица размера 6x9, содержащая как положительные, так и отрицательные элементы. Найти минимальный элемент матрицы и среднее арифметическое значение положительных элементов матрицы.
  2, 16 Дана целочисленная матрица 7x10. Поменять местами максимальное и минимальное значения матрицы.
  3, 17 Дана целочисленная матрица 5x8. Определить, что больше – сумма четных элементов правой половины матрицы или сумма нечетных элементов левой половины матрицы.
  4, 18 Дана целочисленная матрица 7x7. Найти сумму положительных элементов, стоящих над главной диагональю и количество нечетных элементов, стоящих под побочной диагональю.
  5, 19 Дана целочисленная матрица mxk. Найти минимальное значение для верхней половины матрицы и максимальное значение для нижней половины.
  6, 20 Дана целочисленная матрица mxm. Найти максимальное значение для ее первой четверти и минимальное - для третьей четверти.
  7, 21 Дана матрица 6х7, элементами которой являются значения символьного типа. Подсчитать количество буквенных символов в матрице и общее количество цифровых символов в ее верхней половине.
  8, 22 Дана целочисленная матрица 9x9. Определить количество нулевых элементов над побочной диагональю и сумму четных элементов под главной диагональю.
  9, 23 Дана целочисленная матрица 5x7. Найти минимальное значение среди четных элементов матрицы и сумму положительных элементов матрицы.
  10, 24 Дана матрица 5х7, элементами которой являются значения символьного типа. Найти максимальное значение среди буквенных символов и минимальное среди цифровых значений.
  11, 25 Дана действительная матрица 7x7. Найти сумму элементов, попадающих в заданный с клавиатуры интервал. Найти количество элементов, не попадающий в этот интервал.
  12, 26 Дана матрица 4х5, элементами которой являются значения символьного типа. Заменить на символ, введенный с клавиатуры, значения символов, больших, чем это значение, и подсчитать количество таких замен.
  13, 27 Дана целочисленная матрица 4x7. Определить минимальное значение матрицы. Найти среднее арифметическое значение модулей отрицательных элементов в матрице.
  14, 28 Дана целочисленная матрица размером 4x6. Получить новую матрицу путем умножения всех элементов на наименьший по модулю элемент.

Таблица 4.2

Номер варианта Задание
    1, 15 Дана целочисленная матрица размера 6x9, содержащая как положительные, так и отрицательные элементы. Сформировать одномерные массивы, состоящие из средних арифметических значений положительных элементов каждого столбца матрицы и средних арифметических значений нечетных элементов каждой строки матрицы.
  2, 16 Дана целочисленная матрица 7x10. Поменять местами максимальное и минимальное значения матрицы. Найти суммы элементов тех столбцов, где находятся эти значения.
  3, 17 Дана целочисленная матрица 5x8. Найти сумму четных элементов каждого столбца правой половины матрицы и среднее арифметическое значение нечетных элементов каждого столбца левой половины матрицы. Сформировать соответствующие одномерные массивы.
  4, 18 Дана целочисленная матрица 4x7. Определить минимальное и максимальное значения матрицы и их местоположение. Найти среднее арифметическое значение положительных элементов и модулей отрицательных элементов в каждом столбце матрицы. Результаты вычислений записать в одномерные массивы.
  5, 19 Дана целочисленная матрица mxk. Найти минимальное значение для правой половины матрицы и максимальное значение для левой половины. Сформировать новую матрицу путем прибавления к каждому элементу верхней половины исходной матрицы определенного минимального значения и к каждому элементу ее нижней половины определенного максимального значения.
  6, 20 Дана целочисленная матрица mxm. Найти максимальное значение для каждого столбца матрицы и минимальное – для каждой строки матрицы. Заменить каждый элемент матрицы на значение его квадрата.
    7, 21 Дана матрица 5х7, элементами которой являются значения символьного типа. Составить одномерный массив, содержащий количество буквенных символов в каждом из ее столбцов. Подсчитать количество цифровых символов над третьей строкой матрицы и общее количество символов, не являющихся ни цифрой, ни буквой.
    8, 22 Дана целочисленная матрица 9x9. Определить количество нулевых элементов под главной диагональю матрицы и под ее побочной диагональю. Сформировать одномерный массив, содержащий количество отрицательных элементов каждого столбца матрицы.
    9, 23 Дана действительная матрица 7x7. Найти минимальное значение среди элементов, стоящих над главной диагональю, и максимальное среди элементов, находящихся ниже главной диагонали, а также их местоположение. Сформировать одномерный массив, содержащий сумму элементов четных строк и произведение элементов нечетных строк.
  10, 24 Дана целочисленная матрица размером 5x5. Получить новую матрицу путем умножения всех элементов на наименьший по модулю элемент. Сформировать одномерный массив из максимальных элементов каждой строки полученной матрицы.
  11, 25 Дана действительная матрица 7x7. Найти сумму элементов в заштрихованной области. Сформировать новую матрицу путем прибавления полученного значения к каждому элементу из незаштрихованной области исходной матрицы. Сформировать одномерный массив, содержащий количество четных элементов в каждом столбце полученной матрицы.
  12, 26 Дана целочисленная матрица 7x7. Найти сумму положительных элементов, стоящих над главной диагональю и количество нечетных элементов, стоящих под побочной диагональю. Заменить полученными значениями соответственно элементы четных и нечетных столбцов.
  13, 27 Дана действительная матрица 6x8. Найти сумму элементов каждой строки верхней половины матрицы и произведение элементов каждой строки ее нижней половины. Определить значение и местоположение максимального элемента верхней половины матрицы и минимального элемента ее нижней половины.
  14, 28 Дана вещественная квадратная матрица порядка 5. Получить новую матрицу путем прибавления к элементам каждой строки матрицы наименьшего значения элементов этой строки. Сформировать одномерный массив, содержащий количество четных элементов в четных столбцах полученной матрицы и количество нечетных элементов в нечетных столбцах.

 

 

Приложение

Отладка приложений в ИСР Borland C++ Builder и MS Visual C++.

В ИСР Borland C++ для отладки используются следующие «горячие» клавиши:

F4 Run to cursor Выполнить до текущего места
F5 Set breakpoint Установить точку прерывания программы
F7 Trace into Выполнить строку программы с заходом в код вызываемых функций
F8 Step over Выполнить строку программы без захода в код вызываемых функций
F9 Run Выполнить
Shift+F7 Trace to next source line Выполнить до следующей строки с исполняемым кодом
Ctrl+Alt+L Show local variables Показать окно значений локальных переменных
Ctrl+Alt+W Show watches Показать окно слежения за переменными
Ctrl+Alt+B Show breakpoints Показать окно точек прерывания
Ctlr+F2 Stop Остановка отладки

 

 

В ИСР Visual C++ для отладки используются следующие «горячие» клавиши:

Ctrl+F10 Run to cursor Выполнить до текущего места
F9 Set breakpoint Установить точку прерывания программы
F11 Trace into Выполнить строку программы с заходом в код вызываемых функций
F10 Step over Выполнить строку программы без захода в код вызываемых функций
F5 Run Выполнить
Ctrl+Shift+F5 Restart Выполнить с учётом изменений
Shift+F5 Stop Остановить отладку

 

При отладке следуйте следующим правилам:

- введите в критические места программы точки прерываний;

- на критическом участке выполняйте программу по шагам;

- если вызывается ваша функция – используйте отладку с заходом в функции, если же в текущей строке программы вызываются только библиотечные функции – используйте отладку без захода в функции;

- для слежения за значениями переменных внутри функции используйте окно значений локальных переменных;

- для слежения за выбранными переменными используйте окно слежения за переменными;

- в окне слежения за переменными используйте Ins для добавления переменной и Del для удаления.

Отладка приложений позволяет выявить ошибки алгоритма и ошибки программиста, которые компилятор самостоятельно выявить не может.

 



<== предыдущая лекция | следующая лекция ==>
Три концепции реализации МПС | Індивідуальне завдання №1


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

Генерация страницы за: 0.234 сек.