Обращение к элементам двумерного динамического массива 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Обращение к элементам двумерного динамического массива



Адресация элементов динамического массива осуществляется с помощью индексированного имени.

Синтаксис:

ИмяМассива[ВыражениеТипаКонстанты][ВыражениеТипаКонстанты];

или

ИмяМассива[ЗначениеИндекса][ЗначениеИндекса];

Например:

mas [5][7] – индекс задается как константа,

sl [i][j] – индекс задается как переменная,

array[4*p][p+5] – индекс задается как выражение.

Пример 3. Сформируйте и выведите на экран единичную матрицу с целыми элементами, вводя ее порядок с клавиатуры.

#include "stdafx.h"#include <iostream>using namespace std; int _tmain(int argc, _TCHAR* argv[]){ int n,i,j; int **matr;//указатель для массива указателей cout << "Input matrix order:"; cin >> n; matr = new int *[n]; //выделение памяти под массив указателей for(i=0; i<n; i++){ matr[i] = new int[n]; //выделение памяти для массива значений for (j=0; j<n; j++) //заполнение матрицы matr[i][j] = (i==j? 1: 0); } cout << "Result: "; for(i=0; i<n; i++){ cout << "\n"; for (j=0; j<n; j++) cout << " " << matr[i][j]; delete matr[i]; //освобождение памяти из-под массива значений } delete [] matr;   //освобождение памяти из-под массива указателей system("pause"); return 0;}

Пример 4. Вычислить сумму элементов, лежащих на диагоналях матрицы N x N (обратить внимание на четность -нечетность числа N). Размер массива должен задаваться пользователем с клавиатуры.

#include "stdafx.h"#include <iostream>using namespace std;#include <time.h>void gen (int nn,int a, int b,int ***mas); //объявление функции генерации массиваint summa(int nn, int **mas);/*объявление функции вычисления суммы заданных элементов массива*/void out (int nn,int **mas);//объявление функции вывода массива int _tmain(int argc, _TCHAR* argv[]){ int **mass, n; int s; printf("Введите n: "); scanf("%d",&n); printf("\nГенерация массива \n"); gen(n,0,10,&mass); s=summa(n,mass); out(n,mass); printf("\nСумма элементов = %d",s); system("pause"); return 0;} void gen(int nn, int a, int b, int ***mas){   //функция генерации массива   int i,j; srand(time(NULL)*1000); *mas=(int**)malloc(nn*sizeof(int*));   for (i=0;i<nn;i++){ (*mas)[i]=(int*)malloc(nn*sizeof(int));     for (j=0;j<nn;j++) (*mas)[i][j]=rand()%(b-a)+a; }} int summa(int nn, int **mas) { //функция вычисления суммы элементов диагоналей int i,j, sum=0; for (i=0;i<nn;i++) for (j=0;j<nn;j++) { if ((i==j) || (i==nn-j-1)) {         //нахождение элементов диагоналей   sum+=mas[i][j];         //суммирование элементов диагоналей } } return sum;} void out (int nn,int **mas){   //функция вывода массива int i,j; for (i=0;i<nn;i++) { for (j=0;j<nn;j++)       printf("%4d",mas[i][j]); printf("\n");     free (mas[i]); } free (mas);}

В языке С++ предусмотрено использование указателя вида *** mass. В данном примере в функцию генерации массива передается не адрес указателя, а его значение. Передача фактического параметра при вызове функции осуществляется через определение адреса указателя ** mass.

Задания для выполнения

  1. Задан массив. Определить сколько раз меняется знак в данной последовательности чисел, запомнить номера позиций, в которых меняется знак.
  2. Задана последовательность из N вещественных чисел. Вычислить сумму чисел, порядковые номера которых являются числами Фибоначчи.
  3. Напишите программу, оформив её в виде функций генерации, вывода и обработки массивов. Сформируйте динамический одномерный массив, заполните его случайными числами и выведите на печать. Добавьте после каждого отрицательного элемента его модуль и выведите массив на печать. Реализуйте данную программу двумя способами: 1) с помощью операций new и delete; 2) с помощью библиотечных функций malloc (calloc) и free.
  4. В двумерном целочисленном динамическом массиве замените все четные элементы их половинами.
  5. В двумерном вещественном динамическом массиве замените все отрицательные элементы их квадратами. Реализуйте данную программу двумя способами: 1) с помощью операций new и delete; 2) с помощью библиотечных функций malloc (calloc) и free.
  6. Замените в двумерном целочисленном динамическом массиве размера 3x3 каждый элемент его алгебраическим дополнением.
  7. Индивидуальные задания.  Задача на двумерный динамический массив.

 

Вариант Задание
1. Элементы матрицы A сделать с помощью генератора случайных чисел. Сделать новую матрицу B, в которой удалить с матрицы А ряд, в котором минимальный элемент среди элементов главной диагонали.
2. Составить программу, которая заполняет квадратную матрицу порядка n натуральными числами 1, 2, 3,..., n2,записывая их в нее "по спирали" против часовой стрелки.
3. Составить программу, которая заполняет квадратную матрицу порядка n натуральными числами 1, 2, 3,..., n2, записывая их в нее "по спирали" по часовой стрелке. 9 Дан двухмерный целочисленный массив A(M,N). Составить одномерный массив B из номеров строк этого массива.
4. Написать программу, которая в матрице чисел A(N,M) находит все элементы, превышающие по абсолютной величине заданное число B. Подсчитать число таких элементов и записать их в массив C.
5. Написать программу, которая в матрице чисел A(N,M) находит все элементы, равные числу, введенному с клавиатуры. Подсчитать число таких элементов.
6. Задан двумерный массив А[5,10]. Получить новую матрицу путем деления всех элементов исходной матрицы на ее наибольший по модулю элемент.
7. Дан двумерный массив. Вставьте первую строку после строки, в которой находится первый встреченный минимальный элемент.
8. Дан целочисленный массив В[1..5, 1..5]. Вычислить произведение элементов этого массива, расположенных ниже левой диагонали.
9. Дан целочисленный массив В[1..5, 1..5]. Вычислить сумму элементов этого массива, расположенных выше левой диагонали.
10. Дана целочисленная матрица размера 5х5. Заменить в данной матрице все отрицательные элементы первой строки числом 0.
11. Дана целочисленная матрица размера 5х5. Получить новую матрицу путем деления всех элементов данной матрицы на ее наибольший по модулю элемент.  
12. Дана целочисленная прямоугольная матрица размера M·N. Отсортировать каждый столбец с четным номером по неубыванию, а каждый столбец с нечетным номером -по невозрастанию.
13. Дана целочисленная матрица размера 8х5. Определить: а) сумму всех элементов второго столбца массива; б) сумму всех элементов 3-й строки массива.
14. Дана целочисленная прямоугольная матрица размера M·N. Сформировать одномерный массив, состоящий из элементов, лежащих в интервале [1,20]. Найти среднеарифметическое полученного одномерного массива.
15. Дана целочисленная прямоугольная матрица размера M·N. Сформировать одномерный массив, состоящий из элементов, лежащих в интервале [1,10]. Найти произведение елементов полученного одномерного массива.
16. Дана целочисленная квадратная матрица. Найти в каждой строке наибольший элемент и поменять его местами с элементом главной диагонали.
17. Дана целочисленная квадратная матрица. Указать столбец (назвать его номер), где минимальное количество элементов, кратных сумме индексов.
18. Дана целочисленная квадратная матрица. Найти сумму элементов матрицы, лежащих выше главной диагонали.
19. Определить, является ли данный квадратный массив симметричным относительно своей главной диагонали.
20. Определить, является ли данный квадратный массив не симметричным относительно своей главной диагонали.
21. Даны два числа n и m. Создайте двухмерный массив int A[n][m], заполните его таблицей умножения A[i][j]=i*j и выведите на экран. При этом нельзя использовать вложенные циклы, все заполнение массива должно производиться одним циклом, например, for(i=0;i<n*m;++i).
22. Дана матрица целых чисел размера NxM. Вывести номер строки, содержащей минимальное число одинаковых элементов.
23. Дана целочисленная квадратная матрица. Найти произведение элементов матрицы, лежащих ниже главной диагонали.
24. Дана матрица целых чисел размера NxM. Вывести номер строки, содержащей максимальное число одинаковых элементов.
25. Дан массив A(n,m). Удалить строки массива, не имеющие ни одного повторяющегося элемента.
26. Написать программу, которая в матрице чисел A(N,M) находит все элементы, не превышающие по абсолютной величине заданное число B. Подсчитать число таких элементов и записать их в массив C.
27. Дана целочисленная прямоугольная матрица размера M·N. Сформировать одномерный массив, состоящий из элементов, лежащих в интервале [1,20]. Найти сумму элементов полученного одномерного массива.

 



Поделиться:


Последнее изменение этой страницы: 2021-07-18; просмотров: 354; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.134.104.173 (0.004 с.)