Инфоурок Информатика Другие методич. материалыМетодические указания по практическим работам по программированию на С++

Методические указания по практическим работам по программированию на С++

Скачать материал

Министерство образования Московской области
ГБПОУ МО «Красногорский колледж»

Волоколамский филиал

Отделение №2

 

 



 

ОСНОВЫ ПРОГРАММИРОВАНИЯ НА ЯЗЫКЕ С++

В СРЕДЕ DevC++

Методические указания для выполнения практических работ по дисциплине

«Основы программирования»

Раздел 2.Программирование на языке С++

для студентов специальности
09.02.03 «Программирование в компьютерных системах»

 

Разработал:

преподаватель ГБПОУ МО «Красногорский колледж»

Волоколамский филиал отделение №2

Романова Елена Фархадовна

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Волоколамск 2017

ВВЕДЕНИЕ

C++ (произносится как «Си плюс плюс») был разработан Бьёрном Страуструпом в Bell Labs в качестве дополнения к C в 1979 г. Он добавил множество новых функций в язык С. Его популярность была вызвана тем, что это объектно-ориентированный язык. Насчет объектно-ориентированного программирования и его отличия от традиционных методов программирования мы расскажем позднее.

C++ был ратифицированным (одобренным) комитетом ISO в 1998 году, потом в 2003 году (под названием C++ 03). Потом были еще два обновления (C++ 11 и C++ 14, ратифицированные в 2011 и 2014 годах соответственно), которые добавили больше функциональных возможностей.

Вашему вниманию представлены 22 практических работы, которые помогут вам овладеть основами программирования на языке С++, а также дадут представление об основах объектно-ориентированного программирования.

 

 


ПРАКТИЧЕСКАЯ РАБОТА №2.1

Дисциплина: Основы программирования

Тема: Программирование линейных алгоритмов на языке С++

Цель: формирование ОК 1-9, ПК 1.1, 3.1, 3.2, 3.4

Задача: изучить принципы алгоритмизации линейных вычислительных процессов, способов записи алгоритмов. Исследовать структуру программ, типов данных, стандартных библиотек. Получить навыки отладки программы.

Материалы:

1.     Основы алгоритмизации и программирования. Практикум: учеб. пособие для студ. учреждений сред. проф. образования / И.Г. Семакин, А.П. Шестаков. – 2-е изд., стер. – М.: Издательский центр «Академия», 2014. – 144 с.

2.     Язык программирования С++. Специальное издание / Б.Страуструп – 3-е изд.

3.     Объектно-ориентированное программирование в С++. Классика Computer Scince. 4-е изд. – СПб.: Питер, 2017. – 928 с.

 

Ход выполнения работы

1.     Изучить структуру программы на языке С++.

2.     Изучить простые типы данных, объявление переменных и констант, процедуры и операторы ввода-вывода (printf и scanf, cin и cout).

3.     Изучить порядок использования библиотечных ресурсов, директиву #include, библиотеку iostream.

4.     Создать файл программы, в функцию main внести текст представленного примера. Подключите необходимые библиотеки. В тексте примера намеренно допущен ряд типичных для начинающих ошибок.

5.     Выполнить компиляцию получившейся программы и получить список ошибок.

6.     Исправить все указанные ошибки и скомпилировать еще раз.

7.     Если компиляция неудачная, снова выполнить её.

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

9.     Записать алгоритм на языке С++, откомпилировать программу, придайте программе правильную структуру.

10. Составить трассировочную таблицу, проверить работу программы.

 

Пример выполнения программы

Найти скалярное произведение двух векторов; считать, что размерность векторов равна 3, угол между векторами 60º.

Формализация: скалярное произведение равно произведению длин двух векторов на косинус угла между ними.

Код программы:

#include <cmath>

#define int M_PI 3.14

const level = 2;

int main()

{ //добавление возможности писать на русском языке

 setlocale(LC_ALL, "RUS");

 int x1, x2; //координаты первого вектора

 int y1, y2; //координаты второго вектора

 double a = 60; //угол между векторами

 int p; //скалярное произведение

 printf("Введите координаты первого вектора: x1, x2, x3 = \n");

 scanf("%%%i", x1, x2, x3);

 printf("x1 = %s\n", x1);

 printf("x2 = %s\n", x2);

 printf("x3 = %s\n", x3);

 printf("Введите координаты второго вектора: y1, y2, y3 = \n");

 scanf("%%%i", y1, y2, y3);

 printf("y1 = %s\n", y1);

 printf("y2 = %s\n", y2);

 printf("y3 = %s\n", y3);

 d1 = sqrt((double)(x1*x1 + pow((double)x2, level) + pow((double)x3, (double)level)));

 d2 = sqrt((double)(y1*y1 + pow((double)y2, (int)2) + pow((double)y3, level)));

 radians = a * M_PI / 180

 p = d1*d2 * cos(radians);

 printf("Длина первого вектора = 5.2i\n", d1);

 printf("Длина второго вектора = 5.2i\n", d2);

 printf("Скалярное произведение = 5.2i\n");

 system("pause");

 //чтобы окно программы не закрывалось

 return 0; }

 

Рабочее задание

Индивидуальные задачи из практикума.

 

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

1.     Метод нисходящего проектирования: в чем его особенности?

2.     Линейные операторы языка С++.

3.     Простые типы данных языка С++.

4.     Структура программы на языке С++.

5.     Стандартные библиотеки и их подключение.

6.     Что такое идентификатор, переменная, константа?

7.     Что такое совместимость типов?

8.     Явное и неявное преобразование типов.


 

ПРАКТИЧЕСКАЯ РАБОТА №2.2

Дисциплина: Основы программирования

Тема: Программирование разветвляющихся алгоритмов на языке С++

Цель: формирование ОК 1-9, ПК 1.1, 3.1, 3.2, 3.4

Задача: изучить принципы программирования и структуру алгоритмов разветвляющихся вычислительных процессов на языке С++.

Материалы:

1.     Основы алгоритмизации и программирования. Практикум: учеб. пособие для студ. учреждений сред. проф. образования / И.Г. Семакин, А.П. Шестаков. – 2-е изд., стер. – М.: Издательский центр «Академия», 2014. – 144 с.

2.     Язык программирования С++. Специальное издание / Б.Страуструп – 3-е изд.

3.     Объектно-ориентированное программирование в С++. Классика Computer Scince. 4-е изд. – СПб.: Питер, 2017. – 928 с.

 

Ход выполнения работы

1.     Изучить структуры алгоритмов разветвляющихся вычислительных процессов. Изучить отличия структурного алгоритма от неструктурного.

2.     Изучить синтаксис и работу операторов ветвления if и switch.

3.     Изучить пример выполнения задания. Подключите необходимые библиотеки. Выполнить структуризацию программного кода.

4.     Разработать алгоритм решения индивидуального задания, удовлетворяющий требованиям.

Требования к алгоритму. Алгоритм должен соответствовать требованиям структурного подхода. Необходимо организовать ввод и вывод всех требуемых данных через диалог ЭВМ с человеком (интерфейс ввода-вывода), организовать проверку входных данных на допустимые значения. Запрещается использование неструктурного оператора goto. Возможно использование досрочного выхода из процедуры с помощью оператора return.

5.     Разработать программу на языке С++ для алгоритма индивидуального задания.

6.     Выполнить отладку и компиляцию программы, получить исполняемый файл.

7.     Выполнить тестирование программы несколькими наборами входных данных.

 

Пример выполнения программы

Составить программу, выполняющую суммирование всех цифр от 0 до 9.

Код программы:

const int level = 2;

int main()

{ setlocale(LC_ALL, "RUS");

//диалог и ввод данных

 int lm = 0; //для меню

cout << "Выберите желаемое действие: " << endl;

 cout << "1: Решить задачу: " << endl;

 cout << "2: Выйти из приложения (без решения задачи)" << endl;

 cout << "Введите желаемое действие: ";

 cin >> lm;

 switch(lm){ //switch

 case 1:

 float a, b, c, d;

 printf("Введите число a = ");

 scanf("%f", &a);

 printf("Введите число b = ");

 scanf("%f", &b);

 printf("Введите число c = ");

 scanf("%f", &c);

 printf("Введите число d = ");

 scanf("%f", &d);

//решение задачи

 if ((a <= b) & (b <= c) & (c <= d)) {

 a = d; //a = b = c = d;

 b = d;

 c = d;

 }

 else

 if ((a > b) & (b > c) & (c > d))

// если написать противоположное условие, то операторы будут в блоке "true"

 ; //пустой оператор

 else { // различные способы возведения в квадрат

 a *= a;

 b = b*b;

 c = pow(c, 2);

 d = pow(d, level);

 }

//вывод результатов

 printf("\nЧисло a = %3.2f", a);

 printf("\nЧисло b = %3.2f", b);

 printf("\nЧисло c = %3.2f", c);

 printf("\nЧисло d = %3.2f\n\n", d);

 break;

 default:

 break;

 }// конец switch

 std::system("pause");

 return 0;

}

 

Рабочее задание

Индивидуальные задачи из практикума.

 

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

1.     Какие управляющие структуры используются в языке C++ для организации разветвляющихся алгоритмов?

2.     Поясните порядок выполнения оператора if…else и его сокращенной формы.

3.     Поясните порядок выполнения оператора switch. Каково здесь назначение оператора break?

4.     Сколько операторов можно написать после ключевых слов ifи else?

5.     Что такое составной оператор?

6.     Как разрешается неоднозначность, которая может возникнуть при использовании вложенных операторов if


 

ПРАКТИЧЕСКАЯ РАБОТА №2.3

Дисциплина: Основы программирования

Тема: Программирование циклических алгоритмов на языке С++

Цель: формирование ОК 1-9, ПК 1.1, 3.1, 3.2, 3.4

Задача: Изучить принципы программирования и структуры алгоритмов циклических вычислительных процессов и задач на языке программирования С++.

Материалы:

4.     Основы алгоритмизации и программирования. Практикум: учеб. пособие для студ. учреждений сред. проф. образования / И.Г. Семакин, А.П. Шестаков. – 2-е изд., стер. – М.: Издательский центр «Академия», 2014. – 144 с.

5.     Язык программирования С++. Специальное издание / Б.Страуструп – 3-е изд.

6.     Объектно-ориентированное программирование в С++. Классика Computer Scince. 4-е изд. – СПб.: Питер, 2017. – 928 с.

 

Ход выполнения работы

8.     Изучить структуры алгоритмов циклических вычислительных процессов. Изучить общие принципы работы с массивами.

9.     Изучить синтаксис и работу операторов for, while и do-while, директиву #define.

10. Изучить пример выполнения задания.

11. Разработать алгоритм решения индивидуального задания, удовлетворяющий требованиям, используя метод пошаговой детализации.

Требования к алгоритму. Алгоритм должен соответствовать требованиям структурного подхода. Необходимо организовать интерфейс ввода-вывода всех требуемых данных, организовать проверку входных данных на допустимые значения.

12. Разработать программу на языке С++ для алгоритма индивидуального задания.

13. Выполнить отладку и компиляцию программы, получить исполняемый файл.

14. Выполнить тестирование программы несколькими наборами входных данных.

 

Пример выполнения программы

Составить программу, выполняющую суммирование всех цифр от 0 до 9.

Код программы с циклом while:

#include <iostream>

using namespace std;

int main()

{

int summa=0; // Инициализация переменной суммы

int count=0; // Инициализация счётчика

while(count<=9) // Проверка условия

{ // начало тела цикла

summa=summa+count; //Приращение суммы

count++; // Приращение счётчика

 } // конец тела цикла

cout<<"Summa from 0 to 9 is "<<summa<<endl;

return 0;

}

Код программы с циклом for:

#include <iostream>

int main() {

int x, sum;

sum=0;

for(x=0; x<=9; x++) {

sum =sum+x;}
cout << sum;

return 0;
}

 

Рабочее задание

Индивидуальные задачи из практикума.

 

 

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

1.     Какие виды циклов существуют, в чем их принципиальные отличия?

2.     Назначение цикла for и его отдельных компонентов.

3.     Укажите, сколько операторов можно разместить в теле цикла?

4.     Можно ли в теле цикла изменять значение параметра цикла?

5.     Можно ли вне тела цикла использовать значение параметра цикла?

6.     Как работают операторы while и do-while?


 

ПРАКТИЧЕСКАЯ РАБОТА №2.4

Дисциплина: Основы программирования

Тема: Одномерные массивы

Цель: формирование ОК 1-9, ПК 1.1, 3.1, 3.2, 3.4

Задача: Изучить принципы программирования одномерного массива.

Материалы:

1.     Основы алгоритмизации и программирования. Практикум: учеб. пособие для студ. учреждений сред. проф. образования / И.Г. Семакин, А.П. Шестаков. – 2-е изд., стер. – М.: Издательский центр «Академия», 2014. – 144 с.

2.     Язык программирования С++. Специальное издание / Б.Страуструп – 3-е изд.

3.     Объектно-ориентированное программирование в С++. Классика Computer Scince. 4-е изд. – СПб.: Питер, 2017. – 928 с.

 

Краткая теория

Как и обычная переменная, перед использованием массив должен быть объявлен. Основная форма объявления массива размерности n следующая: тип данных имя массива [размер 1] [размер 2] … [размер n].

При описании одномерного массива объявляющая запись имеет вид: тип имя массива [размер]; где тип – базовый тип элементов массива; размер – количество его элементов.

Примеры объявлений:

int a[15]; // массив из 15 целочисленных элементов с именем a

float x[3]; // массив из трех элементов вещественного типа с именем х

Одномерный массив может быть представлен в следующим виде (табл. 1):

Таблица 1 – Структура одномерного массива

A[0]

A[1]

A[2]

A[3]

A[4]

A[5]

A[n-2]

A[n-1]

5

21

-3

10

0

15

 

15

-9

Выбор отдельного элемента одномерного массива осуществляется указанием имени массива и его индекса в квадратных скобках.

Например, в результате выполнения команды cout <<А[0]; на экран будет выведено число 5, являющееся значением первого элемента массива из табл. 1. А командой А[3]=5.5;

 

Ход выполнения работы

1.     Изучить теоретические основы работы с одномерными массивами.

2.     Выполнить задание из примера выполнения программы на одномерные массивы.

3.     Выполнить индивидуальное задание.

4.     Оформить отчет в тетради для практических работ.

5.     Ответить на контрольные вопросы.

 

Пример выполнения программы

Наберите код следующей программы и запустите её на выполнение. Объясните алгоритм её работы, смысл использования дополнительной переменной sum в этой программе.

Код программы:

#include <conio.h>

#include <iostream.h>

void main ()

{

int A[10], i;

for (i=0; i<10; i++)

{

cout << “input A[“<<i<<”]=”;

cin>> A[i];

};

int sum=0;

for (i=0; i<10; i++)

sum=sum+A[i];

cout << “\nSumma=”<<sum;

getch ();

}

 

Рабочее задание

1.     Напишите программу, запрашивающую у пользователя N вещественных чисел и выводящую на экран сумму чисел с чётными номерами.

2.     Выполните индивидуальное задание из практикума.

 

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

1.     Что такое одномерный массив?

2.     Для чего используются одномерные массивы? Как они описываются?

3.     Как в программе использовать значение конкретного элемента одномерного массива?

4.     Как называется номер элемента одномерного массива?

5.     Как можно заполнить одномерный массив?


 

ПРАКТИЧЕСКАЯ РАБОТА №2.5

Дисциплина: Основы программирования

Тема: Двумерные массивы

Цель: формирование ОК 1-9, ПК 1.1, 3.1, 3.2, 3.4

Задача: Изучить принципы программирования двумерного массива.

Материалы:

1.     Основы алгоритмизации и программирования. Практикум: учеб. пособие для студ. учреждений сред. проф. образования / И.Г. Семакин, А.П. Шестаков. – 2-е изд., стер. – М.: Издательский центр «Академия», 2014. – 144 с.

2.     Язык программирования С++. Специальное издание / Б.Страуструп – 3-е изд.

3.     Объектно-ориентированное программирование в С++. Классика Computer Scince. 4-е изд. – СПб.: Питер, 2017. – 928 с.

 

Основные понятия

Стандартом С определены многомерные массивы. Простейшая форма многомерного массива — двухмерный массив. Двумерный массив – это массив, каждый элемент которого имеет два индекса. Двумерный массив также называют матрицей.

Простейший пример двумерного массива – таблица.

Такие массивы имеют две размерности: номер строки, номер столбца (колонки).

Пример объявления двумерного массива:

int numbers[10][10]; // массив на 100 числовых элементов.

float test[5][5]; // массив на 25 вещественных чисел

Инициализация массивов - это присваивание элементам массива некоторых начальных значений. В Си++ для этих целей предусмотрены некоторые специальные возможности. Самый простой способ инициализации состоит в том, что при объявлении массива в фигурных скобках указывается список конкретных значений элементов массива.

При инициализации двумерного массива каждая размерность должна быть заключена в фигурные скобки.

Пример инициализации массива:

int temp[2][3] = { 3, 5, 4, 7, 4, 8 }

С элементами двумерного массива можно производить любые действия, предусмотренные для типа данных этих элементов.

Ход выполнения работы

1.     Изучить теоретические основы работы с двумерными массивами.

2.     Выполнить задание из примера выполнения программы на двумерные массивы.

3.     Выполнить индивидуальное задание.

4.     Оформить отчет в тетради для практических работ.

5.     Ответить на контрольные вопросы.

 

Пример выполнения программы

Наберите код следующей программы, запустите её на выполнение, выполните структуризацию программного кода и трассировку.

Задание для программирования. Задан двумерный массив b[10][10] целых чисел, заполненный случайными числами из отрезка [-10,10]. Найти и вывести на экран те элементы массива, которые больше заданного числа k.

Код программы:

#include <iostream.h>

#include <math.h>

#include <stdlib.h>

#include <time.h>

int main(void)

{

int b[10][10];

int i, j, k;

srand(time(NULL));

for (i=0; i<=9; i++)

{

for (j=0; j<=9; j++)

{

b [i][j]=rand()%21-10;

cout << b[i][j] << " ";

};

cout << endl;

};

cout << "Введите число k";

cin >> k;

for (i=0; i<=9; i++)

for (j=0; j<=9; j++)

if (b[i][j]>k) cout << b[i][j] << "\t";

cout << endl;

} //.

Рабочее задание

1.     Выполните индивидуальное задание из практикума.

2.     Оформите задачу в тетради для практических работ

 

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

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

2.     Каким способом можно инициализировать двумерный массив?

3.     Какие операции для работы с элементами массива вы знаете?

4.     Как осуществить ввод/вывод элементов в двумерный массив?

5.     Какие типы данных могут храниться в двумерном массиве?


 

ПРАКТИЧЕСКАЯ РАБОТА №2.6

Дисциплина: Основы программирования

Тема: Процедуры и функции

Цель: формирование ОК 1-9, ПК 1.1, 3.1, 3.2, 3.4

Задача: Ознакомиться с основами программирования процедур и функций, определяемых пользователем.

Материалы:

1.     Основы алгоритмизации и программирования. Практикум: учеб. пособие для студ. учреждений сред. проф. образования / И.Г. Семакин, А.П. Шестаков. – 2-е изд., стер. – М.: Издательский центр «Академия», 2014. – 144 с.

2.     Язык программирования С++. Специальное издание / Б.Страуструп – 3-е изд.

3.     Объектно-ориентированное программирование в С++. Классика Computer Scince. 4-е изд. – СПб.: Питер, 2017. – 928 с.

 

Ход выполнения работы

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

2.     Выполнить задание из примера.

3.     Выполнить индивидуальное задание.

4.     Оформить отчет в тетради для практических работ.

5.     Ответить на контрольные вопросы.

 

Пример выполнения программы

Наберите код программы, выполняющей вычисление суммы двух чисел с использованием фукнций, запустите её на выполнение, выполните структуризацию программного кода и трассировку.

Код программы:

1. Начало программы

2. Тело основной программы

3. Функции

Рабочее задание

1.     Выполните индивидуальное задание из практикума.

2.     Оформите задачу в тетради для практических работ

 

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

1.     Что такое подпрограмма? Каково ее назначение?

2.     Глобальные и локальные переменные.

3.     Формальные и фактические параметры.

4.     Назовите основные принципы структурного программирования.

5.     Как происходит передача параметров в подпрограмму, какие ап-

6.     Аппаратные и программные средства для этого используются?


 

ПРАКТИЧЕСКАЯ РАБОТА №2.7

Дисциплина: Основы программирования

Тема: Указатели

Цель: формирование ОК 1-9, ПК 1.1, 3.1, 3.2, 3.4

Задача: Ознакомиться с основами динамического программирвоания.

Материалы:

1.     Основы алгоритмизации и программирования. Практикум: учеб. пособие для студ. учреждений сред. проф. образования / И.Г. Семакин, А.П. Шестаков. – 2-е изд., стер. – М.: Издательский центр «Академия», 2014. – 144 с.

2.     Язык программирования С++. Специальное издание / Б.Страуструп – 3-е изд.

3.     Объектно-ориентированное программирование в С++. Классика Computer Scince. 4-е изд. – СПб.: Питер, 2017. – 928 с.

 

Ход выполнения работы

1.     Изучить теоретические основы работы с указателями.

2.     Выполнить задание из примера.

3.     Оформить отчет в тетради для практических работ.

4.     Ответить на контрольные вопросы.

 

Пример выполнения программы

Реализуйте указанный код, запустите программу, произведите трассировку, указывая в трассировочной таблице результат работы программы и результат ручной трассировки. В чем заключается смысл программы? Напишите комментарии к строкам операций над динамической памятью.

Выполните структуризацию программы, оформите ее в тетради для практических работ.

Код программы:

# include <iostream.h>

int main (void)

{

float x= 12.3, у;

float *p;

р=&х;

у=*p;

cout << "x=" << x << " y=" << y << endl;

 (*р)++;

cout << "x=" << x << " y=" << y << endl;

у=1+(*р)*у;

cout << "x=" << x << " y=" << y << endl;

}

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

1.     Какие операции применимы к динамической памяти?

2.     Как происходит задание переменных в динамической памяти?

3.     Какие операции работы с динамической памятью вам известны?


 

ПРАКТИЧЕСКАЯ РАБОТА №2.8

Дисциплина: Основы программирования

Тема: Сортировка массивов

Цель: формирование ОК 1-9, ПК 1.1, 3.1, 3.2, 3.4

Задача: Ознакомиться с методами сортировки массивов, отработать на практике один из методов.

Материалы:

4.     Основы алгоритмизации и программирования. Практикум: учеб. пособие для студ. учреждений сред. проф. образования / И.Г. Семакин, А.П. Шестаков. – 2-е изд., стер. – М.: Издательский центр «Академия», 2014. – 144 с.

5.     Язык программирования С++. Специальное издание / Б.Страуструп – 3-е изд.

6.     Объектно-ориентированное программирование в С++. Классика Computer Scince. 4-е изд. – СПб.: Питер, 2017. – 928 с.

 

Алгоритм сортировки методом пузырька

. Данный способ сортировки основан на последовательном сравнении соседних элементов массива. Есл и два соседних элемента расположены не в нужной последовательности, то меняем их местами. Так повторяем до тех пор, пока в очередном проходе не сделаем ни одного обмена, т.е. массив будет упорядоченным.

Перестановка элементов производится всегда через дополнительную промежуточную переменную.

Для решения задачи используется два цикла:

-       Первый цикл – внешний - начинается с 0 элемента и до предпоследнего

-       Второй цикл – внутренний - начинается со следующего элемента до последнего.

 

Реализация алгоритма сортировки

Задание: Дан массив из 10 элементов, индексы 0 – 9. Выполнить его сортировку по возрастанию.

Определим цикли для сортировки:

Первый цикл 0 - 8 for ( i = 0 ; i < 9 ; i + + )

Второй цикл 1 - 9 for ( j = i + 1 ; j < 1 0 ; j + + )

Во внутреннем цикле сравниваются значения и, если, условие сравнения выполняется, тогда элементы меняются местами.

Обратите внимание, что при данном алгоритме сортировки:

1.       Массив сортируется по возрастанию.

2.       В результате полного прохода внутреннего цикла, первым встанет элемент с самым большим значением.

3.       Если поменять знак с > на <, то массив сортируется по убыванию

Код программы:

1. Блок сортировки

 

 

Ход выполнения работы

1.     Изучить методы сортировки массивов.

2.     Выполнить рабочее задание.

3.     Оформить отчет в тетради для практических работ.

4.     Ответить на контрольные вопросы.

 

Рабочее задание

1.     Объявите одномерный массив для 10 элементов.

2.     Заполните случайными значениями от 1 до 10 (используйте инструкцию)
#include<cstdlib> //библиотека случайного числа
//-------------------------------------------------------------------------------
k=rand()%10+1; //вычислить случайное число 1-10

3.     Отсортируйте массив по возрастанию, по убыванию

4.     Выведите исходный массив

5.     Выведите отсортированные массивы.

 

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

4.     Какие методы сортировки вам знакомы?

5.     Поясните метод сортировки «пузырь».

6.     Поясните метод сортировки перебором.

7.     Поясните метод сортировки Шелла.

8.     Для чего используется сортировка? В каких случаях затраты на сортировку оправданы?


 

ПРАКТИЧЕСКАЯ РАБОТА №2.9

Дисциплина: Основы программирования

Тема: Динамические массивы

Цель: формирование ОК 1-9, ПК 1.1, 3.1, 3.2, 3.4

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

Материалы:

1.     Основы алгоритмизации и программирования. Практикум: учеб. пособие для студ. учреждений сред. проф. образования / И.Г. Семакин, А.П. Шестаков. – 2-е изд., стер. – М.: Издательский центр «Академия», 2014. – 144 с.

2.     Язык программирования С++. Специальное издание / Б.Страуструп – 3-е изд.

3.     Объектно-ориентированное программирование в С++. Классика Computer Scince. 4-е изд. – СПб.: Питер, 2017. – 928 с.

 

Краткие теоретические сведения

При традиционном определении массива:

тип имя_массива [количество_элементов];

общее количество памяти, выделяемой под массив, задается определением и равно количество_элементов * sizeof(тип).

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

Формирование массивов с переменными размерами можно организовать с помощью указателей и средств динамического распределения памяти двумя способами:

1)       с использованием библиотечных функций, описанных в заголовочных файлах alloc.h и stdlib.h (стандартный Си);

2)       с использованием операций new и delete (Си++).

 

Формирование динамических массивов с использованием библиотечных функций

Для выделения и освобождения динамической памяти используются функции

Функция

Прототип и краткое описание

malloc

void * malloc(unsigned s)

Возвращает указатель на начало области динамической памяти длиной в s байт, при неудачном завершении возвращает NULL

calloc

void * calloc(unsigned n, unsigned m)

Возвращает указатель на начало области динамической памяти для размещения n элементов длиной по m байт каждый, при неудачном завершении возвращает NULL

realloc

void * realloc(void * p, unsigned s)

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

free

void *free(void p)

Освобождает ранее выделенный участок динамической памяти, р – адрес первого байта

 

Пример:

Функция для формирования одномерного динамического массива

int * make_mas(int n)

(

int *mas;

mas=(int*)malloc(n*sizeof(int));

for(int i=0;i<n;i++)

mas[i]=random(10);

return mas;

}

Для выделения памяти используется функция malloc, параметром которой является размер выделяемого участка памяти равный n*sizeof(int). Так как функция malloc возвращает нетипизированный указатель void*, то необходимо выполнить преобразование полученного нетипизированного указателя в указатель int*.

Освободить выделенную память можно функцией free(mas).

 

Формирование динамических массивов с использованием операций new и delete

Для динамического распределения памяти используются операции new и delete. Операция

new имя_типа

или

new имя_типа инициализатор

позволяет выделить и сделать доступны свободный участок памяти, размеры которого соответствуют типу данных, определяемому именем типа. В выделенный участок заносится значение определяемое инициализатором, который не является обязательным параметром. В случае успешного выделения памяти операция возвращает адрес начала выделенного участка памяти, если участок не может быть выделен, то возвращается NULL.

Примеры:

1) int *i;

   i=new int(10);

2) float *f;

   f=new float;

3) int *mas=new[5];

В примерах 1, 2 показано как выделить память под скалярные переменные, пример 3 показывает выделение памяти под массив переменных.

Операция delete указатель освобождает участок памяти ранее выделенный операцией new.

Пример:

Функция для формирования двумерного динамического массива

int ** make_matr(int n)

{

int **matr;

int i,j;

matr=new int*[n];

for (i=0;i<n;i++)

{

matr[i]=new int[n];

for (j=0;j<n;j++)

matr[i][j]=random(10);

}

return matr;

}

При формировании матрицы сначала выделяется памяти для массива указателей на одномерные массивы, а затем в цикле с параметром выделяется память под n одномерных массивов.

**matr

*matr[1]

*matr[2]

*matr[3]

. . . .

*matr[n]

 

 

 

 

 

 

 

Чтобы освободить память необходимо выполнить цикл для освобождения одномерных массивов

for(int i=0;i<n;i++)

delete matr[i];

После этого освобождаем память на которую указывает указатель matr

delete [] matr;

Ход выполнения работы

Написать программу, в которой создаются динамические массивы и  выполнить их обработку в соответствии со своим вариантом:

1. Ввести размер массива;

2.Сформировать массив с помощью операции new или библиотечных функций malloc (calloc);

3.Заполнить массив (можно с помощью датчика случайных чисел);

4.Выполнить задание варианта, сформировать новый массив(ы)-результат(ы);

5.Напечатать массив(ы)-результат(ы);

6.Удалить динамические массивы с помощью операции delete или библиотечной функции free.

 

Рабочее задание

1.     Сформировать одномерный массив Удалить из него элемент с заданным номером, добавить элемент с заданным номером;

2.     Сформировать одномерный массив. Удалить из него элемент с заданным ключом, добавить элемент с заданным ключом;

3.     Сформировать одномерный массив. Удалить из него К элементов, начиная с заданного номера, добавить элемент с заданным ключом;

4.     Сформировать одномерный массив. Удалить из него элемент с заданным номером, добавить К элементов, начиная с заданного номера;

5.     Сформировать одномерный массив. Удалить из него К элементов, начиная с заданного номера, добавить К элементов, начиная с заданного номера;

6.     Сформировать двумерный массив. Удалить из него строку с заданным номером;

7.     Сформировать двумерный массив. Удалить из него столбец с заданным номером;

8.     Сформировать двумерный массив. Добавить в него строку с заданным номером;

9.     Сформировать двумерный массив. Добавить в него столбец с заданным номером;

10. Сформировать двумерный массив. Удалить из него строку и столбец с заданным номером.

11. Сформировать двумерный массив. Добавить в него строку и столбец с заданным номером.

12. Сформировать двумерный массив. Удалить из него все строки, в которых встречается заданное число.

13. Сформировать двумерный массив. Удалить из него все столбцы, в которых встречается заданное число.

14. Сформировать двумерный массив. Удалить из него строку и столбец, на пересечении которых  находится минимальный элемент.

15. Сформировать двумерный массив. Удалить из него строку и столбец, на пересечении которых  находится максимальный элемент.

 

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

1.     Как организуется работа с динамической памятью?

2.     Какие операции используются для работы с динамической памятью?

3.     Как организовать динамический массив?

4.     Как удалить элемент массива, заданного динамически?

5.     Как добавить элемент в массив, заданный динамически?

 


 

ПРАКТИЧЕСКАЯ РАБОТА №2.10

Дисциплина: Основы программирования

Тема: Строки типа char

Цель: формирование ОК 1-9, ПК 1.1, 3.1, 3.2, 3.4

Задача: Изучить приемы работы со строками символов.

Ход выполнения работы

1.      Введите представленную ниже программу в среду программирования:

# include <stdio.h>

 

int main()

{

char str[80];

printf("Введите строку длиной не более 80 символов");

gets(str);

printf(" Вы ввели строку %s\n",str);

printf("Введите еще одну строку ");

scanf("%s",str);

printf(" Вы ввели строку ");

puts(str);

} //.

2.      Объясните ход её работы.

3.      Введите указанную ниже программу в среду программирования:

# include <stdio.h>

# include <string.h>

int main()

{

char s1[20], s2[20];

strcpy(sl," Hello,");

strcpy(s2," World !");

puts(sl); puts(s2);

strcat(sl,s2);

puts(sl);

} //.

2.      Что выполняет данная программа?

3.      Реализуйте программу для вашего индивидуального задания.

 

Рабочее задание

Выполните индивидуальное задание из практикума.

 

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

1.      Как можно задать строку?

2.      Какие функции для работы со строками вам известны?

3.      Как произвести копирование строк?

4.      Как добавить информацию в начало/конец строки?

5.      Какие библиотеки используются для работы со строками? Что содержат данные библиотеки?


 

ПРАКТИЧЕСКАЯ РАБОТА №2.11

Дисциплина: Основы программирования

Тема: Обработка текстовых файлов

Цель: формирование ОК 1-9, ПК 1.1, 3.1, 3.2, 3.4

Задача: Изучить приемы работы с файлами.

Материалы:

1.     Основы алгоритмизации и программирования. Практикум: учеб. пособие для студ. учреждений сред. проф. образования / И.Г. Семакин, А.П. Шестаков. – 2-е изд., стер. – М.: Издательский центр «Академия», 2014. – 144 с.

2.     Язык программирования С++. Специальное издание / Б.Страуструп – 3-е изд.

3.     Объектно-ориентированное программирование в С++. Классика Computer Scince. 4-е изд. – СПб.: Питер, 2017. – 928 с.

 

Ход выполнения работы

1.     Введите представленную ниже программу в среду программирования, выполните ее структуризацию.

2.     Объясните ход работы программы.

3.     Реализуйте программу для вашего индивидуального задания.

4.     Оформите отчет

5.     Ответьте на контрольные вопросы

 

Пример выполнения программы

#include <iostream>

 

#include <fstream> // Сообщение для файлового ввода-вывода

using namespace std;

int main()

{

 int a1,a2,a3;

 

 ifstream in; // Объявление входной потоковой переменной,

// необходимой для считывания данных из файла.

 ofstream out; // Объявление выходной потоковой переменной,

 // необходимой для записи данных в файл

 

 in.open("pr11.txt"); // Устанавливается соответствие потоковой

 // переменной in c физическим файлом

 // pr11.txt, находящимся в той же директории

 out.open("pr11.txt"); // Устанавливается соответствие потоковой

 // переменной out c физическим файлом (если файла нет, то открывает файл) pr11.txt,

 // находящимся в той же директории

 

 in >> a1 >> a2 >> a3; // Последовательное считывание чисел из файла

 cout << a1 << " " << a2 << " " << a3;

out << a1 << " " << a2 << " " << a3; //Последовательная запись чисел в файл

 return 0;

}

Рабочее задание

Выполните индивидуальное задание из практикума.

 

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

1.     Какие библиотеки для работы с файлами вам известны?

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

3.     Дайте определение понятию «режим открытия файла».

4.     Какие режимы открытия файлов вы знаете?

5.     Какие операции можно производить с файлами?


 

ПРАКТИЧЕСКАЯ РАБОТА №2.12

Дисциплина: Основы программирования

Тема: Структуры

Цель: формирование ОК 1-9, ПК 1.1, 3.1, 3.2, 3.4

Задача: Изучить приемы работы с структурами.

Материалы:

1.     Основы алгоритмизации и программирования. Практикум: учеб. пособие для студ. учреждений сред. проф. образования / И.Г. Семакин, А.П. Шестаков. – 2-е изд., стер. – М.: Издательский центр «Академия», 2014. – 144 с.

2.     Язык программирования С++. Специальное издание / Б.Страуструп – 3-е изд.

3.     Объектно-ориентированное программирование в С++. Классика Computer Scince. 4-е изд. – СПб.: Питер, 2017. – 928 с.

 

Краткая теория

Объектно-ориентированное программирование (ООП) – это технология программирования, основанная на идее объединения в одной структуре данных и действий, которые производятся с этими данными.

Одной из наиболее простых конструкций, позволяющей объединить множество данных и действий, является структура. В общем виде структура может быть записана как:

struct имя_структуры{

имя_типа1 имя_поля1;

имя_типаN имя_поляN;

тип_функции1 имя_функции1(список_аргументов1);

тип_функцииM имя_функцииM(список_аргументовM);

}

Заданные в структуре поля, как правило, называются свойствами структуры, а функции – методами структуры.

Определение структурной переменной задается в виде:

имя_структуры имя_переменной;

Пример:

#include <iostream>

struct Summirovanie {

double a;

double b;

double sum(){ return a + b; }

}

void main(){

Summirovanie res; //Определим структурную переменную

res. a = 5; res. b = 8; //Зададим значения переменных в res

double c = res. sum(); //Вызовем функцию sum, которая вернет 13

}

 

Ход выполнения работы

1.     Введите представленную ниже программу в среду программирования, выполните ее структуризацию.

2.     Исправьте ошибки программы.

3.     Объясните ход работы программы.

4.     Реализуйте программу для вашего индивидуального задания.

5.     Оформите отчет

6.     Ответьте на контрольные вопросы

 

Пример выполнения программы

#include <iostream.h>

#include <conio.h>

struct part

{

 int modelnumber;

 int partnumber;

 float cost;

 };

void main ()

{

 //инициализация переменной в момент ее объявления, первая из ве-

личин

// присваивается первому полю, вторая – второму и т.д. через пере-

числение

part part1={6244, 373, 217.55}

//объявление второй структурной переменной

part part2;

//вывод полей первой переменной

cout<< “model “<<part1. modelnumber;

cout<< “detal “<<part1. partnumber;

cout<< “Stoimost “<<part1. cost;

//присваивание значений одной структурной переменной другой

part2=part1;

//вывод полей второй переменной

cout<< “model “<<part2. modelnumber;

cout<< “detal “<<part2. partnumber;

cout<< “Stoimost “<<part2. cost;

getch();

}

Рабочее задание

Выполните индивидуальное задание из практикума.

 

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

1.     Что объединяет структура?

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

3.     Выделяется ли память под переменную при определении структуры?

4.     Сколько переменных можно объединить в структуру?

5.     Приведите не менее 3 примеров переменных, которые можно представить в виде структуры.


 

ПРАКТИЧЕСКАЯ РАБОТА №2.13

Дисциплина: Основы программирования

Тема: Классы

Цель: формирование ОК 1-9, ПК 1.1, 3.1, 3.2, 3.4

Задача: Получить практические навыки реализации классов на С++

Материалы:

1.     Основы алгоритмизации и программирования. Практикум: учеб. пособие для студ. учреждений сред. проф. образования / И.Г. Семакин, А.П. Шестаков. – 2-е изд., стер. – М.: Издательский центр «Академия», 2014. – 144 с.

2.     Язык программирования С++. Специальное издание / Б.Страуструп – 3-е изд.

3.     Объектно-ориентированное программирование в С++. Классика Computer Scince. 4-е изд. – СПб.: Питер, 2017. – 928 с.

 

Краткая теория

Класс – это абстракция множества предметов реального мира, имеющих одни и те же характеристики (свойства) и способных выполнять один и тот же набор действий (методов, функций, процедур). Другими словами класс – это совокупность методов и свойств множества однотипных предметов реального мира.

Под классом также понимается определенный пользователем тип данных (см. ниже), который обладает внутренними данными и методами для работы с ними в форме процедур или функций. В общем случае класс описывается следующим образом:

class имя_класса{

модификатор_доступа1:

имя_типа1 имя_поля1;

имя_типаN имя_поляN;

модификатор_ доступа2:

имя_типа1 имя_поляN+1;

имя_типаN имя_поляN+M;

модификатор_ доступа3:

тип_метода1 имя_ метода 1(список_аргументов1);

тип_ метода K имя_ метода K(список_аргументовK);

модификатор_ доступаL:

тип_ метода K+1 имя_ метода K+1(список_аргументовK+1);

тип_ метода K+H имя_ метода K+H(список_аргументовK+H);

}

Модификаторы доступа могут быть трех разновидностей:

private, protected или public.

1. private (закрытый, внутренний член класса) – обращения к члену класса допускаются только из методов того класса, в котором этот член определён. Любые наследники класса уже не смогут получить доступ к этому члену. Наследование по типу private запрещает доступ из дочернего класса ко всем членам родительского класса, включая даже public-члены.

2. protected (защищённый, внутренний член иерархии классов) – обращения к члену класса допускаются из методов того класса, в котором этот член определён, а также из любых методов его классов-наследников. Наследование по типу protected делает все public-члены родительского класса protected-членами дочернего наследника.

3. public (открытый член класса) – обращения к члену допус-каются из любого кода. Наследование по типу public не меняет модификаторов родительского класса.

Идея классов является основой ООП и отражает строение объектов реального мира, поскольку каждый предмет или процесс обладает набором характеристик или отличительных черт, иными словами, свойствами и поведением. Классы образуют иерархию на принципах наследования.

Пример:

#include <iostream>

class Summirovanie {

private:

double a, b;

public:

void seta(double aa){a=aa;}

void setb(double bb){b=bb;}

double sum(){ return a + b; }

};

void main(){

Summirovanie res;  //Определим структурную переменную

res. seta(5); res. setb(8);//Зададим значения переменных в res

double c = res. sum(); //Вызовем функцию sum,

 //которая вернет значение 13

}

Объект (экземпляр класса) – некоторая сущность в виртуальном пространстве, обладающая определённым состоянием и поведением, имеющая заданные значения свойств (атрибутов) и операций над ними (методов). Объекты принадлежат одному или нескольким классам, которые в свою очередь описывают свойства и методы, которые будут доступны объекту.

Объекты используют для представления (моделирования) конкретных сущностей реального мира. Например, объектом может быть ваша стиральная машина со следующим набором атрибутов: компания-производитель «Вятка», наименование «Вятка-автомат», серийный номер изделия ВЯТ454647, емкость 20 л. Объекты взаимодействуют между собой, посылая и получая сообщения.

Сообщение – это запрос на выполнение действия, содержащий набор необходимых параметров. Механизм сообщений реализуется с помощью вызова соответствующих функций или методов классов.

При добавлении в класс любой операции (метода) должна быть задана её сигнатура.

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

Интерфейс (спецификация) – это множество сигнатур всех операций, определенных для объекта. Интерфейс описывает все множество запросов, которые можно отправить объекту.

Тип данных – это имя, используемое для обозначения конкретного интерфейса (имя класса). Говорят, что объект имеет тип данных String (данный тип взят в качестве примера), если он готов принимать запросы на выполнение любых операций, определенных в интерфейсе с именем String.

Ход выполнения работы

1.     Реализовать класс с методами Read (ввод с клавиатуры), Display (вывод на экран) и методами, указанными в варианте задания. Все свойства класса должны быть закрытыми (private), все методы класса – открытыми (public).

2.     Оформить отчет.

3.     Ответить на контрольные вопросы

Рабочее задание

1.     Комплексное число представляется парой чисел (a, b), где a – действительная часть, b – мнимая часть. Реализовать класс Complex для работы с комплексными числами с методами: 1) Add – сложение: (a, b) + (c, d) = (a+b, c+d); 2) Sub – вычитание: (a, b) – (c, d) = (ab, cd); 3) Mul – умножение: (a,b)x(c,d) =(acbd, ad+bc); 4) Div – деление: (a, b)/(c, d) = (ac + bd, bcad) / (c2 + d2).

2.     Реализовать класс Vector3D – вектор в трехмерной системе координат, с методами сложения и вычитания векторов, скалярного произведения векторов, умножения вектора на скаляр.

3.     Реализовать класс Money для работы с денежными суммами. Число должно быть задано двумя полями: одно – для рублей, другое – для копеек. Требуется реализовать сложение, вычитание сумм, деление суммы на вещественное число и операцию сравнения двух денежных сумм.

4.     Реализовать класс Angle для работы с углами на плоскости, задаваемыми величиной в градусах и минутах. Требуется реализовать операции: перевода величины угла в радианы, увеличение и уменьшение угла на заданную величину, приведение величины угла к диапазону 0÷360.

5.     Реализовать класс Point для работы с точками на плоскости в декартовой системе координат. Требуется реализовать операции: изменение координаты x на заданную величину, изменение координаты y на заданную величину, определение расстояния до начала координат, вычисление расстояния между двумя точками.

6.     Рациональная (несократимая) дробь может быть представлена парой чисел (a, b), где a – числитель, b – знаменатель. Реализовать класс Rational для работы с рациональными дробями с методами: 1) Add – сложение: (a, b) + (c, d) = (ad + bc, bd); 2) Sub – вычитание: (a, b) – (c, d) = (adbc, bd); 3) Mul – умножение: (a, b)x(c, d) = (ac, bd); 4) Div – деление: (a, b)/(c, d) = (ad, bc); 5) Reduce – приватная функция сокращения дроби, которая обязательно вызывается при выполнении арифметических операций.

7.     Реализовать класс Date для работы с датами в формате «год.месяц.день». Дата представляется структурой с тремя полями: «год», «месяц» и «день». Требуется реализовать следующие операции: вычисление даты через заданное количество дней, вычитание заданного количества дней из даты, вычисление количества дней между датами, определение високосности года.

8.     Реализовать класс Time для работы с временем в формате «час.минута.секунда». Время представляется структурой с тремя полями для часа, минуты и секунды. Требуется реализовать следующие операции: сложение времени и заданного количества секунд, вычитание из времени заданного количества секунд, перевод времени в секунды, перевод времени в минуты (с округлением до целой минуты).

9.     Реализовать класс Account для работы с банковским счетом. В классе должно быть четыре поля: фамилия владельца, номер счета, процент начисления и сумма в рублях. Требуется реализовать следующие операции: снять некоторую сумму со счета, положить некоторую сумму на счет, начислить проценты, перевести сумму вклада в доллары.

10. Реализовать класс Bankomat для работы с банкоматом. В классе должны быть следующие поля: идентификационный номер банкомата, остаточная сумма денег в банкомате, минимальная и максимальная суммы, которые можно снять клиенту в один день. Требуется реализовать следующие операции: загрузка купюр в банкомат, снятие определенной суммы денег (при этом необходимо выполнять проверку на корректность снимаемой суммы), изменение максимальной суммы, которую можно снять клиенту в один день.

11. Реализовать класс Goods для работы с товаром. В классе должны быть следующие поля: наименование товара, дата оформления, цена товара, количество единиц товара, номер накладной, по которой товар поступил на склад. Требуется реализовать следующие операции: изменение цены товара, изменение количества товара (увеличение и уменьшение), вычисление стоимости товара.

12. Реализовать класс Cursor для работы с координатами курсора. В классе должны быть следующие поля: координаты курсора (по горизонтали и вертикали), вид курсора – горизонтальный или вертикальный, размер курсора (целое число от 1 до 15). Требуется реализовать операции: изменения координат курсора, изменения вида курсора, изменения размера курсора.

13. Реализовать класс Binary для работы с двоичными числами. В классе должно быть одно поле – число в двоичной форме записи. Требуется реализовать операции: сдвиг влево на заданное количество битов, сдвиг вправо на заданное количество битов, логические операции (and, or, xor, not).

14. Реализовать класс Books для работы с книгами и журналами. В классе должны быть следующие поля: количество книг, количество журналов, максимальное количество печатных изданий (книг и журналов). Требуется реализовать следующие операции: изменение количества книг, изменение количества журналов и изменение количества печатных изданий.

15. Реализовать класс Backpack для работы с вещами, сложенными в рюкзак. В классе должно быть два поля – количество вещей и вес рюкзака. Требуется реализовать следующие операции: изменение количества вещей, изменение веса рюкзака, сравнение двух рюкзаков по количеству вещей, сравнение двух рюкзаков по весу.

16. Реализовать класс Triangle для представления треугольника. Поля данных должны включать углы и стороны. Требуется реализовать операции вычисления: площади, периметра, а также определения вида треугольника (равносторонний, равнобедренный или прямоугольный).

17. Реализовать класс Avto для работы с автомобилем. В классе должно быть четыре поля – объем бензобака, объем бензина в бензобаке, объем масла, пробег автомобиля. Требуется реализовать операции изменения объема бензина, объема масла и пробега автомобиля. В каждом методе должна осуществляться проверка на корректность данных.

 

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

1.     Дайте определение класса.

2.     Из каких элементов состоит класс?

3.     Как объявить класс?


 

ПРАКТИЧЕСКАЯ РАБОТА №2.14

Дисциплина: Основы программирования

Тема: Конструкторы и деструкторы

Цель: формирование ОК 1-9, ПК 1.1, 3.1, 3.2, 3.4

Задача: Расширить представление объектно-ориентированного программирования средствами С++

Материалы:

1.     Основы алгоритмизации и программирования. Практикум: учеб. пособие для студ. учреждений сред. проф. образования / И.Г. Семакин, А.П. Шестаков. – 2-е изд., стер. – М.: Издательский центр «Академия», 2014. – 144 с.

2.     Язык программирования С++. Специальное издание / Б.Страуструп – 3-е изд.

3.     Объектно-ориентированное программирование в С++. Классика Computer Scince. 4-е изд. – СПб.: Питер, 2017. – 928 с.

 

Краткая теория

Конструкторы (деструкторы) – это специальные методы классов, которые вызываются автоматически и задают последовательность действий, выполняемых при создании (уничтожении) экземпляров классов. Имя конструктора совпадает с именем класса, имя деструктора такое же, но с добавкой перед именем символа ~. Конструкторы и деструкторы не могут быть описаны как функции, возвращающие какое-либо значение, и даже как void. В классе можно реализовать несколько конструкторов, отличающихся списком аргументов, но деструктор в любом классе можно реализовать только один. Деструктор не имеет аргументов.

 

Пример выполнения программы с использованием конструктора/деструктора

#include <iostream>

class INC

{

private:

int i;

public:

INC(){i=0;} //Конструктор по умолчанию (без аргументов)

INC(int inc){i=inc;} //Конструктор с 1 аргументом

void Inc(){i++;} //Увеличение на 1 значения переменной i

int GetInc(){ //Функция, возвращающая значение переменной i

return i;

}

};

void main(){

INC k; //При создании k вызовется конструктор по умолчанию

INC h(5); //При создании k вызовется конструктор с 1 аргументом

k. Inc(); //В объекте k поле i станет равно 1

k. Inc(); //В объекте k поле i станет равно 2

h. Inc() // В объекте h поле i станет равно 6

}

Ход выполнения работы

1.     Выполнить задание практической работы № 2.13, реализовав для каждого класса деструктор и три конструктора: без аргументов, копирования и инициализации.

2.     Оформить отчет.

3.     Ответить на контрольные вопросы

 

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

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

2.     Дайте определение деструктора.

3.     Как реализовать конструктор/деструктор?


 

ПРАКТИЧЕСКАЯ РАБОТА №2.15

Дисциплина: Основы программирования

Тема: Перегрузка операций

Цель: формирование ОК 1-9, ПК 1.1, 3.1, 3.2, 3.4

Задача: Расширить представление объектно-ориентированного программирования средствами С++ в области перегрузки операторов.

Материалы:

1.     Основы алгоритмизации и программирования. Практикум: учеб. пособие для студ. учреждений сред. проф. образования / И.Г. Семакин, А.П. Шестаков. – 2-е изд., стер. – М.: Издательский центр «Академия», 2014. – 144 с.

2.     Язык программирования С++. Специальное издание / Б.Страуструп – 3-е изд.

3.     Объектно-ориентированное программирование в С++. Классика Computer Scince. 4-е изд. – СПб.: Питер, 2017. – 928 с.

 

Ход выполнения работы

1.     Реализуйте предложенный программный код

2.     Исправьте ошибки программы

3.     Сделайте вывод о работе программы

4.     Оформите отчет.

5.     Ответить на контрольные вопросы

 

Пример выполнения программы

#include <iostream>

#include <string.h>

 

using namespace std;

 

class StringsWork

{

private:

    char str[256];//строка, которая доступна классу

public:

    StringsWork()//конструктор в котором очистим строку класса от мусора

    {

        for(int i = 0; i < 256; i++)  str[i] = '\0';

    }

 

    void operator +(char*);//прототип метода класса в котором мы перегрузим оператор +

    void getStr();//метод вывода данных на экран

};

 

void StringsWork::operator +(char *s) //что должен выполнить оператор +

{

    strcat(str, s); //сложение строк

}

 

void StringsWork::getStr()

{

    cout << str << endl << endl;//вывод символьного массива класса на экран

}

 

int main()

{

setlocale(LC_ALL, "rus");

 

    char *str1 = new char [strlen("У лукоморья дуб зелёный;\n")+1]; //выделим память для строк

    char *str2 = new char [strlen("Всё ходит по цепи кругом;\n")+1];

    char *str3 = new char [strlen("И днём и ночью кот учёный\n")+1];

    char *str4 = new char [strlen("Златая цепь на дубе том:\n")+1];

 

    strcpy(str1,"У лукоморья дуб зелёный;\n");//инициализируем

    strcpy(str2,"Всё ходит по цепи кругом;\n");

    strcpy(str3,"И днём и ночью кот учёный\n");

    strcpy(str4,"Златая цепь на дубе том:\n");

 

        cout << "1) " << str1;

        cout << "2) " << str2;

        cout << "3) " << str3;

        cout << "4) " << str4 << endl;

 

    StringsWork story;//создаем объект и добавяем в него строки с помощью перегруженного +

        story + str1;

        story + str4;

        story + str3;

        story + str2;

 

        cout << "========================================" << endl;

        cout << "Стих, после правильного сложения строк: " << endl;

        cout << "========================================" << endl << endl;

    story.getStr();

 

    //Отмечу, что для числовых типов данных оператор плюс будет складывать значения, как и должен

    int a = 5;

    int b = 5;

    int c = 0;

 

    c = a + b;

    cout << "========================================" << endl << endl;

    cout << "a = " << a << endl  << "b = " << b << endl;

    cout << "c = " << a << " + " << b << " = " << c << endl << endl;

 

    delete [] str4;//освободим память

    delete [] str3;

    delete [] str2;

    delete [] str1;

 

    return 0;

}

 

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

1.     Что выполняет данная программа?

2.     В чем заключается суть перегрузки операций?

3.     Как выполняется перегрузка операций в данной программе?


 

ПРАКТИЧЕСКАЯ РАБОТА №2.16

Дисциплина: Основы программирования

Тема: Основные принципы ООП

Цель: формирование ОК 1-9, ПК 1.1, 3.1, 3.2, 3.4

Задача: Ознакомиться с основными принципами ООП, их применением на практике.

Материалы:

1.     Основы алгоритмизации и программирования. Практикум: учеб. пособие для студ. учреждений сред. проф. образования / И.Г. Семакин, А.П. Шестаков. – 2-е изд., стер. – М.: Издательский центр «Академия», 2014. – 144 с.

2.     Язык программирования С++. Специальное издание / Б.Страуструп – 3-е изд.

3.     Объектно-ориентированное программирование в С++. Классика Computer Scince. 4-е изд. – СПб.: Питер, 2017. – 928 с.

 

Краткая теория

Основными принципами или свойствами ООП являются инкапсуляция, наследование и полиморфизм.

Инкапсуляция – свойство языка программирования, позволяющее пользователю не задумываться о сложности объекта (то, что у него внутри), а взаимодействовать с ним посредством предоставляемого интерфейса (публичных (public, см. выше) методов и свойств), а также объединить в единое целое и защитить как данные (свойства), так и алгоритмы обработки этих данных. При этом пользователю предоставляется только спецификация (интерфейс) объекта.

Наследование – свойство языка программирования, позволяющее описать новый класс на основе уже существующего (родительского), при этом свойства и функциональность родительского класса заимствуются новым классом. Класс, от которого произошло наследование, называется базовым или родительским. Классы, которые произошли от базового, называются потомками, наследниками или производными классами. Из определения следует, что класс-наследник реализует интерфейс базового класса, что позволяет обращаться с объектами класса-наследника точно так же, как с объектами базового класса.

Полиморфизм – возможность объектов с одинаковым интерфейсом иметь различную реализацию. Язык программирования поддерживает полиморфизм, если классы с одинаковой спецификацией могут иметь различную реализацию (например, реализация класса может быть изменена в процессе наследования).

 

Пример выполнения программы

#include <iostream>

class A {

public: //Инкапсуляция

int a;

void Print(){cout<<"a = "<<a;}

};

class B : public A { //Наследование

private: //Инкапсуляция

int b;

public: //Инкапсуляция

B(){b=0;}

void Print(){ //Полиморфизм

A::Print();

cout<<"b = "<<b;

}

};

Ход выполнения работы

1.     Создать базовый класс Human и наследуемый класс, представленный в варианте задания.

2.     В классе Human должны присутствовать следующие поля: фамилия, имя, отчество, пол, год рождения, прописка. Для каждого поля должны быть реализованы два метода: вывод и задание значения поля.

3.     В наследуемом классе реализовать минимум два конструктора, деструктор, пять методов и три поля, характерных для соответствующего класса. В каждом классе должно быть не меньше трех полей.

4.     Оформить отчёт.

5.     Ответить на контрольные вопросы

 

Рабочее задание

1.     Реализовать наследуемый класс Student (студент).

2.     Реализовать наследуемый класс Teacher (преподаватель).

3.     Реализовать наследуемый класс Doctor (врач).

4.     Реализовать наследуемый класс Driver (водитель).

5.     Реализовать наследуемый класс Translator (переводчик).

6.     Реализовать наследуемый класс Programmer (программист).

7.     Реализовать наследуемый класс Cosmonaut (космонавт).

8.     Реализовать наследуемый класс Firefighter (пожарник).

9.     Реализовать наследуемый класс Sportsman (спортсмен).

10. Реализовать наследуемый класс Pilot (летчик).

11. Реализовать наследуемый класс Geologist (геолог).

12. Реализовать наследуемый класс Operator (оператор).

13. Реализовать наследуемый класс Speaker (диктор).

14. Реализовать наследуемый класс Painter (маляр).

15. Реализовать наследуемый класс Miner (шахтер).

16. Реализовать наследуемый класс Dispatcher (диспетчер).

17. Реализовать наследуемый класс Stewardess (стюардесса).

18. Реализовать наследуемый класс Ballerina (балерина).

19. Реализовать наследуемый класс Lawyer (адвокат).

20. Реализовать наследуемый класс Milkmaid (доярка).

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

1.     Какие принципы ООП вы знаете?

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

3.     В чем заключается принцип полиморфизма?


ПРАКТИЧЕСКАЯ РАБОТА №2.17

Дисциплина: Основы программирования

Тема: Наследование с использованием абстрактного базового класса

Цель: формирование ОК 1-9, ПК 1.1, 3.1, 3.2, 3.4

Задача: Ознакомиться с основными принципами ООП, их применением на практике.

Материалы:

1.     Основы алгоритмизации и программирования. Практикум: учеб. пособие для студ. учреждений сред. проф. образования / И.Г. Семакин, А.П. Шестаков. – 2-е изд., стер. – М.: Издательский центр «Академия», 2014. – 144 с.

2.     Язык программирования С++. Специальное издание / Б.Страуструп – 3-е изд.

3.     Объектно-ориентированное программирование в С++. Классика Computer Scince. 4-е изд. – СПб.: Питер, 2017. – 928 с.

 

Краткая теория

Абстрактный класс – базовый класс, который не предполагает создания экземпляров. Абстрактные классы реализуют на практике один из принципов ООП – полиморфизм. Класс считается абстрактным, если в нем реализован хотя бы один абстрактный метод. Абстрактный метод не реализуется для класса, в котором описан, однако должен быть реализован для его неабстрактных наследуемых классов.

Абстрактный метод имеет вид:

virtual тип_метода имя_метода(список_аргументов) = 0;

 

Ход выполнения работы

1.     Реализуйте программный код, представленный в примере.

2.     Исправьте ошибки и запустите программу на выполнение.

3.     Что выполняет данная программа?

4.     Реализуйте индивидуальное задание: Выполнить задание практической работы № 2.16, при этом базовый класс Human сделать абстрактным. Помимо наследуемого класса, представленного в варианте для задания № 2.16, реализовать второй наследуемый класс, представленный в варианте для задания № 2.17.

5.     В программе создать массив типа Human, заполнить массив объектами обоих наследуемых классов, продемонстрировать пример работы над объектами из этого массива.

6.     Оформить отчёт.

7.     Ответить на контрольные вопросы

 

Пример выполнения программы

#include <iostream>

class A { //абстрактный базовый класс

protected: int a;

public:

virtual void Print() = 0; //абстрактный метод

};

class B : public A {

private: int b;

public:

B(){b=0;a=0;}

B(int aa, int bb){ a=aa; b=bb; }

void Print(){cout<<"a = "<<a<<"\tb = "<<b;}

};

class C : public A {

private:

int c;

public:

C(){c=5;a=5;}

C(int aa, int cc){ a=aa; b=cc; }

void Print(){cout<<"a = "<<a<<"\tb = "<<b;}

};

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

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

2.     Для чего реализуется абстрактный класс?


 

ПРАКТИЧЕСКАЯ РАБОТА №2.18

Дисциплина: Основы программирования

Тема: Множественное наследование

Цель: формирование ОК 1-9, ПК 1.1, 3.1, 3.2, 3.4

Задача: Ознакомиться с основными принципами ООП, их применением на практике.

Материалы:

1.     Основы алгоритмизации и программирования. Практикум: учеб. пособие для студ. учреждений сред. проф. образования / И.Г. Семакин, А.П. Шестаков. – 2-е изд., стер. – М.: Издательский центр «Академия», 2014. – 144 с.

2.     Язык программирования С++. Специальное издание / Б.Страуструп – 3-е изд.

3.     Объектно-ориентированное программирование в С++. Классика Computer Scince. 4-е изд. – СПб.: Питер, 2017. – 928 с.

 

Краткая теория

Множественное наследование – наследование от нескольких базовых классов одновременно. Множественное наследование позволяет наследуемому классу перенимать функциональность и данные у всех базовых классов. Для порождения класса из нескольких базовых после имени наследуемого класса и двоеточия указывают модификаторы и имена базовых классов, разделяя их запятыми:

class наследуемый_класс: public базовый_класс1, public базовый_класс2

 

Ход выполнения работы

1.     Реализуйте программный код, представленный в примере.

2.     Что выполняет данная программа?

3.     Оформить отчёт.

4.     Ответить на контрольные вопросы

 

Пример выполнения программы

class A{

int a;

public:

void a();

};

class B{

int b;

public: void b();

};

class C: public A, public B {

public:

void c();

};

void main(){

C c;

c. a(); //Вызывается метод a базового класса А

c. b(); //Вызывается метод b базового класса B

c. c(); //Вызывается метод c наследуемого класса C

}

 

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

1.     В чем заключается суть множественного наследования?

2.     Приведите пример множественного наследования.


 

ПРАКТИЧЕСКАЯ РАБОТА №2.19

Дисциплина: Основы программирования

Тема: Шаблоны классов

Цель: формирование ОК 1-9, ПК 1.1, 3.1, 3.2, 3.4

Задача: Ознакомиться с основными принципами реализации шаблонов классов.

Материалы:

1.     Основы алгоритмизации и программирования. Практикум: учеб. пособие для студ. учреждений сред. проф. образования / И.Г. Семакин, А.П. Шестаков. – 2-е изд., стер. – М.: Издательский центр «Академия», 2014. – 144 с.

2.     Язык программирования С++. Специальное издание / Б.Страуструп – 3-е изд.

3.     Объектно-ориентированное программирование в С++. Классика Computer Scince. 4-е изд. – СПб.: Питер, 2017. – 928 с.

 

Краткая теория

Шаблоны – средства языка С++, предназначенные для кодирования обобщенных алгоритмов, без привязки к некоторым параметрам (например, типам данных или размеру буфера). Шаблоны позволяют создать параметризованные классы и функции.

В отсутствие шаблонов программисту приходиться писать отдельные функции для каждого используемого типа данных. Хотя многие языки программирования определяют встроенную функцию минимума для элементарных типов данных (int, float и пр.), такая функция может понадобиться и для сложных типов (например, «строка» или «время»).

Простейшим примером использования шаблонов является нахождение минимальной величины из двух представленных:

template<typename T> T minimum ( T a, T b ) { return a < b ? a : b; }

void main() {

int t = minimum ( 1 , 2 );

char ch = minimum ( 'r' , 'y' );

string str = minimum ( 'sister' , 'brother' );

}

 

Ход выполнения работы

1.     Реализовать шаблон классов и продемонстрировать работу с ним.

2.     Оформить отчёт.

3.     Ответить на контрольные вопросы

 

Рабочее задание

1.     Шаблон Matrix для работы с двумерной матрицей. Для демонстрации работы с шаблоном в качестве элементов использовать матрицу вещественных чисел.

2.     Шаблон Vector для работы с вектором. Для демонстрации работы с шаблоном в качестве элементов использовать вектор вещественных чисел.

3.     Шаблон Stack для работы со стеком. Для демонстрации работы с шаблоном в качестве элементов использовать стек вещественных чисел.

4.     Шаблон List для работы со списком. Для демонстрации работы с шаблоном в качестве элементов использовать список вещественных чисел.

5.     Шаблон Tree для работы с деревом. Для демонстрации работы с шаблоном в качестве элементов использовать дерево вещественных чисел.

6.     Шаблон SortList для работы с отсортированным списком. Для демонстрации работы с шаблоном в качестве элементов использовать список вещественных чисел.

7.     Шаблон Map для работы с множеством. Для демонстрации работы с шаблоном в качестве элементов использовать множество вещественных чисел.

8.     Шаблон Array для работы с динамическим массивом. Для демонстрации работы с шаблоном в качестве элементов использовать динамический массив вещественных чисел.

9.     Шаблон Pair для работы с парой элементов. Для демонстрации работы с шаблоном в качестве одного элемента использовать целое число, в качестве другого – вещественное число.

10. Шаблон Pair3D для работы с тройкой элементов. Для демонстрации работы с шаблоном в качестве элементов использовать вещественные числа.

11. Шаблон Matrix для работы с двумерной матрицей. Для демонстрации работы с шаблоном в качестве элементов использовать матрицу целых чисел.

12. Шаблон Vector для работы с вектором. Для демонстрации работы с шаблоном в качестве элементов использовать вектор целых чисел.

13. Шаблон Stack для работы со стеком. Для демонстрации рабо-

14. ты с шаблоном в качестве элементов использовать стек целых

15. чисел.

16. Шаблон List для работы со списком. Для демонстрации работы

17. с шаблоном в качестве элементов использовать список целых

18. чисел.

19. Шаблон SortList для работы с отсортированным списком. Для демонстрации работы с шаблоном в качестве элементов использовать список целых чисел.

20. Шаблон Map для работы с множеством. Для демонстрации работы с шаблоном в качестве элементов использовать множество целых чисел.

21. Шаблон Pair для работы с парой элементов. Для демонстрации работы с шаблоном в качестве одного элемента использовать целое число, в качестве другого – строку.

22. 1Шаблон Pair3D для работы с тройкой элементов. Для демонстрации работы с шаблоном в качестве элементов использовать целые числа.

23. 1Шаблон Matrix3D для работы с трехмерной матрицей. Для демонстрации работы с шаблоном в качестве элементов использовать матрицу вещественных чисел.

24. Шаблон Array для работы с динамическим массивом. Для демонстрации работы с шаблоном в качестве элементов использовать динамический массив целых чисел.

 

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

1.     Для чего используются шаблоны?

2.     Какие шаблоны вы знаете?

3.     Приведите пример использования шаблона.


 

ПРАКТИЧЕСКАЯ РАБОТА №2.20

Дисциплина: Основы программирования

Тема: Стандартная библиотека шаблонов

Цель: формирование ОК 1-9, ПК 1.1, 3.1, 3.2, 3.4

Задача: Ознакомиться с основными принципами ООП, их применением на практике.

Материалы:

4.     Основы алгоритмизации и программирования. Практикум: учеб. пособие для студ. учреждений сред. проф. образования / И.Г. Семакин, А.П. Шестаков. – 2-е изд., стер. – М.: Издательский центр «Академия», 2014. – 144 с.

5.     Язык программирования С++. Специальное издание / Б.Страуструп – 3-е изд.

6.     Объектно-ориентированное программирование в С++. Классика Computer Scince. 4-е изд. – СПб.: Питер, 2017. – 928 с.

 

Ход выполнения работы

1.     Повторите конспект.

2.     Разбейтесь на группы.

3.     Составьте краткий доклад на тему «Состав STL», «Класс-контейнер», «Контейнер vector», «Ассоциативные контейнеры», «Алгоритмы STL».

4.     Подготовьтесь к выступлению, определив следующие роли среди участников группы:

a.      Подготовка доклада

b.     Подготовка презентации

c.      Операции над контейнерами

d.     Подготовка примера программы с его объяснением

5.     Подготовьтесь к защите

 

Просмотрено: 0%
Просмотрено: 0%
Скачать материал
Скачать материал "Методические указания по практическим работам по программированию на С++"

Методические разработки к Вашему уроку:

Получите новую специальность за 3 месяца

Психолог в социальной сфере

Получите профессию

Менеджер по туризму

за 6 месяцев

Пройти курс

Рабочие листы
к вашим урокам

Скачать

Скачать материал

Найдите материал к любому уроку, указав свой предмет (категорию), класс, учебник и тему:

6 663 752 материала в базе

Скачать материал

Другие материалы

Вам будут интересны эти курсы:

Оставьте свой комментарий

Авторизуйтесь, чтобы задавать вопросы.

  • Скачать материал
    • 26.01.2018 6785
    • DOCX 1.1 мбайт
    • 273 скачивания
    • Оцените материал:
  • Настоящий материал опубликован пользователем Романова Елена Фархадовна. Инфоурок является информационным посредником и предоставляет пользователям возможность размещать на сайте методические материалы. Всю ответственность за опубликованные материалы, содержащиеся в них сведения, а также за соблюдение авторских прав несут пользователи, загрузившие материал на сайт

    Если Вы считаете, что материал нарушает авторские права либо по каким-то другим причинам должен быть удален с сайта, Вы можете оставить жалобу на материал.

    Удалить материал
  • Автор материала

    Романова Елена Фархадовна
    Романова Елена Фархадовна
    • На сайте: 7 лет
    • Подписчики: 15
    • Всего просмотров: 53519
    • Всего материалов: 21

Ваша скидка на курсы

40%
Скидка для нового слушателя. Войдите на сайт, чтобы применить скидку к любому курсу
Курсы со скидкой

Курс профессиональной переподготовки

Бухгалтер

Бухгалтер

500/1000 ч.

Подать заявку О курсе
  • Сейчас обучается 23 человека из 16 регионов

Курс профессиональной переподготовки

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

Специалист по формированию электронного архива

600 ч.

9840 руб. 5600 руб.
Подать заявку О курсе
  • Сейчас обучается 30 человек из 22 регионов
  • Этот курс уже прошли 36 человек

Курс повышения квалификации

Теоретические и методологические основы преподавания информатики с учётом требований ФГОС ООО

72 ч. — 180 ч.

от 2200 руб. от 1100 руб.
Подать заявку О курсе
  • Сейчас обучается 154 человека из 49 регионов
  • Этот курс уже прошли 1 717 человек

Курс повышения квалификации

Специфика преподавания информатики в начальных классах с учетом ФГОС НОО

72 ч. — 180 ч.

от 2200 руб. от 1100 руб.
Подать заявку О курсе
  • Сейчас обучается 39 человек из 20 регионов
  • Этот курс уже прошли 284 человека

Мини-курс

Инновационные технологии в краеведческой и географической работе со школьниками: применение туристических приемов для эффективного обучения

6 ч.

780 руб. 390 руб.
Подать заявку О курсе

Мини-курс

Формирование здоровых детско-родительских отношений: влияние и преодоление сепарации

4 ч.

780 руб. 390 руб.
Подать заявку О курсе
  • Сейчас обучается 159 человек из 46 регионов
  • Этот курс уже прошли 85 человек

Мини-курс

Мастерство PowerPoint: систематизация, интерактивность и эффективность

10 ч.

1180 руб. 590 руб.
Подать заявку О курсе
  • Сейчас обучается 1707 человек из 84 регионов
  • Этот курс уже прошли 161 человек