- •«Московский государственный технический университет гражданской авиации»
- •Лабораторная работа №5 Разработка программ с использованием функций для обработки массивов арифметических и символьных данных.
- •Цель лабораторной работы
- •1.2. Теоретические сведения Создание динамических массивов
- •Массивы указателей
- •Создание двумерного динамического массива с помощью динамического массива указателей.
- •Определение динамического двумерного массива
- •Указатель на массив. Многомерные массивы динамической памяти.
- •Определение типа массива
- •Определение типа указателя на массив
- •Основные виды обработки массивов.
- •1.3 Задание на выполнение лабораторной работы
- •1.4 Порядок выполнения работы
- •1.5. Пример выполнения лабораторной работы
- •Схемы алгоритмов функций
- •Текст программы
- •1.6. Контрольные вопросы
- •1.7. Варианты заданий лабораторной работы
- •2. Лабораторная работа № 6 Разработка функций рекурсивных и без рекурсии, использующих параметр – функцию и оператор return.
- •2.1 Цель лабораторной работы
- •2.2. Теоретические сведения Рекурсивные функции
- •Указатели на функции
- •Массивы указателей на функции
- •Определение типа указателя на функцию
- •Указатель на функцию - параметр функции
- •2.3 Задание на выполнение лабораторной работы
- •2.4 Порядок выполнения работы
- •2.5 Пример выполнения лабораторной работы
- •Текст программы
- •2.6 Контрольные вопросы
- •2.7. Варианты заданий лабораторной работы
- •3 Лабораторная работа № 7
- •3.1 Цель лабораторной работы
- •3.2 Теоретические сведения Структура как совокупность данных
- •3.3 Задание на выполнение лабораторной работы
- •3.4 Порядок выполнения работы
- •3.5 Пример выполнения лабораторной работы
- •Текст программы
- •3.6 Контрольные вопросы
- •3.7 Варианты заданий лабораторной работы
- •4. Лабораторная работа № 8 Классы и объекты. Создание и разрушение объектов пользовательского класса, статических и динамических.
- •4.1 Цель лабораторной работы
- •4.2. Теоретические сведения Объектно-ориентированный подход к программированию.
- •Понятие класса
- •Объявление функции вне и внутри тела класса
- •Конструктор
- •Массивы объектов статических и динамических
- •Деструктор
- •Указатели на компоненты-функции
- •4.3 Задание на выполнение лабораторной работы
- •4.4 Порядок выполнения работы
- •Методические указания
- •4.5 Контрольные вопросы
- •4.6 Варианты задания
- •5 Список литературы
- •Содержание
- •1. Лабораторная работа № 5
- •1.1. Цель лабораторной работы 3
- •1.2. Теоретические сведения 3
- •4.1. Цель лабораторной работы 38
- •4.2. Теоретические сведения 38
2.6 Контрольные вопросы
1) Что может возвращать функция с помощью указателя в return?
2) Как можно возвратить из функции с помощью оператора return одномерный или двумерный динамический массив?
3) Что такое рекурсивная функция, какова ее структура?
4) Указатели на функции (определение указателя, массива указателей, определение типа указателя на функцию).
5) Как указатели на функции используются как параметры функций?
6) Что такое рекуррентная формула?
2.7. Варианты заданий лабораторной работы
,
при
;
=
,
при
;
берется
со знаком «+» при
и со знаком «-» при
;
=
,
;
=
,
при
;
= , при ;
,
при
;
,
;
,
;
,
;
,
;
,
при
;
,
при
;
,
при
;, при ;
,
при
при
;
,
при
;
,
;
при
;
при
;
,
при
;
,
при
;
,
при
;
,
при
;
,
при
;
,
при
;
3 Лабораторная работа № 7
Разработка программ с использованием структурированных данных.
3.1 Цель лабораторной работы
Целью лабораторной работы является освоение:
- правил объявления и работы с переменными структурных типов - структур, массивов структур, указателей на структуры;
- правил обращения к элементам структур и элементам массива структур;
- ввода и вывода значений элементов массива структур;
методов форматирования вывода данных в текстовой файл;
алгоритма поиска данных в массиве структурных данных.
3.2 Теоретические сведения Структура как совокупность данных
Структура — это объединенное в единое целое множество поименованных элементов (компонентов, членов, полей) в общем случае разных типов.
Массивы также объединяют одним именем множество элементов, но все элементы должны быть одного типа.
Элементы структуры могут быть разных типов и все они должны иметь различные имена. Перед определением структуры надо дать описание ее структурный тип, который и задает внутреннее строение структуры.
Введем простейший формат описания структурного типа:
struct <имя типа> {список компонентов структуры через ‘;’};
Пример определение структурного типа для определения структур, содержащих данные о студенте:
- ФИО студента (сhar fio [] ;);
- номер зачетки (unsigned int);
- отметки сессии (unsigned int mark [ ]);
- средний балл по результатам сессии (float).
struct student {
char fio [40];
unsigned int nz;
unsigned int mark [3];
float ball;
};
После определения типа можно определять конкретные структуры этого типа, массивы структур, указатели на структуру:
student st, stm [30], * pst;
Для обращения к элементу структуры чаще всего используется уточненное имя:
<имя структуры>.<имя элемента структуры>
Символьные данные можно представлять двумя способами.
Первый способ - в виде символьного массива:
сhar fio [40];
В этом случае имени массива нельзя присваивать строку, так как имя массива – указатель константа и присвоить ему новый адрес строковой константы нельзя. То есть,
st.fio = "Петров"; – не допустимо!
Чтобы поместить в это поле строку с фамилией надо воспользоваться функцией копирования:
strcpy (st.fio, "Петров");
Функция char* strcpy (char*s1, char* s2), описанная в модуле string.h, копирует символы строки s2 в строку s1 и возвращает строку s1.
Допустимо также введения значения компонента с клавиатуры, так как память под массив fio выделена:
cin>> st.fio; - допустимо.
Второй способ – символьные данные, например, фамилию в структуре можно было представлять, используя указатель:
char* FIO;
и тогда была бы допустима операция присваивания указателю адреса строки:
st.FIO ="Григорьев";
При объявлении указателя в качестве компонента структуры для представления массива символов (например, – фамилии студента) выделяется память только на указатель, а на элементы массива память не выделяется.
Если в данном случае надо ввести значение строки, например, с клавиатуры или из файла, следует выделить участок памяти динамически и присвоить указателю FIO адрес участка. Затем произвести ввод строки:
st.FIO=new char [40];
cin>> st.FIO;
При определении структуры можно провести её инициализацию – задание начальных значений её элементов, например, так:
student one =
{"Петров", 4123, {4, 3, 2}, (one.mark [0] +one.mark [1] +one.mark [2])/3.0};
Так как структурный тип обладает всеми правами типов, можно определять указатели на структуры:
<имя структурного типа> * <имя указателя на структуру> =
<инициирующее выражение>
Например,
student * ptr = &one; //указатель на структуру инициирован
// адресом структуры one
После того как указатель получил в качестве значения адрес структуры появляются возможности обращаться к элементам структуры, используя указатель:
1) имя указателя -> имя элемента структуры
cout<<ptr ->fio;
2) разыменование указателя и формирование уточненного имени:
(*имя указателя). имя элемента структуры
cout<< (*ptr ).fio ;
Выделение памяти под структуру или массив структур можно осуществлять динамически, во время исполнения программы.
Для выделения памяти используется операцию new. Для освобождения – операция delete. Выделение и освобождение памяти на структуру, массив структур:
student * ptr = new (student); …
delete ptr;
ptr = new student [10]; …
delete [] ptr;
