Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Навроцкий, А. А. Основы алгоритмизации и программирования в среде VISUAL C++_Уч_мет_пос.pdf
Скачиваний:
72
Добавлен:
16.03.2016
Размер:
3.64 Mб
Скачать

if (a[i] > max) max = a[i];

}

Пример 6.4. Удаление из одномерного массива всех отрицательных элементов.

for (i=0; i<n; i++) if (a[i] < 0)

 

{

 

 

 

 

 

 

 

 

 

 

 

Р

 

for (j=i+1; j<n; j++) a[j-1]=a[j];

 

 

 

 

 

 

 

 

 

n--;

 

i--;

 

 

 

 

 

 

 

 

 

 

}

 

 

 

 

 

 

 

 

 

У

 

 

 

 

 

 

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

 

 

 

 

 

 

 

И

Объявление одномерного массива:

 

Г

тип

 

 

 

 

 

 

 

 

Б

 

 

 

 

имя_массива [размер_1] [размер 2] … [размер_N];

Пример объявления двумерного массива:

 

 

 

 

int m[4][5];

 

 

 

 

а

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Здесь объявлен двумерный массив из 4 · 5 = 20 элементов.

 

 

 

 

 

 

 

 

 

к

 

 

 

 

Можно одновременно с объявлением иници лизировать элементы массива:

 

 

 

 

 

 

 

авляет

 

 

 

 

 

 

int s[2][3] = { {3, 4, 2}, {6, 3, 4} };

 

 

 

 

В одномерном массиве п рвый инде с является номером строки, а вто-

 

 

 

 

 

 

т

 

 

 

 

 

 

рой – номером столбца. Поэтому, наприм р, значение элемента s[1][0] равно 6.

Математически массив s предс

 

собой матрицу вида

 

 

 

 

3 4

2

о

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

6 8

и

 

 

 

 

 

 

 

 

 

 

5

 

 

 

 

 

 

 

 

 

 

 

 

л

 

 

 

 

 

 

 

 

 

В памяти компьютера такой массив располагается последовательно по

строкам (рис. 6.2).

 

 

 

 

 

 

 

 

 

 

 

б

 

 

 

 

 

 

 

 

 

 

и

 

 

 

 

 

 

 

 

 

 

 

Б

 

 

 

 

 

 

 

Рис. 6.2

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

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

38

x = s[0][2];

s[1][2] = m[3][2] + s[0][1];

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

Пример 6.5. Ввод и вывод двумерного массива целых чисел.

 

//

Ввод двумерного массива

 

 

 

 

cout << "Vvedite razmer n m" << endl;

 

 

 

 

cin >> n >> m;

 

 

 

 

 

 

 

Р

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

 

 

 

 

 

 

 

 

 

 

 

 

 

И

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

 

 

 

 

 

У

 

{

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

cout << "Vvedite s[" << i << "][" << j << "]: " ;

 

 

 

cin >> s[i][j];

 

 

 

 

 

Б

 

 

 

}

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Г

 

 

 

//

Вывод двумерного массива

 

 

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

 

 

 

а

 

 

 

{

 

 

 

 

 

к

 

 

 

 

 

 

 

 

е

 

 

 

 

 

}

 

 

 

 

 

 

 

 

 

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

 

 

 

 

 

 

 

 

cout << setw (9) << s[i][j] << " ";

 

 

 

 

 

cout << endl;

 

т

 

 

 

 

 

 

 

 

 

о

 

 

 

 

 

 

 

Пример 6.6. Выв д двумерного массива из действительных чисел.

 

 

и

 

 

 

 

 

 

 

 

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

 

 

 

 

 

 

 

 

{

л

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

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

 

 

 

 

 

 

 

 

 

cout << setiosflags (ios :: fixed) <<

 

 

 

 

и

 

 

 

 

 

 

 

 

 

 

Б

setw(10) << setprecision(3)<< s[i][j] << " ";

 

 

 

coutб<< endl;

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

}

Пример 6.7. Заполнение двумерного массива случайными действительными числами из диапазона nmin…nmax.

Для генерации случайных чисел используют функции библиотеки stdlib.lib:

rand() – генерирует псевдослучайное число из диапазона 0…RAND_MAX

(32767).

39

srand() – устанавливает аргумент для создания новой последовательности псевдослучайных целых чисел, возвращаемых функцией rand().

srand( time( NULL ) ); for (i=0; i<n; i++) for (j=0; j<m; j++)

s[i][j] = static_cast <double> (rand()) /

(RAND_MAX + 1) * (nmax - nmin) + nmin;

 

 

 

 

 

 

 

 

 

 

 

 

 

Р

Пример 6.8. Нахождение суммы элементов, лежащих на побочной диаго-

нали.

 

 

 

 

 

 

 

 

 

 

 

И

s = 0;

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

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

s += a[i][n-i-1];

 

У

 

 

{

 

 

 

 

 

 

 

 

 

 

Пример 6.9.

Перестановка строк с номерами k1 и k2.

 

 

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

 

 

 

 

Г

 

 

 

 

 

 

 

 

 

 

 

t = a[k1][j];

 

 

 

 

 

а

 

 

 

 

a[k1][j] = a[k2][j];

 

 

 

 

 

 

 

 

 

 

 

Б

 

 

 

 

a[k2][j] = t;

 

 

 

 

 

к

 

 

 

 

}

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Пример 6.10. Нахождение суммы элементов, лежащих выше главной

диагонали.

 

 

 

 

т

 

 

 

 

 

 

s = 0;

 

 

о

е

 

 

 

 

 

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

 

 

 

 

 

 

 

 

 

 

и

 

 

 

 

 

 

 

 

 

for (j=i+1;

j<m;

j++)

 

 

 

 

 

 

 

 

s += a[i][j];

 

 

 

 

 

 

 

 

 

 

 

 

л

 

 

 

 

 

 

 

 

 

 

 

б

 

Упорядочение столбцов матрицы по неубыванию их мак-

Пример 6.11.

симальных э ементов.

 

 

 

 

 

 

 

 

 

 

Б

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

 

 

 

 

 

 

 

 

{

 

 

 

 

 

 

 

 

 

 

 

 

иb[i] = a[i][0];

 

 

 

 

 

 

 

 

 

 

 

for (j=1; j<m; j++)

if (a[i][j] > b[i]) b[i] = a[i][j];

}

for (i=0; i<n-1; i++) for (j=i+1; j<m; j++)

40

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

{

t = b[i]; b[i] = b[j]; b[j] = t;

for (k=0; k<m; k++)

{

 

t = a[i][k];

Р

a[i][k] = a[j][k];

a[j][k] = t;

}

}

И

 

Пример 6.12. Получение из матрицы n-го порядка матрицы порядка n–1

путем удаления из исходной матрицы строк и столбцов, на пересечении кото-

рых расположен элемент с наименьшим значением

 

У

Г

imin=jmin=0;

 

 

 

 

 

 

 

Б

 

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

 

 

 

 

 

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

 

 

 

 

 

 

 

 

 

 

 

 

if (a[i][j] < a[imin][jmin]) {imin = i; jmin = j;}

 

 

 

 

 

 

 

а

 

 

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

 

к

 

 

 

е

 

 

 

 

 

 

 

 

 

 

 

 

 

for (j=jmin; j<m-1; j++) a[i][j] = a[i][j+1];

 

 

 

m--;

 

т

 

 

 

 

 

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

 

 

 

 

 

 

for (i=imin; i<nо-1; i++) a[i][j] = a[i+1][j];

 

 

 

n--;

 

и

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

л

 

 

 

 

 

 

 

б

 

 

 

 

 

 

 

и

 

 

 

 

 

 

 

 

Б

 

 

 

 

 

 

 

 

 

41