Стандартные алгоритмы работы с двумерными массивами

1.Ввод элементов массива с клавиатуры:

const int n=20;

int b[n][n];

int i;

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

for (j=0; j<n; j++) cin >> b[i][j];

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

const int n=20;

int b[n][n];

int i;

randomize();

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

for (j=0; j<n; j++) b[i][j]=random(100) - 50;

// генерирование случайных

// чисел в диапазоне [-50; 50].

3.Вывод элементов массива на экран:

const int n=20;

int b[n][n];

int i;

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

for (j=0; j<n; j++) cout << b[i][j];


4. Поиск максимального элемента в массиве и запоминание позиции максимального элемента в массиве:

const int n=20;

int b[n];

int i, n_imax, n_jmax;

max=b[0][0];

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

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

if (max >b[i][j]) { max = b[i][j]; n_imax=i; n_jmax=j }

cout <<”Максимальный элемент массива b[”

<<n_ imax<<“,”<<n_jmax<<”]=”<<max;

5. Поиск минимального элемента в массиве и запоминание позиции минимального элемента в массиве:

const int n=20;

int b[n];

int i, n_imin, n_jmax;

min=b[0][0];

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

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

if (min >b[i][j])

{

min = b[i][j]; n_imin=i; n_jmin=j;

}

cout <<”Минимальный элемент массива b[”<<n_ imin

<<”,”<<n_jmin<<”]=”<<min;

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

#include <stdio.h>

int main(){

const int nstr = 4, nstb = 5; // размерности массива

int b[nstr][nstb]; // описание массива

int i, j;

for (i = 0; i<nstr; i++) // ввод массива

for (j = 0; j<nstb; j++) scanf("%d", &b[i][j]);

int istr = -1, MaxKol = 0;

for (i = 0; i<nstr: i++){ // просмотр массива по строкам

int Kol = 0:

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

if (b[i][j] == 0)Kol++;

if (Kol > MaxKol){istr = i; MaxKol = Kol;}

}

printf(" Исходный массив:\п");

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

for (j = 0; j<nstb; j++) printf("%d, b[i][j]);

printf("\n");

}

if (istr == -1) printf ("Нулевых элементов нет");

else printf("Hoмep строки: %d"? istr);

return 0;

}

Номер искомой строки хранится в переменной istr, количество нулевых элемен­тов в текущей (i-й) строке – в переменной Kol, максимальное количество ну­левых элементов – в переменной MaxKol. Массив просматривается по строкам, в каждой из них подсчитывается количество нулевых элементов (обратите вни­мание, что переменная Kol обнуляется перед просмотром каждой строки). Наи­большее количество и номер соответствующей строки запоминаются.

Для создания динамического многомерного массива необходимо указать в опера­ции new все его размерности (самая левая размерность может быть переменной), например:

int nstr = 5;

int ** m = (int **) new int [nstr][10];

Более универсальный и безопасный способ выделения памяти под двумерный массив, когда обе его размерности задаются на этапе выполнения программы, приведен ниже:

int nstr, nstb;

cout << " Введите количество строк и столбцов :";

cin >> nstr >> nstb;

int **а = new int *[nstr]; // 1

for (int i = 0; i<nstr; i++) // 2

a[i] = new int [nstb]; // 3

В операторе 1 объявляется переменная типа «указатель на указатель на int» и вы­деляется память под массив указателей на строки массива (количество строк – nstr). В операторе 2 организуется цикл для выделения памяти под каждую строку массива. В операторе 3 каждому элементу массива указателей на строки присваивается адрес начала участка памяти, выделенного под строку двумерного масси­ва. Каждая строка состоит из nstb элементов типа int (рис. 5.2).

Рис. 5.2. Выделение памяти под двумерный массив

Освобождение памяти из-под массива с любым количеством измерений выпол­няется с помощью операции delete []. Указатель на константу удалить нельзя.

Для правильной интерпретации объявлений полезно запомнить мнемоническое правило: «суффикс привязан крепче префикса». Если при описании переменной используются одновременно префикс * (указатель) и суффикс [] (массив), то переменная интерпретируется как массив указателей, а не указатель на массив: int *р[10]; - массив из 10 указателей на int.


 

Лекция 6. Введение в обработку символов и строк

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








Дата добавления: 2015-10-09; просмотров: 995;


Поиск по сайту:

При помощи поиска вы сможете найти нужную вам информацию.

Поделитесь с друзьями:

Если вам перенёс пользу информационный материал, или помог в учебе – поделитесь этим сайтом с друзьями и знакомыми.
helpiks.org - Хелпикс.Орг - 2014-2024 год. Материал сайта представляется для ознакомительного и учебного использования. | Поддержка
Генерация страницы за: 0.01 сек.