Часть 2. Основы программирования 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Часть 2. Основы программирования



 

 

Тула – 2010



ГОУ ВПО Тульский государственный педагогический университет имени Л.Н. Толстого

Кафедра информатики и методики обучения информатике

Г.В. Ваныкина, Т.О. Сундукова

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

Часть 2. Основы программирования

Лабораторный практикум

 

 

Тула - 2010


ББК 32.973.26

УДК 004.438

 

 

Ваныкина Г.В., Сундукова Т.О.

Программирование на языке С++. Часть 2. Основы программирования / Г.В. Ваныкина, Т.О. Сундукова; Тулгоспедуниверситет. – Тула, Папирус, 2010. – 101 с.

 

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

В данном пособии рассматриваются базовые алгоритмы обработки данных в соответствии с особенностями представления типов в языке С++.

Для студентов специальностей 351500 Математическое обеспечение и администрирование информационных систем, 030100 Информатика, направлений подготовки 540200 Физико-математическое образование (профиль 540203 Информатика) и 511900 Информационные технологии. Может быть использовано студентами и преподавателями вузов, средних профессиональных и средних общеобразовательных учреждений.

 

УДК 004.438

 

 

Рецензенты:

Есаян А.Р. – доктор педагогических наук, профессор кафедры информатики и методики обучения информатике ТГПУ им. Л.Н. Толстого;

Баженова И.Ю. – кандидат физико-математических наук, доцент факультета ВМК МГУ им. М.В. Ломоносова

 

Утверждено

редакционно-издательским

советом университета

 

 

Ó Авторы, 2010

 


СОДЕРЖАНИЕ

ПРЕДИСЛОВИЕ.. 4

 

Лабораторная работа №21

Подставляемые (встраиваемые) функции. Перегрузка функций. 6

Лабораторная работа №22

Производные типы. Тип указатель: указатели на объекты .. 11

Лабораторная работа №23

Тип указатель: указатели на функции. 18

Лабораторная работа №24

Решение задач с использованием указателей. 23

Лабораторная работа №25

Символьные данные и строки. 30

Лабораторная работа №26

Функции для работы со строками. 37

Лабораторная работа №27

Решение задач на строки. 43

Лабораторная работа №28

Массивы: одномерные массивы .. 49

Лабораторная работа №29

Одномерные массивы: задачи поиска, замены и перестановок элементов массива. 60

Лабораторная работа №30

Одномерные массивы: задачи сортировок элементов массива. 67

Лабораторная работа №31

Двумерные массивы. Задачи поиска, замены и суммирования элементов двумерного массива73

Лабораторная работа №32

Двумерные массивы. Задачи сортировок и перестановок в двумерных массивах. 82

 

ИНДИВИДУАЛЬНЫЕ ЗАДАНИЯ.. 85

 

ЛИТЕРАТУРА.. 100


ПРЕДИСЛОВИЕ

Язык программирования С++ был разработан датским ученым Бьёрном Страуструпом в начале 90-х годов, первоначально как объектно-ориентированное расширение языка С. В настоящее время язык C++ является одним из наиболее мощных и широко распространенных языков программирования. Язык характеризуется своей универсальностью, он успешно применяется для решения разнообразных задач прикладного и системного программирования с использованием различных парадигм программирования – процедурной, объектно-ориентированной, параметрической.

Предлагаемое пособие представляет собой учебно-методический материал, основным содержанием которого является описание системы лабораторных работ, следующих в порядке, соответствующем последовательности обучения программированию на С++.

Представленный в пособии набор лабораторных работ покрывает основные синтаксические и семантические аспекты языка С++ в объеме вузовских программ по основам программирования для специальностей 351500 Математическое обеспечение и администрирование информационных систем, 030100 Информатика и направлений подготовки 540200 Физико-математическое образование (профиль 540203 Информатика), 511900 Информационные технологии.

Данное пособие может использоваться для изучения основ программирования на основе языка С++ и в рамках других направлений/специальностей высшего профессионального образования, а также использоваться студентами и преподавателями средних профессиональных и средних общеобразовательных учреждений. Оно может быть полезным и при самостоятельном изучении языка С++.

Вторая часть пособия опирается на сформированные ранее базовые знания обучающихся по основам языка С++. Часть «Основы программирования» акцентирует внимание на знакомство со структурированными типами данных языка С++, более глубокое изучение приемов и алгоритмов их обработки. В пособии продолжается реализация идеи процедурной парадигмы программирования, так как обучение знанию базовых алгоритмов обработки структурированных данных и построение на их основе решения различных классов задач способствует формированию определенного стиля мышления и культуры. Формируется база для перехода к изучению альтернативных парадигм современного программирования.

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

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

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

Пособие написано на основе курса лекций и лабораторно-практических занятий по программированию со студентами факультета математики, физики и информатики ТГПУ им. Л.Н. Толстого. Для базовой подготовки студентов, обучающихся на основе материалов пособия, достаточно освоение школьного курса информатики и ИКТ.


Лабораторная работа 21

Подставляемые (встраиваемые) функции. Перегрузка функций

Цель работы: повторить принципы работы с функциями, изучить подставляемые (встраиваемые) функции, научиться разрабатывать программы с использованием перегрузки функций на языке C++.

 

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

Подставляемые функции

Некоторые функции в С++ можно определить с использованием служебного слова inline. Такая функция называется подставляемой или встраиваемой.

Например:

/*функция возвращает расстояние от точки с координатами(x1,y1) до точки с координатами (x2,y2)*/

inline float Line(float x1,float y1,float x2, float y2) {

return sqrt(pow(x1-x2)+pow(y1-y2,2));

}

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

Подставляемыми не могут быть:

· рекурсивные функции;

· функции, у которых вызов размещается до ее определения;

· функции, которые вызываются более одного раза в выражении;

· функции, содержащие циклы, переключатели и операторы переходов;

· функции, которые имеют слишком большой размер, чтобы сделать подстановку.

Перегрузка функции

При определении функций в программах необходимо указывать тип возвращаемого функцией значения, а также количество параметров и тип каждого из них. Если на языке С была написана функция с именем add_values, которая работала с двумя целыми значениями, а в программе было необходимо использовать подобную функцию для передачи трех целых значений, то тогда следовало бы создать функцию с другим именем. Например, add_two_valuesи add_three_values. Аналогично если необходимо использовать подобную функцию для работы со значениями типа float, то нужна еще одна функция с еще одним именем. Чтобы избежать дублирования функции, C++ позволяет определять несколько функций с одним и тем же именем. В процессе компиляции C++ принимает во внимание количество аргументов, используемых каждой функцией, и затем вызывает именно требуемую функцию. Предоставление компилятору выбора среди нескольких функций называется перегрузкой.

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

Например, следующая программа перегружает функцию с именем add_values. Первое определение функции складывает два значения типа int. Второе определение функции складывает три значения типа int. В процессе компиляции C++ корректно определяет функцию, которую необходимо использовать:

#include <iostream.h>

 

int add_values(int a,int b) {

return(a + b);

}

 

int add_values (int a, int b, int c) {

return(a + b + c);

}

 

void main(void) {

cout << "200+801=" << add_values(200,801) << "\n";

cout << "100+201+700=" << add_values(100,201,700) << "\n";

}

Таким образом, программа определяет две функции с именами add_values. Первая функция складывает два значения, в то время как вторая складывает три значения одного типа int. Компилятор языка С++ определяет, какую функцию следует использовать, основываясь на предлагаемых программой параметрах.

Использование перегрузки функции

Одним из наиболее общих случаев использования перегрузки является применение функции для получения определенного результата, исходя из различных параметров. Например, предположим, что в программе есть функция с именем day_of_week, которая возвращает текущий день недели (0 для воскресенья, 1 для понедельника,..., 6 для субботы). Программа могла бы перегрузить эту функцию таким образом, чтобы она верно возвращала день недели, если ей передан юлианский день в качестве параметра, или если ей переданы день, месяц и год:

int day_of_week(int julian_day) {

// операторы

}

 

int day_of_week(int month, int day, int year) {

// операторы

}

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

int имя_функции(int имя_аргумента);

int имя_функции(int имя_аргумента);

/*недопустимая перегрузка имени: аргументы имеют одинаковое количество и одинаковый тип*/

Преимущества перегрузки функции:

· перегрузка функций улучшает удобочитаемость программ;

· перегрузка функций C++ позволяет программам определять несколько функций с одним и тем же именем;

· перегруженные функции возвращают значения одинакового типа, но могут отличаться количеством и типом параметров;

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

Пример 1.

/*Перегруженные функции имеют одинаковые имена, но разные списки параметров и возвращаемые значения*/

#include<iostream.h>

int average(int first_number, int second_number,

int third_number);

int average(int first_number, int second_number);

 

void main() { // главная функция

int number_A = 5, number_B = 3, number_C = 10;

cout << "Целочисленное среднее чисел " << number_A << " и ";

cout << number_B << " равно ";

cout << average(number_A, number_B) << ".\n\n";

cout << "Целочисленное среднее чисел " << number_A << ", ";

cout << number_B << " и " << number_C << " равно ";

cout << average(number_A, number_B, number_C) << ".\n";

} // конец главной функции

 

 

/*функция для вычисления целочисленного среднего значения 3-х целых чисел*/

int average(int first_number, int second_number,

int third_number) {

return((first_number + second_number + third_number)/3);

} // конец функции

 

/*функция для вычисления целочисленного среднего значения 2-х целых чисел*/

int average(int first_number, int second_number) {

return((first_number + second_number)/2);

} // конец функции

Пример 2.

/*Перегруженные функции имеют одинаковые имена и типы возвращаемых значений, но разные типы параметров*/

#include<stdio.h>

float average(int first_number, int second_number,

int third_number);

float average(float first_number, float second_number,

float third_number);

 

void main() {

int A = 5, B = 3, C = 10;

float A1 = 5.1, B1 = 3.4, C1 = 10.5;

printf("Среднее значение 3-х целых чисел = %f\n",

average(A,B,C)/3.0);

printf("Среднее значение 3-х вещественных чисел = %f\n",

average(A1,B1,C1)/3.0);

}

 

/*функция для вычисления среднего значения 3-х целых чисел*/

float average(int first_number, int second_number,

int third_number) {

return ((first_number + second_number + third_number));

}

 

/*функция для вычисления среднего значения 3-х вещественных чисел*/

float average(float first_number, float second_number,

float third_number) {

return ((first_number + second_number + third_number));

}

Задания

1. Составьте программу для решения задачи. Определите значение

,

где max(x, у)есть максимальное из чисел x, у. Разработайте функции нахождения максимального из двух целых и вещественных чисел.

2. Составьте программу для решения задачи. Найдите периметр треугольника, заданного координатами своих вершин (считать, что треугольник существует). Разработайте функции нахождения расстояния между двумя точками, заданными своими координатами. Предусмотрите только случаи двумерного и трехмерного пространств.

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

 

Домашние задания

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

2. Составьте программу для решения задачи. Даны координаты трех точек: A, B, C. Составьте программу нахождения углов треугольника ABC, если он существует. В противном случае выведите соответствующий комментарий. Для решения задачи разработайте функции только для случаев двумерного и трехмерного пространств.

3. Составьте программу, которая в зависимости от входных данных переводит часы и минуты в минуты или минуты – в часы и минуты. Используйте перегруженные функции. Например, при вводе 134 мин будет выдано значение 2 час 14 мин, а при вводе 2 час 14 мин – значение 134 мин.


Лабораторная работа 22



Поделиться:


Последнее изменение этой страницы: 2016-09-13; просмотров: 315; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 52.87.200.112 (0.064 с.)