http://program.vsu.by/ Лабораторная работа №2 Знакомство со средой Borland C++ Builder. Линейные алгоритмы Выберите вариант проверочной работы: Задание 4. Составьте линейные программы для решения следующих задач: – Дано натуральное число А. Используя только операцию «*» вычислить А8 за три операции. – Дано натуральное число А. Используя только операцию «*» вычислить А10 за четыре операции. – Дано натуральное число А. Используя только операцию «*» вычислить А13 за пять операций. – Дано натуральное число А. Используя только операцию «*» вычислить А15 за пять операций. – Дано натуральное число А. Используя только операцию «*» вычислить А21 за шесть операций. Задание 5. В соответствии с вариантом выполните задание 1–10 из методического пособия «Языки С и С++. Практикум по программированию», с.11. Задание 6. В соответствии с вариантом выполните задание 11–20 из методического пособия «Языки С и С++. Практикум по программированию», с.11. Лабораторная работа №3 Разветвляющиеся алгоритмы Задание 1. Дано четырехзначное натуральное число A. Требуется определить: Варианты задания 1. что больше: число A или произведение его цифр? 2. верно ли, что число A кратно сумме его цифр? 3. является ли сумма цифр числа A двузначным числом? 4. верно ли, что все цифры числа A одинаковые? 5. кратна ли сумма цифр числа A заданному числу B? 6. верно ли, что число A заканчивается четной цифрой? 7. является ли произведение цифр числа A трехзначным числом? 8. имеются ли среди цифр числа A одинаковые? 9. верно ли, что число A заканчивается нечетной цифрой? 10. кратно ли произведение цифр числа A заданному числу B? Задание 2. Дополните программы из заданий 5, 6 лабораторной работы №2 условными операторами, предназначенными для проверки корректности ввода исходных данных. Задание 3. Составьте программу для вычисления значения выражения (без использования библиотечных макрокоманды MAX и MIN).Варианты задания Задание 4. Постройте чертеж. Обозначьте получившиеся области плоскости. Составьте программу, которая по заданным координатам точки (x, y) определяет, на какой линии или внутри какой области плоскости находится эта точка. Вариант 1 Прямая x–3y+3=0; Окружность (x-2)2 + (y+3)2 = 4; Парабола y=(x+3)2+1; Вариант 2 Прямая –2x=0; Окружность (x+2)2 + (y+1)2 = 4; Парабола y=(x+2)2+3; Вариант 3 Прямая 2x–y+1=0; Окружность (x+2)2 + (y-1)2 = 1; Парабола y=(x+3)2+1; Вариант 4 Прямая –3x+3y+1=0; Окружность x2 + (y-2)2 = 1; Парабола y=(x-2)2–2; Вариант 5 Прямая x–2y+2=0; Окружность x2 + (y-2)2 = 9; Парабола y=–(x-1)2–3; Вариант 6 Прямая –3x+2y–2=0; Окружность x2 + (y-3)2 = 9; Парабола y=–(x-3)2; Вариант 7 Прямая –3x+y+3=0; Окружность (x+3)2 + y2 = 4; Парабола y=–x2–2; Вариант 8 Прямая –3x+3y=0; Окружность (x+3)2 + (y+3)2 = 9; Парабола y=–(x+2)2+2; Вариант 9 Прямая 3x+2y+1=0; Окружность (x+2)2 + (y-2)2 = 9; Парабола y=(x+3)2+3; Вариант 10 Прямая x–y+3=0; Окружность (x-1)2 + y2 = 4; Парабола y=(x-1)2+2; Вариант 11 Прямая –3x+y+1=0; Окружность (x+1)2 + (y-3)2 = 1; Парабола y=–x2+1; Вариант 12 Прямая –2y–1=0; Окружность (x-1)2 + (y+3)2 = 1; Парабола y=–(x-3)2+1; Вариант 13 Прямая 2x–3y+1=0; Окружность (x+1)2 + (y-1)2 = 4; Парабола y=x2+3; Вариант 14 Прямая –2x–y–2=0; Окружность (x+2)2 + (y+3)2 = 9; Парабола y=–(x-1)2+3; Вариант 15 Прямая –x–3y=0; Окружность (x+1)2 + (y+1)2 = 9; Парабола y=(x-2)2–3; Лабораторная работа №4 Циклические алгоритмы Задание 1. С использованием цикла for вычислите значения сумм и произведений первых N ... Задание 2. С использованием цикла for выполните домашнее задание. Задание 3. В соответствии с вариантом выполните задание 1–10 из методического пособия «Языки С и С++. Практикум по программированию», с.18. Лабораторная работа №5 Циклические алгоритмы. Табулирование функций Задание 7. Постройте таблицу значений кусочно-заданной функции на отрезке [Xнач, Xкон] с шагом dX по образцу: X | Y1 | Y2 | Y3 -----------------------------------0.50 | 1.2304 | 56.7000 | 0.0089 0.54 | 2.9132 | 30.1234 | -0.0148 0.58 | 10.1688 | 2.3721 | -0.0345 . . . Значения величин Xнач, Xкон, dX, а также коэффициенты функций введите с клавиатуры. Варианты задания Лабораторная работа №6 Массивы Задание 1. Задан массив из N действительных чисел. Найдите в этом массиве: Варианты задания 1. Сумму отрицательных элементов массива. 2. Индекс максимального по модулю элемента массива. 3. Произведение элементов массива с четными индексами. 4. Значение максимального по модулю элемента массива. 5. Индекс минимального по модулю элемента массива. 6. Сумму элементов массива с четными индексами. 7. Индекс максимального элемента массива. 8. Сумму положительных элементов массива. 9. Значение минимального по модулю элемента массива. 10. Произведение элементов массива с нечетными индексами. 11. Индекс минимального элемента массива. 12. Сумму элементов массива с нечетными индексами. Задание 2. Задан массив из N действительных чисел. Составьте программу для поиска в этом массиве. Варианты задания 1. Произведение элементов массива, расположенных между максимальным и минимальным элементами. 2. Сумму элементов массива, расположенных между первым и вторым отрицательными элементами. 3. Сумму элементов массива, расположенных между первым и последним нулевыми элементами. 4. Произведение элементов массива, расположенных между максимальным по модулю и минимальным по модулю элементами. 5. Сумму элементов массива, расположенных между первым и последним отрицательными элементами. 6. Сумму элементов массива от начала до последнего положительного элемента (включительно). 7. Сумму элементов массива, расположенных между первым и последним положительными элементами. 8. Произведение элементов массива, расположенных между первым и вторым нулевыми элементами. 9. Сумму модулей элементов массива от первого отрицательного элемента (включительно) до конца массива. 10. Сумму элементов массива, расположенных между первым и вторым положительными элементами. 11. Сумму модулей элементов от первого нулевого элемента до конца массива. 12. Сумму модулей элементов массива от первого положительного элемента (включительно) до конца массива. Задание 3. Задан массив из N действительных чисел. Составьте программу для преобразования массива. Варианты задания 1. Уплоните массив, удалив из него все нулевые элементы. 2. Переставьте элементы массива так, чтобы сначала шли все отрицательные элементы массива, затем все нулевые элементы, затем все положительные (с сохранением исходного относительного порядка). 3. Уплотните массив, удалив из него все отрицательные элементы. 4. Переставьте элементы массива так, чтобы сначала шли элементы с четными индексами, затем - все остальные (с сохранением исходного относительного порядка). 5. Уплотните массив, удалив из него все элементы, модуль которых не превышает 1. 6. Переставьте элементы массива так, чтобы сначала шли все элементы, значение которых по модулю меньше 1, затем - все остальные (с сохранением исходного относительного порядка). 7. Переставьте элементы массива так, чтобы сначала шли все нулевые элементы массива, затем все остальные элементы (с сохранением исходного относительного порядка). 8. Уплотните массив, удалив из него все элементы, модуль которых находится в заданном промежутке [a; b]. 9. Переставьте элементы массива так, чтобы сначала шли элементы с нечетными индексами, затем - с четными (с сохранением исходного относительного порядка). 10. Переставьте элементы массива так, чтобы сначала шли все положительные элементы массива, затем все неположительные (с сохранением исходного относительного порядка). 11. Уплотните массив, удалив из него все элементы, значение которых находится в заданном промежутке [a; b]. 12. Расположите в начале массива все его ненулевые элементы (с сохранением исходного порядка), потом - все нулевые. Лабораторная работа №7 Часть 1. Поиск и сортировка массивов Задание 1. Задан одномерный массив из N действительных чисел. Необходимо упорядочить его элементы методом вставки а) по возрастанию; б) по убыванию. Задание 2. Используя алгоритм бинарного поиска определите, содержит ли ранее упорядоченный массив заданное действительное число. Если содержит, то выведите индекс искомого элемента. Часть 2. Двумерные массивы Задание 3. Задан двумерный массив. Составьте программу для поиска в этом массиве. Варианты задания 1. В прямоугольном массиве N×M определите номера и общее количество столбцов, не содержащих ни одного нулевого элемента. 2. Определите, содержатся ли в квадратном массиве N×N строки, элементы которых совпадают с элементами некоторого столбца. Если да, то выведите номера всех подобных строк и столбцов. 3. Найдите сумму элементов каждой диагонали квадратного массива N×N, параллельной побочной диагонали, и минимальное среди найденных значений. 4. Подсчитайте количество локальных минимумов в прямоугольном массиве N×M. (Элемент массива является локальным минимумом, если он строго меньше всех соседних с ним элементов). 5. В прямоугольном массиве N×M найдите номера и общее количество строк, у которых среднее арифметическое элементов меньше заданной величины. 6. В прямоугольном массиве N×M найдите все седловые элементы. (Элемент массива называется седловым, если его значение является наименьшим в строке и наибольшем в столбце.) 7. Найдите сумму элементов каждой диагонали квадратного массива N×N, параллельной главной диагонали, и максимальное среди найденных значений. 8. В прямоугольном массиве N×M определите произведение элементов в тех строках, которые не содержат ни одного нулевого элемента. 9. В каждой строке квадратного массива N×N найдите сумму элементов, расположенных выше главной диагонали. 10. Подсчитайте количество локальных максимумов в прямоугольном массиве N×M. (Элемент массива является локальным максимумом, если он строго больше всех соседних с ним элементов). Задание 4. Заполните случайным образом двумерный массив двузначными числами и выведите его на экран. Выполинте циклический сдвиг его элементов в заданном направлении. Выведите полученный массив на экран. (Циклический сдвиг означает, что все элементы массива, по возможности, должны переместиться в указанном направлении. Те крайние элементы, которым некуда перемещаться, должны появиться с противоположной стороны. Например, циклический сдвиг элементов массива по диагонали вправо вниз должен выполняться так: Исходный массив 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 Полученный массив 16 13 14 15 4 1 2 3 8 5 6 7 12 9 10 11 Варианты задания 1. Прямоугольный массив N×M по горизонтали слева направо. 2. Квадратный массив N×N по диагонали вправо вниз. 3. Квадратный массив N×N по кругу по часовой стрелке. 4. Прямоугольный массив N×M по вертикали сверху вниз. 5. Квадратный массив N×N по диагонали влево вниз. 6. Прямоугольный массив N×M по горизонтали справа налево. 7. Квадратный массив N×N по дигонали вправо вверх. 8. Квадратный массив N×N по кругу против часовой стрелки. 9. Прямоугольный массив N×M по вертикали снизу вверх. 10. Квадратный массив N×N по диагонали влево вверх. Лабораторная работа №8 Динамическое распределение памяти. Функции Задание. Выполните все задания предыдущей лабораторной работы следующим образом: а) для хранения массивов используйте динамически распределяемую память; б) каждый этап обработки массивов (ввод, заполнение, вывод, упорядочение и т.п.) оформите в виде отдельной функции. Не забывайте своевременно освобождать память. Лабораторная работа №9 Строки. Строковые функции Задание 1. В соответствии с вариантом выполните задание 1–10 из методического пособия «Языки С и С++. Практикум по программированию», с.32. Задание 2. В соответствии с вариантом выполните задание 11–20 из методического пособия «Языки С и С++. Практикум по программированию», с.32. Задание 3. Выполните предыдущие задания, используя для хранения строк динамически распределяемую память. Не забывайте своевременно освобождать память. Лабораторная работа №10 Структурные типы данных Задание 1. Изучите пример обработки структурных типов данных. Подготовьте приложение, убедитесь в его работоспособности. /*************************************************************** * * * Файл : students.cpp * * * * Описание : пример программы для обработки структурных типов * * данных STUDENT (Студент) и GROUP (Группа) * * * ***************************************************************/ #include <iostream.h>> #include <windows.h> // ================ описание типов данных ====================== // ------- описание структурного типа данных СТУДЕНТ ----------struct STUDENT { char LastName[15]; // Фамилия char FirstName[15]; // Имя char MiddleName[15]; // Отчество int Number; // Номер студенческого билета }; // ------- описание структурного типа данных ГРУППА -----------// максимальное количество студентов в группе #define MAX_STUDENT 30 struct GROUP { char Name[5]; // Название группы int N; // Количество студентов STUDENT Student[MAX_STUDENT]; // Массив студентов }; // =============== описание прототипов функций ================= // Ввод информации о студенте с клавиатуры STUDENT InputStudent(void); // Вывод информации о студенте на экран void OutputStudent(STUDENT Student); // Ввод информации о группе с клавиатуры void InputGroup(GROUP *Group); // Вывод информации о группе на экран void OutputGroup(GROUP Group); // =============== основная функция программы ================== int main(int argc, char* argv[]) { SetConsoleCP(1251); SetConsoleOutputCP(1251); GROUP Group; InputGroup(&Group); OutputGroup(Group); Sleep(7654); return 0; } // ============ Ввод информации о студенте с клавиатуры ======== STUDENT InputStudent(void) { STUDENT student; cout << "Введите фамилию ====> "; cin >> student.LastName; cout << "Введите имя ========> "; cin >> student.FirstName; cout << "Введите отчество ===> "; cin >> student.MiddleName; cout << "Введите номер студенческого билета ===> "; cin >> student.Number; return student; } // ============ Вывод информации о студенте на экран =========== void OutputStudent(STUDENT Student) { cout.width(8); cout.fill('0'); cout << Student.Number << " " << Student.LastName << " " << Student.FirstName[0] << ". " << Student.MiddleName[0] << ".\n"; } // ============ Ввод информации о группе с клавиатуры ========== void InputGroup(GROUP *Group) { cout << "Введите название группы ===> "; cin >> Group->Name; cout << "Введите количество студентов (не более " << MAX_STUDENT << ") ===> "; cin >> Group->N; for (int i=0;i<Group->N;i++) { cout << "Введите информацию о " << (i+1) << "-ом студенте\n"; Group->Student[i]=InputStudent(); } } // ============ Вывод информации о группе на экран ============= void OutputGroup(GROUP Group) { cout << "Список группы " << Group.Name << "\n"; for(int i=0;i<Group.N;i++) OutputStudent(Group.Student[i]); } // ===================== конец программы ======================= Задание 2. В соответствии с вариантом разработайте программу для обработки структурных типов данных. Реализуйте отдельные функции для ввода, вывода, поиска информации по некоторому условию, сортировки по некоторому признаку. Варианты задания 1. Экзаменационная ВЕДОМОСТЬ по некоторой дисциплине: фамилия И.О. СТУДЕНТА, номер студенческого билета, оценка. Упорядочьте по убыванию оценок. Выведите список неуспевающих студентов. 2. РАСПИСАНИЕ отправления пригородных ПОЕЗДОВ по некоторой станции: номер поезда, конечная станция, время отправления, время прибытия на конечную станцию. Упорядочьте по времени отправления. Выведите список поездов до указанной станции. 3. Автобусный ПАРК: гос.номер АВТОБУСА, модель, год выпуска, количество мест для сидения, количество мест для стояния. Упорядочьте по убыванию года выпуска. Выведите список автобусов требуемой вместительности. 4. Аптечный СКЛАД: наименование ЛЕКАРСТВА, количество упаковок, количество таблеток в упаковке, масса таблетки. Упорядочьте по возрастанию имеющегося количества упаковок. Выведите информацию об указанном лекарстве. 5. Книжный МАГАЗИН: автор КНИГИ, название, год издания, цена, количество экземпляров. Упорядочьте книги по убыванию год издания. Выведите список книг указанного автора. 6. Ящик электронной ПОЧТЫ: отправитель СООБЩЕНИЯ, текст сообщения, даты отправления. Упорядочьте по убыванию даты отправления. Выведите все сообщения указанного отправителя. 7. КАТАЛОГ музыкальных ПРОИЗВЕДЕНИЙ: имя исполнителя, название, стиль, продолжительность. Упорядочьте по возрастанию продолжительности произведений. Выведите список произведений указанного исполнителя. 8. База данных ОТДЕЛА КАДРОВ: Фамилия И.О. СОТРУДНИКА, пол, специальность, год рождения, стаж работы. Упорядочьте по убыванию стажа работы. Выведите список сотрудников пенсионного возраста. 9. База данных ГАИ: гос.номер АВТОМОБИЛЯ, марка, модель, Фамилия И.О. владельца, год выпуска. Упорядочьте по возрастанию года выпуска автомобиля. Выведите список автомобилей указанной марки. 10. РАСПИСАНИЕ ЗАНЯТИЙ: день недели, номер пары, название дисциплины, Фамилия И.О. преподавателя. Упорядочьте по возрастанию номера пары. Выведите расписание на указанный день недели. Лабораторная работа №11 Модульная структура приложения Задание 1. В соответствии с заданием лабораторной работы №10 разработайте модуль, содержащий функции для обработки структурных типов данных: ввод, вывод и т.п. Выполните задание с использованием разработанного модуля. Задание 2. В соответствии с заданием лабораторной работы №7 (часть 1), лабораторной работы №8, разработайте модуль, содержащий функции для обработки одномерных массивов: ввод, вывод, сортировку и т.п. Выполните задание с использованием разработанного модуля. Задание 3. В соответствии с заданием лабораторной работы №7 (часть 2), лабораторной работы №8, разработайте модуль, содержащий функции для обработки двумерных массивов: ввод, вывод и т.п. Выполните задание с использованием разработанного модуля. Лабораторная работа №12 Файловый ввод-вывод Задание. В соответствии с заданием лабораторной работы №10 подготовьте текстовый файл, содержащий требуемые исходные данные. Разработайте модульное приложение для решения задачи, используя для организации ввода-вывода а) функции; б) операторы. Лабораторная работа №13 Объектно-ориентированное программировани Задание 1. Изучите пример решения геометрической задачи с использованием объектов. Задание 2. Дополните приведенный в примере модуль "geometry" операторами для вывода объектов в поток. Используя эти операторы, измените решение задачи. Задание 3. Дополните приведенный в примере модуль "geometry" описанием класса "Вектор" для работы с векторами. Подготовьте методы, реализующие основные операции над векторами. Задание 4. С использованием имеющихся классов решите предложенные задачи. При необходимости дополните модуль "geometry" новыми классами и/или методами. Варианты задания 1. Постройте квадрат, концы одной диагонали которого имеют координаты (x1, y1) и (x2, y2), и описанную вокруг него окружность. 2. Определите, лежит ли точка с координатами (x0, y0) внутри треугольника, вершины которого расположены в точках (x1, y1), (x2, y2) и (x3, y3). 3. Постройте окружность радиуса R, проходящую через точки с координатами (x1, y1) и (x2, y2). 4. Постройте квадрат, если известно, что некоторые две его вершины расположены в точках (x1, y1) и (x2, y2). Опишите вокруг полученного квадрата окружность. 5. Даны координаты вершин некоторого четырехугольника: (x1, y1), (x2, y2), (x3, y3) и (x4, y4). Определите, является ли этот четырехугольник: а) параллелограммом; б) ромбом; в) квадратом? 6. Найдите точки пересечения высот и медиан треугольника, вершины которого расположены в точках (x1, y1), (x2, y2) и (x3, y3). 7. Постройте параллелограмм, если известно, что некоторые три его вершины расположены в точках (x1, y1), (x2, y2) и (x3, y3). Предусмотрите все возможные варианты расположения фигуры. 8. Постройте окружность, вписанную в равносторонний треугольник, если известно, что некоторые две его вершины расположены в точках (x1, y1) и (x2, y2). 9. Определите, лежит ли треугольник с вершинами в точках (x1, y1), (x2, y2) и (x3, y3) внутри окружности с центром в точке (x0, y0) и радиусом R? 10. Постройте прямоугольник, если известно, что описанная вокруг него окружность имеет радиус R, а некоторые две соседние вершины расположены в точках (x1, y1) и (x2, y2). Лабораторная работа №14 Объектно-ориентированное программирование. Наследование Задание. В соответствии с вариантом выполните задание 1–10 из методического пособия «Языки С и С++. Практикум по программированию», с.50. Лабораторная работа №15 Объектно-ориентированное программирование. Перегрузка операторов Задание. В соответствии с вариантом выполните задание 1–10 из методического пособия «Языки С и С++. Практикум по программированию», с.58. Лабораторная работа №16 Шаблоны Задание. В соответствии с вариантом задания разработайте шаблон класса для решения предложенных задач. Подготовьте программу, демонстрирующую использование шаблона. Варианты заданий. 1. Найдите наибольшее, наименьшее и среднее арифметическое значение элементов одномерного массива. 2. Упорядочьте одномерный массив по возрастанию и убыванию методом выбора. 3. Найдите наибольшее, наименьшее и среднее арифметическое значение элементов двумерного массива N x M. 4. Упорядочьте одномерный массив по возрастанию и убыванию методом вставки. 5. Найдите сумму, разность и скалярное произведение двух векторов в N-мерном пространстве. 6. Вычислите натуральную степень, произведение квадратных матриц N x N. 7. Упорядочьте одномерный массив по возрастанию и убыванию методом обмена. 8. Найдите количество абсолютных и локальных минимумов и максимумов среди элементов одномерного массива. 9. Найдите периметр и площадь выпуклого многоугольника. 10. Найдите сумму и разность двух прямоугольных матриц N x M. Указания. 1. Описание класса-шаблона должно включать операторы <<, >>, конструктор копирования, а также другие операторы и функции, необходимые для решения задачи. 2. Распределение памяти для хранения массивов должно осуществляться динамически (в конструкторе), а освобождение – в деструкторе.