- •1 Директиви препроцесора. Багатомодульне програмування
- •1.1 Мета роботи
- •1.2 Вказівки щодо організації самостійної роботи студентів
- •1.7 Контрольний приклад
- •2.1 Мета роботи
- •2.2 Вказівки щодо організації самостійної роботи студентів
- •2.3 Порядок виконання роботи
- •2.4 Контрольні запитання та завдання
- •2.5 Завдання
- •2.6 Варіанти завдань
- •2.7 Контрольний приклад
- •3 Файлові потоки мови с
- •3.1 Мета роботи
- •3.2 Вказівки щодо організації самостійної роботи студентів
- •Ввод и вывод символов
- •Ввод и вывод строк
- •Ввод и вывод записей
- •Управление указателем файла
- •Состояние потока
- •Форматированный вывод
- •Форматированный ввод
- •Другие функции форматного ввода и вывода
- •Примеры
- •3.3 Порядок виконання роботи
- •3.4 Контрольні запитання та завдання
- •3.5 Завдання
- •3.6 Варіанти завдань
- •3.7 Контрольний приклад
- •4 Перегрузка операцій
- •4.1 Мета роботи
- •4.2 Вказівки щодо організації самостійної роботи студентів
- •5.1 Мета роботи
- •5.2 Вказівки щодо організації самостійної роботи студентів Классы и объекты
- •Инкапсуляция
- •Конструктор
- •Деструктор
- •Указатели на объекты
- •Операции new и delete
- •5.3 Порядок виконання роботи
- •5.4 Контрольні запитання та завдання
- •5.5 Завдання
- •5.6 Варіанти завдань
- •5.7 Контрольний приклад
- •Уровни доступа
- •Виртуальные функции
- •Механизм работы виртуальных функций
- •Полиморфизм
- •Множественное наследование
- •6.7 Контрольний приклад
- •Рекомендована література
- •61166 Харків, просп. Леніна, 14.
МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ
ХАРКІВСЬКИЙ НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ РАДІОЕЛЕКТРОНІКИ
МЕТОДИЧНІ ВКАЗІВКИ
ДО ЛАБОРАТОРНИХ ТА ПРАКТИЧНИХ
РОБІТ З ДИСЦИПЛІНИ
"Програмування"
Харків 2007
МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ
ХАРКІВСЬКИЙ НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ РАДІОЕЛЕКТРОНІКИ
МЕТОДИЧНІ ВКАЗІВКИ
ДО ЛАБОРАТОРНИХ ТА ПРАКТИЧНИХ
РОБІТ З ДИСЦИПЛІНИ
"програмування"
для студентів денної форми навчання спеціальності
_______________________
Відповідальний за випуск Путятін Є.П.
ЗАТВЕРДЖЕНО
кафедрою інформатики.
Протокол № від
Харків 2007
Методичні вказівки до лабораторних та практичних робіт з дисципліни “Програмування” для cтудентів денної форми навчання спеціальності ___________ /Упоряд.: В.А. Любченко, О.В. Яковлева, Д.О. Руденко Харкiв: ХНУРЕ, 2007. ___ с.
Упорядники: В.А. Любченко
О.В. Яковлева
Д.О. Руденко
Рецензент С.С. Танянський, доц. каф. ЕОМ
ЗМІСТ
1 Директиви препроцесора. Багатомодульне програмування 7
2 Потокові класи мови С++ 18
3 Файлові потоки мови С 42
4 Перегрузка операцій 56
5 Основи розробки класів у мові С++ 62
6 Наслідування, поліморфізм, інкапсуляция 81
ВСТУП
В наш час персональні комп’ютери мають широке застосування в pізноманітних галузях людської діяльності. Все це неможливо без знань мов програмування і тому таку актуальність надбав лозунг “Програмування – друга грамотність”.
Головною метою даних методичних вказівок є допомога студентам в оволодінні практичними навичками у підготовці та розв’язанні задач найбільш розповсюдженою мовою програмування С++, а також придбанні початкових знань в складній сучасній системі програмування VISUAL C ++.
Цикл лабораторних робіт передбачає активну самостійну роботу студентів. Кожна робота виконується студентом особисто, згідно з варіантом завдання, номер якого повиненвідповідати порядковому номеру студента в журналі академгрупи.
Для виконання роботи необхідно: опрацювати теоретичний матеріал, дати відповіді на контрольні запитання, які надаються в цих методичних вказівках, розробити схему алгоритму, скласти програму свого варіанту завдання та розв’язати його на персональному комп’ютері (ПК), оформити звіт і захистити його.
Звіт повинен мати: номер лабораторної роботи, назву та мету роботи, завдання, схему алгоритму (в деяких випадках – короткий опис алгоритму), роздрук-лістинг тексту програми та результати її розв’язання, аналіз одержаних результатів і висновок щодо роботи.
Правила техніки безпеки забороняють студентам вмикати або вимикати ПК, розкривати будь-яке обладнання, знімати захисні щити, а також доторкатись до струмопровідних частин обладнання.
1 Директиви препроцесора. Багатомодульне програмування
1.1 Мета роботи
Отримати практичні навички застосування директив препроцесора, насамперед у створенні макросів, умовної компіляції, створенні багатомодульного проекту.
1.2 Вказівки щодо організації самостійної роботи студентів
Директивы препроцессора начинаются с символа “#” и выполняются во время 1-й фазы компиляции. Результат выполнения затем компилируется, но может быть выведен в stdout или в файл при помощи опций компилятора.
Директива #include
Эта директива предписывает препроцессору поместить на ее место содержимое другого файла. Синтаксис директивы
#include <имя_файла>
или
#include "имя_файла".
Если имя_файла не является полным именем, в первом случае поиск происходит только в пределах специфицированных каталогов включаемых файлов. Во втором случае сначала просматривается текущий каталог.
Директива #define
Директива #define определяет подстановку в тексте программы. Она используется для определения:
- символических констант:
#define имя текст__подстановки
(все вхождения имени заменяются на текст подстановки);
- макросов, которые выглядят как функции, но реализуются подстановкой их текста в текст программы:
#define имя (параметры текст_полстановки;
- символов, управляющих условной компиляцией. Они используются вместе с директивами #i fdef и #i fndef. Формат:
#define имя Примеры:
#define VERSION I
#define VASIA "Василий Иванович"
#define MAX(х,у) ((x)>(y) ? (x) : (y))
Имена рекомендуется записывать прописными буквами, чтобы зрительно отличать их от имен переменных и функций. Параметры макроса используются при макроподстановке, например, если в тексте программы используется вызов макроса y = MAX(suml,. sum2); он будет заменен на
у = ((suml)>(sum2)? (suml):(sum2));
Отсутствие круглых скобок может привести к неправильному порядку вычисления, поскольку препроцессор не оценивает вставляемый текст с точки зрения синтаксиса. Например, если к макросу #deflne sqr(x) (х*х) обратиться как sqr(y+l), в результате подстановки получится выражение (у+1*у+1).
Директивы #undef удаляет объявленную макроподстановку
Условная компиляция
Можно избирательно компилировать части файла. Синтаксис директивы условной компиляции следующий:
#if выражение_1
// эта часть файла компилируется, если выражение_1 истинно
#elif выражение_2
// эта часть файла компилируется, если выражение_1 ложно, а
// выражение_2 истинно
...
#else
// эта часть файла компилируется, когда все выражения ложны
#endif
Директивы #elif и #else могут быть опущены.
Пример. Простое исключение секции кода.
#if 0
// исключенная секция кода
#endif
Значения выражений в директивах #if и #elif должны быть целыми константами. В выражениях нельзя использовать операцию sizeof.
В качестве выражения в директивах #if и #elif можно использовать оператор defined . Он проверяет, был ли определен макрос.
Пример. Выбор между секциями кода.
#if defined(DEBUGGING)
space = 1000;
#else
space = 10;
#endif
Директивы #ifdef и #ifndef являются сокращением для директив
#if defined и #if !defined соответственно.
Пример. Предотвращение многократной трансляции заголовочного файла sample.h.
#ifndef __SAMPLE_H__
#define __SAMPLE_H__
// здесь содержание файла
#endif
Если файл sample.h окажется многократно включенным в исходный код программы, то при таком “обрамлении” его содержимого будет оттранслировано лишь первое вхождение заголовочного файла.
Замечание. В Visual C++ та же цель достигается применением директивы
#pragma once.
Директива #error
Директива #error вызывает во время компиляции сообщение об ошибке.
#error сообщение_об_ошибке
Пример. Обеспечение правильности параметров компиляции.
#if !defined(__cplusplus)
#error Этот файл должен компилироваться в режиме С++
#endif
Сообщение может содержать идентификаторы макросов, которые будут расширены препроцессором. Директива обычно применяется, когда не был определен необходимый макрос.
Директива #line
С помощью директивы #line можно изменить внутренний счетчик строк компилятора и имя компилируемого файла. Она имеет следующий вид
#line номер_строки ["имя_файла"]
Директива #pragma
Директива #pragma позволяет влиять на процесс и результат компиляции. Вот несколько опций для компилятора Visual C++.
#pragma hdrstop — предписывает компилятору не включать дальнейшую информацию в прекомпилируемый заголовок;
#pragma once — предписывает компилятору лишь однажды включать данный заголовочный файл в программу;
#pragma warning — выборочно разрешает или подавляет предупреждающие сообщения.
1.3 Порядок виконання роботи
Вивчити директиви препроцесорної обробки. Ознайомитися з правилами створювання макросами та класичними помилками програмістів-початківців. Перед початком виконання лабораторної роботи розібрати наведений приклад. Особливу увагу приділити механізму підключення модулю до основної програми.
1.4 Контрольні запитання та завдання
1.5 Завдання
Ввід-вивід елементів масиву та вирішення завдання оформити у вигляді макросів та розмістити їх в окремому модулі.
1.6 Варіанти завдань
Вариант 1
В одномерном массиве, состоящем из вещественных элементов, вычислить:
1) сумму отрицательных элементов массива;
2) произведение элементов массива, расположенных между максимальным и минимальным элементами.
Упорядочить элементы массива по возрастанию.
Вариант 2
В одномерном массиве, состоящем из вещественных элементов, вычислить:
1) сумму положительных элементов массива;
2) произведение элементов массива, расположенных между максимальным по модулю и минимальным по модулю элементами.
Упорядочить элементы массива по убыванию.
Вариант 3
В одномерном массиве, состоящем из целых элементов, вычислить:
1) произведение элементов массива с четными номерами;
2) сумму элементов массива, расположенных между первым и последним нулевыми элементами.
Преобразовать массив таким образом, чтобы сначала располагались все положительные элементы, а потом — все отрицательные (элементы, равные 0, считать положительными).
Вариант 4
В одномерном массиве, состоящем из вещественных элементов, вычислить:
1) сумму элементов массива с нечетными номерами;
2) сумму элементов массива, расположенных между первым и последним отрицательными элементами.
Сжать массив, удалив из него все элементы, модуль которых не превышает 1. Освободившиеся в конце массива элементы заполнить нулями.
Вариант 5
В одномерном массиве, состоящем из вещественных элементов, вычислить:
1) максимальный элемент массива;
2) сумму элементов массива, расположенных до последнего положительного элемента.
Сжать массив, удалив из него все элементы, модуль которых находится в интервале [ , ]. Освободившиеся в конце массива элементы заполнить нулями.
Вариант 6
В одномерном массиве, состоящем из вещественных элементов, вычислить:
1) минимальный элемент массива;
2) сумму элементов массива, расположенных между первым и последним положительными элементами.
Преобразовать массив таким образом, чтобы сначала располагались все элементы, равные нулю, а потом — все остальные.
Вариант7
В одномерном массиве, состоящем из целых элементов, вычислить:
1) номер максимального элемента массива;
2) произведение элементов массива, расположенных между первым и вторым нулевыми элементами.
Преобразовать массив таким образом, чтобы в первой его половине располагались элементы, стоявшие в нечетных позициях, а во второй половине — элементы, стоявшие в четных позициях.
Вариант 8
В одномерном массиве, состоящем из вещественных элементов, вычислить:
1) номер минимального элемента массива;
2) сумму элементов массива, расположенных между первым и вторым отрицательными элементами.
Преобразовать массив таким образом, чтобы сначала располагались все элементы, модуль которых не превышает 1, а потом — все остальные.
Вариант 9
В одномерном массиве, состоящем из вещественных элементов, вычислить:
1) максимальный по модулю элемент массива;
2) сумму элементов массива, расположенных между первым и вторым положительными элементами.
Преобразовать массив таким образом, чтобы элементы, равные нулю, располагались после всех остальных.
Вариант 10
В одномерном массиве, состоящем из целых элементов, вычислить:
1) минимальный по модулю элемент массива;
2) сумму модулей элементов массива, расположенных после первого элемента, равного нулю.
Преобразовать массив таким образом, чтобы в первой его половине располагались элементы, стоявшие в четных позициях, а во второй половине — элементы, стоявшие в нечетных позициях.
Вариант 11
В одномерном массиве, состоящем из вещественных элементов, вычислить:
1) номер минимального по модулю элемента массива;
2) сумму модулей элементов массива, расположенных после первого отрицательного элемента.
Сжать массив, удалив из него все элементы, величина которых находится в интервале [ , ]. Освободившиеся в конце массива элементы заполнить нулями.
Вариант 12
В одномерном массиве, состоящем из вещественных элементов, вычислить:
1) номер максимального по модулю элемента массива;
2) сумму элементов массива, расположенных после первого положительного элемента.
Преобразовать массив таким образом, чтобы сначала располагались все элементы, целая часть которых лежит в интервале [ , ], а потом — все остальные.
Вариант 13
В одномерном массиве, состоящем из вещественных элементов, вычислить:
1) количество элементов массива, лежащих в диапазоне от до ;
2) сумму элементов массива, расположенных после максимального элемента. Упорядочить элементы массива по убыванию модулей элементов.
Вариант 14
В одномерном массиве, состоящем из вещественных элементов, вычислить:
1) количество элементов массива, равных 0;
2) сумму элементов массива, расположенных после минимального элемента.
Упорядочить элементы массива по возрастанию модулей элементов.
Вариант 15
В одномерном массиве, состоящем из вещественных элементов, вычислить:
1) количество элементов массива, больших С;
2) произведение элементов массива, расположенных после максимального по модулю элемента.
Преобразовать массив таким образом, чтобы сначала располагались все отрицательные элементы, а потом — все положительные (элементы, равные 0, считать положительными).
Вариант 16
В одномерном массиве, состоящем из вещественных элементов, вычислить:
1) количество отрицательных элементов массива;
2) сумму модулей элементов массива, расположенных после минимального по модулю элемента.
Заменить все отрицательные элементы массива их квадратами и упорядочить элементы массива по возрастанию.
Вариант 17
В одномерном массиве, состоящем из целых элементов, вычислить:
1) количество положительных элементов массива;
2) сумму элементов массива, расположенных после последнего элемента, равного нулю.
Преобразовать массив таким образом, чтобы сначала располагались все элементы, целая часть которых не превышает 1, а потом — все остальные.
Вариант 18
В одномерном массиве, состоящем из вещественных элементов, вычислить:
1) количество элементов массива, меньших ;
2) сумму целых частей элементов массива, расположенных после последнего отрицательного элемента.
Преобразовать массив таким образом, чтобы сначала располагались все элементы, отличающиеся от максимального не более чем на 20%, а потом — все остальные.
Вариант 19
В одномерном массиве, состоящем из вещественных элементов, вычислить:
1) произведение отрицательных элементов массива;
2) сумму положительных элементов массива, расположенных до максимального элемента.
Изменить порядок следования элементов в массиве на обратный.
Вариант 20
В одномерном массиве, состоящем из вещественных элементов, вычислить:
1) произведение положительных элементов массива;
2) сумму элементов массива, расположенных до минимального элемента.
Упорядочить по возрастанию отдельно элементы, стоящие на четных местах, и элементы, стоящие на нечетных местах.
Вариант 21
В одномерном массиве, состоящем из вещественных элементов, вычислить:
1) сумму отрицательных элементов массива;
2) количество элементов массива больше первого элемента;
Изменить порядок следования элементов в массиве на обратный.
Вариант 22
В одномерном массиве, состоящем из вещественных элементов, вычислить:
1) обнулить все отрицательные элементы массива расположенные на четных местах;
2) подсчитать количество ненулевых элементов массива;
Отсортировать все ненулевые элементы по возрастанию.
Вариант 23
В одномерном массиве, состоящем из целых элементов, вычислить:
1) максимальный по модулю элемент массива;
2) сумму всех элементов массива, расположенных после максимального по модулю.
Отсортировать элементы массива стоящие после максимального по модулю.
Вариант 24
В одномерном массиве, состоящем из вещественных элементов, вычислить:
1) номер максимального элемента массива;
2) произведение элементов массива, расположенных между первым и вторым отрицательными элементами.
Преобразовать массив таким образом, чтобы сначала располагались все элементы, модуль которых не превышает 5, а потом — все остальные.
Вариант 25
В одномерном массиве, состоящем из целых элементов, вычислить:
1) сумму положительных элементов массива;
2) произведение элементов массива, расположенных между первым четным и последним нечетным элементами.
Упорядочить элементы массива по возрастанию.
Вариант 26
В одномерном массиве, состоящем из целых элементов, вычислить:
1) произведение положительных элементов массива;
2) сумму элементов массива, расположенных между максимальным по модулю и последним четным элементами.
Упорядочить элементы массива по убыванию.
Вариант 27
В одномерном массиве, состоящем из целых элементов, вычислить:
1) произведение элементов массива с четными номерами;
2) сумму элементов массива, расположенных между первым и последним нулевыми элементами.
Преобразовать массив таким образом, чтобы сначала располагались все положительные элементы, а потом — все отрицательные (элементы, равные 0, считать положительными).
Вариант 28
В одномерном массиве, состоящем из целых элементов, вычислить:
1) номер максимального по модулю элемента массива;
2) произведение элементов массива, расположенных между первым и последним нулевыми элементами.
Переставить максимальный по модулю элемент с первым.
Вариант 29
В одномерном массиве, состоящем из вещественных элементов, вычислить:
1) минимальный положительный элемент массива;
2) сумму элементов массива, расположенных между первым положительным и последним отрицательным элементами.
Переставить местами минимальный положительный элимент с последним отрицательным.
Вариант 30
В одномерном массиве, состоящем из вещественных элементов, вычислить:
1) количество элементов массива, равных 0;
2) количество элементов массива, расположенных после минимального элемента.
Упорядочить элементы массива по убыванию модулей элементов.