Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Uchebnoe_posobie_GLAVA_7m3

.pdf
Скачиваний:
14
Добавлен:
17.03.2015
Размер:
465.69 Кб
Скачать

int main(void)

{

setlocale(NULL,"Russian"); int **A,n,m; srand(time(NULL));

cout<<"введите разметноcть по строкам и столбцам\n"; cin>>n>>m;

A=new_mas(n,m); // выделение памяти под массив zap_mas(A,n,m,-10,10);

print_mas(A,n,m);

cout<<"сумма длавной диагонали = "<<sun_d_mas(A,n,m)<<endl; A=del_mas(A,n); // удаление памяти

}

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

Следует объяснить некоторые моменты не очевидные из кода программы.

Первое: заголовок функции для выделения памяти под массив имеет вид: int** new_mas(int n,int m); не имеет в параметрах указателя на начало массива. В этой функции существует локальный указатель для динамичсеского выделения памяти. Это не создает проблемы, так как динамическая память остается выделенной пока не отработает оператор delete. Если ввести указатель в параметры функции, то Microsoft Visual Studio 2008 сообщит об ошибке использования неинициализированного указателя. В этом случае необходимо в main() строку int **A,n,m; заменить на int **A=0,n,m; Внутри функции new_mas() станет ненужна локальная переменная mas, а заголовок функции примет вид:

int** new_mas(int* mas[], int n,int m);

Второе: после работы оператора delete[] сиавится оператор присваения удаленному указателю значения. 0. Дело в том, что Microsoft Visual Studio 2008 при окрнчании работы программы числит выделенную плд нее память. То есть ко всем указателям применяется оператор delete. Ситуация, когда оператор delete применяется у указателю два раза подряд приводит к ошибке выделения памяти. Поэтому присваивание указателю значения 0 исключает подобную ситуацию. Использование оператора delete необходимо, так как при работе программы из командной строки без управления Microsoft Visual

Studio 2008 очистки памяти не происходит и запуская приложение большое количество раз можно исчерпать всю свободную оператовную память.

Контрольные вопросы

1.Дайте определение массиву

2.Каким образом в памяти расположены данные массива

3.Опишите синтаксис объявления одномерного массива в языке С

4.Как происходит инициализация массива. В чем заключается особенность инициализации массивов

5.Каким образом можно определить объѐм памяти необходимой для хранения массива

6.Что такое индекс элемента массива? Как получить доступ к значению элемента массива, зная его индекс?

7.Какие виды выделения памяти под массивы вам известны. Поясните особенности выделения памяти и высвобождения памяти для каждого вида.

8.Приведите общий вид оператора выделения статической памяти под массив

9.Каким образом происходит динамическое выделение памяти под

массив, приведите примеры

10.Как представляются строки в языке ISO/ANSI C++

11.Каким образом происходит инициализация строк,

12.В чем заключается особенность инициализации строк?, приведите пример.

13.Как располагаются в памяти элементы двумерного массива?

14.Опишите синтаксис объявления двумерного массива в программе. Каким образом производится индексация элементов двумерного массива?

15.Каким образом можно инициализировать многомерный массив.

16.Как изменяются индексы элементов матрицы, лежащих:

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

-на побочной диагонали;

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

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

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

-ниже побочной диагонали?

17.Напишите фрагменты программ для решения следующих задач:

-подсчет нулевых элементов в заданном одномерном массиве;

-вычисление суммы положительных элементов в заданном одномерном массиве;

-поиск первого максимального элемента и его индекса в заданном одномерном массиве;

-поиск последнего минимального элемента и его индекса в заданном одномерном массиве;

18.Напишите фрагмент программы для решения следующей задачи:

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

-вычисление суммы положительных элементов в каждой строке двумерного массива.

-Проверка на идентичность главной и побочной диагонали (т.е. элементы главной диагонали в таком же или в обратном порядке находятся на побочной диагонали)

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]