Хелпикс

Главная

Контакты

Случайная статья





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



Перебор массивов

 

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

 

#include <iostream>

 

int main()

{

int numbers[4] = {1,2,3,4};

int size = sizeof(numbers)/sizeof(numbers[0]);

for(int i=0; i < size; i++)

cout << numbers[i] << endl;

 

return 0;

}

 

Чтобы пройтись по массиву в цикле, вначале надо найти длину массива. Для нахождения длины применяется оператор sizeof. По сути длина массива равна совокупной длине его элементов. Все элементы представляют один и тот же тип и занимают один и тот же размер в памяти. Поэтому с помощью выражения sizeof(numbers) находим длину всего массива в байтах, а с помощью выражения sizeof(numbers[0]) - длину одного элемента в байтах. Разделив два значения, можно получить количество элементов в массиве. А далее с помощью цикла for перебираем все элементы, пока счетчик i не станет равным длине массива.

 

Но также есть и еще одна форма цикла for, которая предназначена специально для работа с коллекциями, в том числе с массивами. Эта форма имеет следующее формальное определение:

 

for(тип переменная : коллекция)

{

инструкции;

}

 

Используем эту форму для перебора массива:

 

#include <iostream>

 

int main()

{

int numbers[4] = {1,2,3,4};

for(int number : numbers)

cout << number << endl;

 

return 0;

}

 

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

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

 

Кроме одномерных массивов в C++ есть многомерные. Элементы таких массивов сами в свою очередь являются массивами, в которых также элементы могут быть массивами. Например, определим двухмерный массив чисел:

 

int numbers[3][2];

 

Такой массив состоит из трех элементов, при этом каждый элемент представляет массив из двух элементов. Инициализируем подобный массив:

 

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

 

Также при инициализации можно опускать фигурные скобки:

 

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

 

Возможна также инициализация не всех элементов, а только некоторых:

 

int numbers[3][2] = { {1, 2}, {}, {7} };

 

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

 

int numbers[3][2] = { {1, 2}, {3, 4}, {5, 6} };

cout << numbers[1][0] << endl; // 3

numbers[1][0] = 12; // изменение элемента

cout << numbers[1][0] << endl; // 12

 

Переберем двухмерный массив:

 

#include <iostream>

 

int main()

{

const int rows = 3, columns = 2;

int numbers[rows][columns] = { {1, 2}, {3, 4}, {5, 6} };

for(int i=0; i < rows; i++)

{

for(int j=0; j < columns; j++)

{

std::cout << numbers[i] [j] << "\t";

}

std::cout << std::endl;

}

return 0;

}

Также для перебора элементов многомерного массива можно использовать другую форму цикла for:

 

#include <iostream>

 

int main()

{

const int rows = 3, columns = 2;

int numbers[rows][columns] = { {1, 2}, {3, 4}, {5, 6} };

 

for(auto &subnumbers : numbers)

{

for(int number : subnumbers)

{

cout << number << "\t";

}

cout << endl;

}

 

return 0;

}

 

Практическое задание

 

Задание 1

 

1. Дан одномерный массив. Найдите разность наибольшего и наименьшего чисел в этом массиве.

2. Даны два одномерных массива А и В. Подсчитайте количество тех i, для которых:

а) А[i] < B[i];

б) A[i] = B[i];

в) A[i] > B[i].

3. Составьте программу определения количества элементов массива, больших среднего арифметического всех его элементов.

4. Дан одномерный массив. Подсчитайте, сколько раз встречается в этой таблице максимальное по величине число.

5. Дан одномерный целочисленный массив. Составьте программу определения значения наибольшего элемента этого массива.

6. Дан одномерный целочисленный массив. Составьте программу определения индекса(-ов) минимального элемента массива.

7. Составьте программу, проверяющую упорядочены ли элементы одномерного массива по возрастанию.

8. Дан одномерный массив чисел. Определите сумму его элементов.

9. Дан одномерный массив чисел. Измените знаки всех его элементов на противоположные.

10. Дан одномерный массив чисел. Подсчитайте, сколько раз в нем встречается число 1.

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

12. В массиве А (m,n) найдите количество всех чисел, по модулю меньших заданного Т.

13. Скопируйте отрицательные и положительные кратные заданному числу элементы массива А в массив В в обратном порядке.

14. Из двух упорядоченных одномерных массивов (длины K и N) сформируйте одномерный массив размером K+N, упорядоченный так же, как исходные массивы.

15. Из двух упорядоченных одномерных массивов (длины K и N) сформируйте одномерный массив размером K+N, упорядоченный в обратную сторону.

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

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

 

Задание 2:

1. Сформировать массив:

Y[1]=A[1]+A[n]

Y[2]= A[2]+A[n-1]

Y[3]= A[3]+A[n-2]

и т.д. (n - четное)

2. Даны два одномерных массива А и В. Подсчитайте количество тех i, для которых:

а) А[i] < B[i]

б) A[i] = B[i];

в) A[i] > B[i]

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

4. Определить величину максимальной разности между соответствующими элементами двух массивов и записать на то же место в третий массив той же размерности.

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

6. В целочисленном массиве A[1:n] найдите число, повторяющееся максимальное количество раз. Если таких чисел несколько, то одно из них.

7. Измените знак всех нечетных элементов массива, состоящего из L чисел (предусмотреть случай наличия нецелых элементов).

8. Измените знак всех четных элементов массива, состоящего из L чисел (предусмотреть случай наличия нецелых элементов).

9. Задан одномерный массив A(N), состоящий только из нулей и единиц. Проверьте, строго ли они чередуются.

10. Дан целочисленный массив А. Найти длину самой длинной последовательности подряд идущих элементов массива, равных нулю.

11. В массиве X(N) каждый элемент равен 0, 1 или 2. Переставить элементы массива так, чтобы сначала располагались все единицы, затем все двойки и, наконец, все нули (дополнительного массива не заводить).

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

13. Из текста выбрать числа и записать в массив N. Количество чисел не больше 10.

14. Из шестизначного числа выделить цифры и из них сформировать одномерный массив.

15. Задан целочисленный массив. Подсчитать число различных значений в массиве.

16. Среди N точек на плоскости (х1,у1), (х2,у2)...(хn,yn). Определить точку наиболее удаленную от начала координат.

17. Дан одномерный массив чисел. Определите сумму его элементов.

18. Дан одномерный массив чисел. Определите сумму элементов, больших данного числа А (А вводить с клавиатуры).

19. Дан одномерный массив чисел. Определите сумму элементов, принадлежащих промежутку от А до В (А и В водить с клавиатуры).

20. Задан массив размером N. Вычислить среднее значение элементов массива.

 

Задание 3:

21. Вычислить и запомнить сумму и число положительных элементов каждого столбца матрицы. Результаты отпечатать в виде двух строк.

1. Вычислить и запомнить сумму и число отрицательных элементов каждой строки матрицы. Результаты отпечатать в виде двух столбцов.

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

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

4. Записать на место отрицательных элементов матрицы нули, а на место положительных элементов матрицы — единицы.

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

6. Найти наибольший и наименьший элементы матрицы и поменять их местами

7. Найти строку с наибольшей и наименьшей суммой элементов. Вывести на печать найденные строки и суммы их элементов.

8. Найти столбец с наибольшей и наименьшей суммой элементов. Вывести на печать найденные столбцы и суммы их элементов.

9. Каждый элемент строки разделить на предварительно рассчитанную сумму элементов этой строки.

10. Найти максимальный элемент на главной диагонали матрицы.

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

12. Найти минимальный по модулю элемент матрицы и вычислить сумму строки, в которой он находится.

13. Дана действительная матрица размера n * 9. Найти среднее арифметическое:

а) элементов каждого столбца;

б) элементов каждой строки, имеющей четный номер.

14. Задан двумерный массив В[10, 10], заполненный случайными числами из (-10,10). Найти и вывести на экран те элементы массива, которые больше заданного числа k.

15. Дана вещественная матрица размерности m * n. Упорядочить элементы каждой четной строки по возрастанию.

16. Дана вещественная матрица размерности m * n. Расположить все элементы матрицы по убыванию.

17. Дана вещественная матрица размерности m * n. Определить индексы первого нулевого элемента матрицы.

 

Задание 4:

1. Найти сумму всех четных элементов двумерного массива.

2. Найти сумму всех элементов двумерного массива, расположенных на главной диагонали.

3. Найти номер строки и столбца максимального элемента.

4. Имеется двумерный массив целых чисел. Найти номер строки, для которой среднеарифметическое значение ее элементов максимально.

5. В двумерном массиве целых чисел поменять местами строки и столбцы с одинаковыми номерами.

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

7. Удалить столбец двумерного массива целых чисел, в котором находится максимальный элемент этого массива.

8. Найти все неповторяющиеся элементы двумерного массива целых чисел.

9. В двумерном массиве целых чисел заменить все элементы, меньшие суммы элементов первой строки на эту сумму.

10. Отсортировать строки массива целых чисел по убыванию.

11. Отсортировать нечетные столбцы массива по возрастанию.

12. Выяснить сколько положительных элементов содержит матрица размерности n * m, если aij = sin(i+j/2).

13. Дана квадратная вещественная матрица размерности n. Является ли матрица симметричной относительно главной диагонали.

14. Дана квадратная вещественная матрица размерности n. Сравнить сумму элементов матрицы на главной и побочной диагоналях.

15. Дана квадратная вещественная матрица размерности n. Найти количество нулевых элементов, стоящих:

- выше главной диагонали;

- ниже главной диагонали;

- выше и ниже побочной.

16. Сформировать матрицу по следующему правилу

а). б). в).

17. Дана вещественная матрица размерности n * m. Сформировать вектор b, в котором элементы вычисляются как:

- произведение элементов соответствующих строк;

- среднее арифметическое соответствующих столбцов;

- разность наибольших и наименьших элементов соответствующих строк;

- значения первых отрицательных элементов в столбце.

18. Дана вещественная матрица размерности n * m. Вывести номера столбцов, содержащих только отрицательные элементы.

19. Дана вещественная матрица размерности n * m. Вывести номера строк, содержащих больше положительных элементов, чем отрицательных.

20. Дана вещественная матрица размерности n * m. Найти общую сумму элементов только тех столбцов, которые имеют хотя бы один нулевой элемент.

21. Дана вещественная матрица размерности n * m. Поменять местами строки с максимальным и минимальным элементами.

22. Дана вещественная матрица размерности n * m. Удалить k столбец матрицы.

23. Дана вещественная квадратная матрица размерности n. Поменять местами элементы главной и побочной диагоналей матрицы:

- по строкам;

- по столбцам.

 



  

© helpiks.su При использовании или копировании материалов прямая ссылка на сайт обязательна.