Пример выполнения задания.




Лабораторное занятие №23

Тема: Организация, использование прототипов функций. Перегрузка функций.

 

 

Лабораторное занятие рассчитано на 2 часа, относится к темам:

Тема 6.2 Прототипы функций

 

Формируемые компетенции: ОК1-9, ПК 1.1- 1.5 ПК 3.1

 

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

 

Методическое и техническое обеспечение:

компьютер с ОС Windows, программное обеспечение Borland C, Borland C++.

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

В современных, правильно написанных программах на языке С каждую функцию перед использованием необходимо объявлять. Обычно это делается с помощью прототипа функции. В первоначальном варианте языка С прототипов не было; но они были введены уже в Стандарт С89. Хотя прототипы формально не требуются, но их использование очень желательно. (Впрочем, в C++ прототипы обязательны!). Прототипы дают компилятору возможность тщательнее выполнять проверку типов, подобно тому, как это делается в таких языках как Pascal. Если используются прототипы, то компилятор может обнаружить любые сомнительные преобразования типов аргументов, необходимые при вызове функции, если тип ее параметров отличается от типов аргументов. При этом будут выданы предупреждения обо всех таких сомнительных преобразованиях. Компилятор также обнаружит различия в количестве аргументов, использованных при вызове функции, и в количестве параметров функции.

В общем виде прототип функции должен выглядеть таким образом:

тип имя_функции (тип имя_парам1, тип имя_парам2,..., имя_парамN);

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

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

/* В этой программе используется прототип функции

чтобы обеспечить тщательную проверку типов. */

 

voidsqr_it(int *i); /* прототип */

 

int main(void)

{

int x;

 

x = 10;

sqr_it(x); /* несоответствие типов */

 

return 0;

}

 

voidsqr_it(int *i)

{

*i = *i * *i;

}

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

#include<stdio.h>

 

/* Это определение будет также служить и

прототипом внутри этой программы. */

void f(int a, int b)

{

printf("%d ", a % b);

}

 

int main(void)

{

f(10,3);

 

return 0;

}

В этом примере специальный прототип не требуется; так как функция f() определена еще до того, как она начинает использоваться в main(). Хотя определение функции и может служить ее прототипом в малых программах, но в больших такое встречается редко — особенно, когда используется несколько файлов. В программах, приведенных в качестве примеров в этой книге, для каждой функции автор старался приводить отдельный прототип потому, что именно так обычно и пишется код на языке С.

Единственная функция, для которой не требуется прототип — это main(), так как это первая функция, вызываемая в начале работы программы.

Имеется небольшая, но важная разница в том, как именно в С и C++ обрабатывается прототип функции, не имеющей параметров. В C++ пустой список параметров указывается полным отсутствием в прототипе любых параметров. Например,

int f(); /* Прототип C++ для функции, не имеющей параметров */

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

Если функция в языке С не имеет параметров, то в ее прототипе внутри списка параметров стоит только ключевое слово void. Вот, например, прототип функции f() в том виде, в каком он должен быть в программе на языке С:

float f(void);

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

Прототипы функций позволяют "отлавливать" ошибки еще до запуска программы. Кроме того, они запрещают вызов функций при несовпадении типов (т.е. с неподходящими аргументами) и тем самым помогают проверять правильность программы.

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

 

Пример выполнения задания.

#include <iostream.h>

int sum(int a, int b)

{

return(a+b);

}

float sum(float a, int b, intс)

{

return(a+b+c);

}

void main(void)

{

cout«sum(2,3)«endl;

cout«sum(2.5,3.4)«endl;

}

В этой программе определены две функции sum с разным количеством и типами формальных параметров. В результате работы программы сначала осуществляется обращение к первой функции, которая складывает два значения (2+3=5) типа int. Затем происходит обращение ко второй функции, которая складывает три значения (2.5+3+4=9.5) и возвращает в основную программу результат типа float.

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


Порядок выполнения работы:

― изучить теоретические сведения;

― изучить индивидуальное задание;

― разработать алгоритм его решения (разработать математическую модель, реализовать в виде блок-схемы);

― написать программу;

― оттестировать программу на различных комбинациях входных значений;

― продемонстрировать работу преподавателю;

― оформить отчет.

Содержание отчета:

1. Задание.

2. Блок-схема.

3. Листинг программы.

4. Тестовый пример.

 

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

1. Прототип функции (назначение)

2. Правила написания прототипа функции

3. Отличие функции от прототипа функции

Список литературы:

Основная литература

1. Семакин И.Г., Шестаков А.П. Основы алгоритмизации и программирования. Учебник. М.: АСАДЕМА, 2016

2. Семакин И.Г., Шестаков А.П. Основы алгоритмизации и программирования. Практикум. М.: АСАДЕМА, 2016

Дополнительная литература

1. Голицына О.Л., Попов И.И. Программирование на языках высокого уровня Учебное пособие М.: ФОРУМ, 2008

2. Голицына О.Л, Партыка Т.Л., Попов И.И. Программное обеспечение Учебное пособие М.: ФОРУМ, 2008

3. Колдаев В.Д Основы алгоритмизации программирования Учебное пособие М.: ФОРУМ-ИНФРА-М,2009

Индивидуальные задания.

Задание. Использовать операцию перезагрузки функциии прототип функции.

Вариант №1.

1. Вычислить число размещений из n по m. Оформить вычисление факториала в виде процедуры.

2. Вычислить площади двух треугольников и сравнить их. Оформить вычисление площади треугольника по формуле Герона в виде функции.

 

Вариант №2.

1. Вычислить выражение . Оформить вычисление возведения числа в степень в виде функции.

2. Вычислить площади двух окружностей и сравнить их. Оформить вычисление площади окружности в виде функции.

 

Вариант №3.

1. Вычислить выражение . Оформить вычисление факториала в виде функции.

2. Вычислить выражение y = 1!+2!+3!+…+n!. Оформить вычисление факториала в виде функции.

 

Вариант №4.

1. Вычислить площади двух треугольников и сравнить их. Оформить вычисление площади треугольника по формуле Герона в виде функции.

2. Вычислить выражение . Оформить вычисление модуля вещественного числа в виде функции.

 

Вариант №5.

1. Вычислить площади двух окружностей и сравнить их. Оформить вычисление площади окружности в виде функции.

2. Вычислить выражение у = 1!*2!*3!*...*n!. Оформить вычисление факториала в виде функции.

 

Вариант №6.

1. Вычислить выражение у = 1!+2!+3!+... + n!. Оформить вычисление факториала в виде функции.

2. Вычислить периметры трёх прямоугольников и сравнить их (найти наибольший периметр). Оформить вычисление периметра прямоугольника в виде функции.

 

 

Вариант №7.

1. Вычислить выражение у = 1!*2!*3!*...*n!. Оформить вычисление факториала в виде функции.

2. Вычислить выражение . Оформить вычисление возведения числа в степень в виде функции.

 

Вариант №8.

1. Вычислить периметры трёх прямоугольников и сравнить их (найти наибольший периметр). Оформить вычисление периметра прямоугольника в виде процедуры.

2. Вычислить по формуле Тейлора. Оформить вычисление n-го члена ряда, Тейлора в виде функции.

 

Вариант №9.

1. Вычислить выражение . Оформить вычисление модуля вещественного числа в виде процедуры.

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

 

Вариант №10.

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

2. Вычислить выражение . Оформить вычисление факториала в виде функции.

 

Вариант №11.

1. Вычислить по формуле Тейлора. Оформить вычисление n-го члена ряда Тейлора в виде функции.

2. Вычислить число размещений из n по m. Оформить вычисление факториала в виде функции.

 

Вариант №12.

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

2. Вычислить площади трёх квадратов и сравнить их (найти наименьшую площадь). Оформить вычисление площади квадрата в виде функции.

 

Вариант №13.

1. Вычислить периметры трёх прямоугольников и сравнить их (найти наибольший периметр). Оформить вычисление периметра прямоугольника в виде функции.

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

 

Вариант №14.

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

2. Вычислить выражение . Оформить вычисление возведения числа в степень в виде функции.

 

Вариант №15.

1. Вычислить площади трёх квадратов и сравнить их (найти наименьшую площадь). Оформить вычисление площади квадрата в виде функции.

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

 

Вариант №16.

1. Даны три вещественных числа. Составить процедуру нахождения факториала числа. Найти сумму полученных факториалов..

2. Вычислить выражение . Оформить вычисление возведения числа в степень в виде функции.

 



Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2019-04-03 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: