- •В.В. Чуркин лабораторные работы по программированию
- •Содержание
- •Введение
- •Основное окно иср
- •Лабораторная работа 1
- •Задания
- •Проектирование приложения. Выбор, размещение и задание свойств компонентов. Коды обработчиков событий и функций
- •Тестирование и использование приложения
- •Контрольные вопросы
- •Задания
- •Лабораторная работа 2
- •Тестирование и использование приложения
- •Контрольные вопросы
- •Задания
- •Лабораторная работа 3
- •Задание
- •Проектирование приложения. Выбор, размещение и задание свойств компонентов. Коды классов, функций и обработчиков событий
- •Тестирование и использование приложения
- •Заголовочный файл
- •Файл реализации
- •Контрольные вопросы
- •Задания
- •Лабораторная работа 4
- •Введение
- •Алгоритмы шифрования и дешифрования
- •Проектирование приложения. Выбор, размещение и задание свойств компонентов. Коды классов, функций и обработчиков событий
- •Тестирование и использование приложения
- •Контрольные вопросы
- •Лабораторная работа 5
- •Введение
- •Алгоритмы
- •Проектирование приложения. Выбор, размещение и задание свойств компонентов. Коды классов, функций и обработчиков событий
- •Диспетчеризация действий на основе компонента ActionList
- •Тестирование и использование приложения
- •Контрольные вопросы
- •Лабораторная работа 6
- •Введение
- •Проектирование приложения. Выбор, размещение и задание свойств компонентов. Коды классов, функций и обработчиков событий
- •Тестирование и использование приложения
- •Контрольные вопросы
- •Задания (стеки, очереди)
- •Лабораторная работа 7
- •Введение
- •Проектирование приложения. Выбор, размещение и задание свойств компонентов. Коды классов, функций и обработчиков событий
- •Диспетчеризация действий на основе компонентов ActionManager, ActionMainMenuBar, ActionToolBar
- •Тестирование и использование приложения
- •Контрольные вопросы
- •Задания
- •Лабораторная работа 8
- •Введение
- •Проектирование приложения. Выбор, размещение и задание свойств компонентов. Коды классов, функций и обработчиков событий
- •Тестирование и использование приложения
- •Контрольные вопросы
- •Задания
- •Лабораторная работа 9
- •Введение
- •Проектирование приложения. Выбор, размещение и задание свойств компонентов. Коды классов, функций и обработчиков событий
- •Тестирование и использование приложения
- •Контрольные вопросы
- •Задания
- •Библиографический список
Лабораторная работа 1
ФОРМИРОВАНИЕ И ОБРАБОТКА ДИНАМИЧЕСКИХ МАССИВОВ
ОДНОМЕРНЫЕ МАССИВЫ
Формирование динамического массива осуществляется в два этапа: на первом – выделяют под массив динамическую память, на втором – инициализируют (заполняют данными) выделенную память. После обработки массива и получения результатов использованную память необходимо освобождать. Выделение и освобождение динамической памяти под массив производится по указателю при помощи операций newиdeleteсоответственно. Контроль за правильностью выполнения операции выделения динамической памяти осуществляется с помощью макросаassert, определенного в файле <assert.h>. Например,
int n, *iptr; // n – размер массива
------------ инициализация n-------------
iptr = new int[n];
assert(iptr!=0);
// инициализация элементов массива случайными числами
// в диапазоне значений от -9 до 9
for(int i=0: i<n; i++)
iptr[i]= (rand()-16383)%10; }
--------- обработка динамического массива --------
delete[]iptr;
iptr=0;
Операция new выделяет непрерывный участок динамической памяти под массив длинойn, для целых чисел, и возвращает адрес этого участка, т.е. адрес элемента массива с индексом 0 –iptr[0]. Если память не выделена, то значение указателяiptrокажется равным нулю, а значение выражения iptr!=0– ложным (нулевым). Тогда макросassertпрерывает выполнение программы. При завершении работы выводится сообщение об ошибке вида:Assertion failed: expression, file <имя файла>, line <номер строки>. После того, как отладка программы будет закончена и макросыassertбудут больше не нужны, в начале программы достаточно добавить строку#define NDEBUGвместо того, чтобы удалять в программе каждый макросassertвручную. Операцияdeleteобъявляет участок памяти под массивом свободным. После применения операцииdelete указатель рекомендуется обнулять, с целью защиты программного продукта.
ДВУМЕРНЫЕ МАССИВЫ (МАТРИЦЫ)
Выделение и освобождение динамической памяти для размещения двумерного массива (матрицы) выполняется, например, следующим образом.
int n, m, **iptr; // n – число строк, m – число столбцов матрицы
------------ инициализация n, m -------------
// выделение памяти под массив указателей на строки
iptr=new int*[n];
assert(iptr!=0);
for(int i=0; i<n; i++) {
// выделение памяти под i – ю строку
iptr[i]=new int[m];
assert(iptr[i]!=0);
for(int j=0; j<m; j++)
// инициализация строк матрицы случайными
// числами в диапазоне значений от -99 до 99
iptr[i][j] = (rand()-16383)%100;}
------------- обработка динамической матрицы ------------
for(int i=0: i<n; i++)
// освобождение памяти под i – й строкой
delete[]iptr[i];
// освобождение памяти под массивом указателей на строки
delete[]iptr;
iptr=0;
Возможен и другой вариант, когда память выделяется под столбцы. В этом случае приведенный выше фрагмент программы будет выглядеть следующим образом.
int n, m, **iptr; // n – число строк, m – число столбцов матрицы
------------ инициализация n, m -------------
// выделение памяти под массив указателей на столбцы
iptr=new int*[m];
assert(iptr!=0);
for(int j=0; j< m; j++) {
// выделение памяти под j – й столбец
iptr[j]=new int[n]
assert(iptr[j]!=0);
for(int i=0: i<n; i++)
// инициализация столбцов матрицы случайными
// числами в диапазоне значений от -99 до 99
iptr[j][i]= (rand()-16383)%100; }
------------- обработка динамической матрицы ------------
for(int j=0; j<m; j++)
// освобождение памяти под j– м столбцом
delete[]iptr[j];
// освобождение памяти под массивом указателей на столбцы
delete[]iptr;
iptr=0;