Мои Конспекты
Главная | Обратная связь


Автомобили
Астрономия
Биология
География
Дом и сад
Другие языки
Другое
Информатика
История
Культура
Литература
Логика
Математика
Медицина
Металлургия
Механика
Образование
Охрана труда
Педагогика
Политика
Право
Психология
Религия
Риторика
Социология
Спорт
Строительство
Технология
Туризм
Физика
Философия
Финансы
Химия
Черчение
Экология
Экономика
Электроника

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



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

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

int mas[100]; // одномерный массив mas из 100 элементов

float data[10][50];//двумерный массив data из 500 элементов

Доступ к отдельному элементу массива осуществляется указанием имени этого массива и индекса (номера) необходимого элемента, заключенного в квадратные скобки. Например:

mas[10] = 59; // десятому элементу массива mas присваивается значение 59

mas[1] = mas[0] + 1; //первый элемент массива mas на 1 больше нулевого

data[0][5] = 3.14;//пятому элементу массива data присваивается значение3.14

Инициализация массивов возможна при их определении:

double d[] = {1, 2, 3, 4, 5};

В данном случае длина массива вычисляется компилятором по количеству значений, перечисленных в фигурных скобках.

Для организации динамических массивов в стиле С используются указатели и функции выделения памяти malloc(), calloc(), free() и др., а в стиле С++ для создания динамических переменных используют операцию new, определенную следующим образом:

указатель = new имя_типа[инициализатор];

где инициализатор – выражение в круглых скобках.

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

int*x=new int(5);

Для удаления динамических переменных используется операция delete, определенная в С++:

delete указатель;

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

delete x;.

Примеры:

1)int b=new int[100];//выделили в динамической памяти место под массив из 100 элементов.

2)int **matr=new int* [n];//объявляем массив указателей на строки

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

matr[i]=new int [m];//выделяем память под элементы матрицы

Указатель – это переменная, значением которой является адрес другой переменной. Объявляется указатель следующим образом:

тип *идентификатор;

инициализируется с помощью операции получения адреса &.

int x, *ptr = & x; //переменная ptr является указателем на целое и инициализируется адресом переменной x

Необходимо знать, что имя массива – это константа-указатель на начало массива (на нулевой элемент). Всякий раз, когда в выражении появляется идентификатор типа массива, он преобразуется в указатель на нулевой член массива. По определению операция индексирования [] интерпретируется таким образом, что E1[E2] идентично *((E1)+(E2)). В силу правил преобразования, применяемых к +, если E1 массив и E2 целое, то E1[E2] относится к E2-ому члену E1.

Это правило аналогичным образом применяется в случае многомерного массива. Если E является n-мерным массивом ранга i*j*...*k, то возникающее в выражении E преобразуется в указатель на (n-1)-мерный массив ранга j*...*k. Рассмотрим, например,

int x[3][5];

Здесь x - массив целых размером 3*5. Когда x возникает в выражении, он преобразуется в указатель на (первый из трех) массив из 5 целых чисел. В выражении x[i], которое эквивалентно *(x+1), x сначала преобразуется, как описано, в указатель, затем 1 преобразуется к типу x, что включает в себя умножение 1 на длину объекта, на который указывает указатель, а именно объект из 5 целых. Результаты складываются, и используется косвенная адресация для получения массива (из 5 целых), который в свою очередь преобразуется в указатель на первое из целых.

Определение динамического массива из 25 целых чисел:

int *p; int n=25; p=(int *)malloc(n);

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

* p;

Обращение к i - элементу массива:

* (p + i);

Обращение к ( i , j ) - элементу двумерного массива:

p[i][j] = = *(p[i]+j) = = *(*(p+i)+j).

Пример:

int *u=(int*)malloc(sizeof(int)); // в функцию передается количество требуемой памяти в байтах, т. к. функция malloc возвращает значение типа void*, то его необходимо преобразовать к типу указателя (int*).

free(u); //освобождение выделенной памяти.

Варианты заданий на расчетно-графическую работу №1

Варианты заданий на расчетно-графическую работу №1 представлены в таблице 1.

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

 

Таблица 1 – Варианты заданий для РГР №1

№ п.п. Задание
1. Дана целочисленная прямоугольная матрица размерности n на m. Определить количество строк, не содержащих ни одного нулевого элемента и минимальное из чисел, встречающихся в заданной матрице более одного раза.
2. Дана целочисленная прямоугольная матрица размерности n на m. Определить количество столбцов, содержащих хотя бы один нулевой элемент, и номер строки, в которой находится самое большое количество одинаковых элементов.
3. Дана целочисленная квадратная матрица. Определить произведение элементов в тех строках, которые не содержат отрицательных элементов и сумму всех диагоналей.
4. Уплотнить заданную матрицу, удалив из неё строки и столбцы, заполненные нулями. Найти строки, содержащие хотя бы один отрицательный элемент.
5. Осуществить циклический сдвиг элементов квадратной матрицы размерности mxm на k элементов вниз. k может быть больше m.
6. Дана целочисленная прямоугольная матрица размерности n на m. Упорядочить её строки по возрастанию количества одинаковых элементов в каждой строке, а также найти номер первого из столбцов, не содержащих ни одного отрицательного элемента.

Продолжение табл. 1

7. Для заданной матрицы mхm найти такие k, что k-я строка поэлементно совпадает с k-м столбцом. Найти сумму элементов главной и побочной диагоналей, если среди их элементов встречается хотя бы один отрицательный элемент.
8. Осуществить циклический сдвиг элементов квадратной матрицы размерности mxm на k элементов вправо. k может быть больше m.
9. Дана целочисленная квадратная матрица размерности nxn. Найти максимум среди сумм элементов диагоналей, параллельных главной диагонали матрицы и последний отрицательный элемент матрицы.
10. Дана целочисленная прямоугольная матрица размерности n на m. Определить количество отрицательных элементов только в тех строках, которые содержат хотя бы один нулевой элемент.
11. Дана целочисленная прямоугольная матрица размерности n на m. Определить количество столбцов, содержащих нулевые элементы и максимальное из чисел, встречающихся в заданной матрице более одного раза.
12. Дана целочисленная прямоугольная матрица размерности n на m. Определить количество столбцов, содержащих хотя бы один нулевой элемент, и номер столбца, в котором находится самое большое количество положительных элементов.
13. Дана целочисленная квадратная матрица. Определить суммы всех диагоналей и количество элементов, значения которых находятся в диапазоне от трех до семи.
14. Уплотнить заданную матрицу, удалив из неё строки с отрицательными элементами. Найти столбцы, содержащие хотя бы один нулевой элемент.
15. Дана целочисленная прямоугольная матрица размерности n на m. Упорядочить её столбцы по убыванию количества одинаковых элементов в каждом столбце, а также найти номер первого из столбцов, не содержащих ни одного отрицательного элемента.
16. Дана целочисленная прямоугольная матрица размерности n на m. Найти номер первого из столбцов, содержащих отрицательные элементы, а также упорядочить столбцы по убыванию количества одинаковых элементов в каждом столбце.
17. Для заданной матрицы mхm найти такие k, что k-я строка поэлементно совпадает с k-м столбцом. Найти сумму элементов главной диагонали, если среди ее элементов встречается хотя бы один нулевой элемент.
18. Осуществить циклический сдвиг элементов квадратной матрицы размерности mxn на k элементов влево. k может быть больше m.
19. Дана целочисленная квадратная матрица размерности nxn. Найти минимум среди сумм элементов диагоналей, параллельных главной диагонали матрицы и последний нулевой элемент матрицы.
20. Дана целочисленная прямоугольная матрица размерности n на m. Определить количество ненулевых элементов только в тех столбцах, которые содержат хотя бы один отрицательный элемент.

 

Список рекомендуемой литературы

1. Подбельский, В.В. Язык Си ++: Учеб. пособие. – 5-е изд. – М.: Финансы и статистика, 2000.- 560 с.: ил.

2. Павловская, Т.А. С/С++. Программирование на языке высокого уровня. СПб.: Питер. 2006. – 246 с.

3. Павловская Т.А., Щупак, Ю.А. С/С++. Структурное программирование: Практикум. СПб.: Питер. 2006. – 195 с.

 

 

Ниже представлен пример выполнения расчетно-графической работы.





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







©2015-2020 mykonspekts.ru Все права принадлежат авторам размещенных материалов.