68600

Использование функций для решения прикладных задач

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

Информатика, кибернетика и программирование

Цель занятия: Совершенствование навыков разработки программ в среде программирования MS Visual C++ Совершенствование навыков использования циклов и ветвлений в программах Получение начальных навыков в объявлении и использовании функций.

Русский

2014-09-23

61.5 KB

0 чел.

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

Тема: Использование функций для решения прикладных задач

Цель занятия:

  •  Совершенствование навыков разработки программ в среде программирования MS Visual C++
  •  Совершенствование навыков использования циклов и ветвлений в программах
  •  Получение начальных навыков в объявлении и использовании функций

Время на выполнение работы: 2 часа

Учебные вопросы:

  1.  Изучение порядка объявления и описания функций
  2.  Изучение порядка вызова функций

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

  1.  Изучить рекомендованную литературу (базовые конструкции структурного программирования, массивы и указатели, функции).
  2.  Изучить материал настоящего руководства.

Материалы для подготовки к занятию:

  1.  Конспект лекций
  2.  [1] стр. 73-78.


ОСНОВНЫЕ ТЕОРЕТИЧЕСКИЕ СВЕДЕНИЯ

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

С понятием функции в языке C++ связано три следующих компонента:

  •  описание функции;
  •  прототип;
  •  вызов функции.

Описание функции состоит из двух частей: заголовка и тела. Описание функции имеет следующую форму записи:

 [тип_результата] <имя_функции> [спсок_параметров])

 {

 /* объявления и операторы

    или, другими словами, тело функции*/

 }    

Здесь тип_результата тип возвращаемого значения. В случае отсутствия спецификатора типа предполагается, что функция возвращает целое значение (int). Если функция не возвращает никакого значения, то на месте типа записывается спецификатор void. В списке параметров для каждого параметра должен быть указан тип. При отсутствии параметров список может быть пустым или иметь спецификатор void.

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

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

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

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

В первом случае оператор имеет следующий формат:

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

Например:    void Ptint(“Hello World!”);

Во втором случае выражение записывается следующим образом:               

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

Например:  z=max(x,y);

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

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

Возможное решение данной задачи имеет вид:                             

/* включение файла max.cpp с

  телом функции max */

#include "max.cpp"

void main()                                                               

{

int x,y,z;

cout << "\n поочередно введите х и у \n";

cin >> х; cin >> y;

z=max (х, y);       /* вызов функции */

cout << "z=" << z;

return;

}

Описание функции max находится в отдельном файле max.cpp, находящемся в том каталоге, из которого запускается исходная программа, и имеет следующий вид:

int max (int a, int b)

{

int с;         //

c=(a>b)?a:b;   //   тело функции  

return с;      //               

}

Вызов функции является выражением в правой части оператора присваивания z=max(x,y);, при выполнении которого значения аргументов х и у подставляются вместо параметров а и b соответственно (передача параметров в функцию по значению). После выполнения тела функции возвращаемое значение передается в место вызова функции и присваивается переменной z. Описание функции находится в файле, поэтому для включения файла в программу необходимо в тексте программы указать директиву препроцессора #include "max.cpp".

Описание функции может находиться в одном файле с главной программой. При этом директива #include "max.cpp" не указывается, а вместо нее помещается описание функции. В рассмотренной программе функция имеет возвращаемое значение. Существуют задачи, которые не требуют передачи возвращаемого значения. Такой пример приведен ниже.


Пример 2.
Использование функции без возвращаемого значения.

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

void print(char);      // прототип функции

void main()

{

char x;

cout <<”\nВводите символы.

    <<” Enter – окончание ввода”;

do

{

x=getch();

print (x);

} while (x!= 13);

return 0;

}

void print(char a) { cout <<a << “\t“; }

В функции рrint( ) отсутствует возвращаемое значение, поэтому обращение к функции осуществляется оператором вызова функции рrint(x);. В результате обращения к   функции на экран будет выведен символ, введенный с клавиатуры с помощью оператора x=getch().

Язык Си позволяет использовать процедуру перегрузки функций. Суть этого заключается в использовании одного и того же имени функции для решения различных, но схожих по назначению задач. Для реализации этого механизма описывается каждый из вариантов такой функции. Например, рассмотрим задачу нахождения среднего значения двух чисел. При реализации этой задачи требуется описывать отдельную функцию для целых чисел, чисел с плавающей точкой и их комбинации. Это связано с тем, что каждый передаваемый параметр должен иметь свой тип (int, float, double). Следовательно, если в функцию для нахождения среднего значения целых чисел передать числа с плавающей точкой, то в функции в соответствии с прототипом эти числа преобразуются путем отбрасывания дробной части в целые, что приведет к неправильному результату. Поэтому, для решения этой задачи пришлось бы описывать несколько функций с разными именами для разных типов данных. Механизм перегрузки функций позволяет для решения этой задачи использовать несколько функций с одним именем, при этом решение о выборе того или иного варианта функции для конкретного типа данных принимает сама программа.

Рассмотрим листинг такой программы:

Пример 3. Использование механизма перегрузки функции

void  PrintData(int *s, int N);

void  PrintData(char *w);

void main()

 {

 int *a,n; char str[50];

 cout<<”\nEnter the array size: “; cin>>n;

 a=new int[n];

 for (int i=0;i<n;i++) a[i]=rand()%101-50;

  PrintData(a,n);

  cout<<”\nEnter a string: “; cin>>str;

  PrintData(str);

  return;

  }

void  PrintData(int *s, int N)

 {

 cout<<endl;

 for (int i=0;i<N;i++) cout<<s[i]<<”  “;

 return;

 }

void  PrintData(char *w)

 {

 cout<<endl<<w; return;

 }

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

ПРОГРАММА  РАБОТЫ

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


 

А также другие работы, которые могут Вас заинтересовать

25394. Основные характеристики и проблемы граждан пожилого и старческого возраста в современной России 50 KB
  Ритм старения существенно зависит от образа жизни пожилых людей как правило пенсионеров их положения в семье уровня жизни условий труда социальных и психологических факторов. Среди пожилых людей выделяются самые разные группы: бодрые физически здоровые больные живущие в семьях одинокие довольные уходом на пенсию еще работающие но тяготящиеся работой несчастные отчаявшиеся в жизни малоподвижные домоседы проводящие интенсивно разнообразно свой досуг ходят в гости встречаются с друзьями посещают клубы и т. Для социальных...
25395. Технологии социальной работы с пожилыми и старыми людьми 44 KB
  №195ФЗ Об основах социального обслуживания населения в РФ; ФЗ от 02. №473 О порядке и условиях оплаты социальных услуг предоставляемых гражданам пожилого возраста и инвалидам государственными и муниципальными учреждениями социального обслуживания; Постановление Правительства РФ от 25. №1151 О Федеральном перечне гарантированных государством социальных услуг предоставляемых гражданам пожилого возраста и инвалидам государственными и муниципальными учреждениями социального обслуживания; Указ Президента РФ от 29. №115 О мерах по...
25396. Молодежь как половозрастная группа, ее основные характеристики. Проблемы социализации молодежи в современной России 45.5 KB
  Проблемы социализации молодежи в современной России. Анализ современных проблем молодежи нельзя не начать с уточнения понятия молодежь. К проблемам социализации молодежи в современной России можно отнести: ухудшение материального и духовного благосостояния молодежи рост числа нетрудоустроенных выпускников рост числа преступлений среди молодежи рост случаев жестокого обращения с детьми физическое и психологическое насилие над подростками и молодежью увеличение числа больных психическими заболеваниями проблема детской беспризорности и...
25397. Государственная молодежная политика как механизм решения социальных проблем молодежи 50.5 KB
  Государственная молодежная политика как механизм решения социальных проблем молодежи Молодежь – это социальнодемографическая группа специфические социальные и психологические черты которой обусловлены возрастными особенностями молодых людей процессом становления их духовного мира социализации спецификой положения в социальной структуре общества. Чтобы поддержать это чувства баланса у молодежи необходимо заниматься решением всего комплекса молодежных проблем. Решение многообразных и острых проблем молодежи в России возможно лишь при...
25398. Система социальных служб для молодежи, ее специфика 49 KB
  Система социальных служб для молодежи ее специфика Молодежь это социальнодемографическая группа переживающая период становления социальной зрелости адаптации к миру взрослых и будущие изменения. К числу особо тревожных тенденций в молодежной среде относится отставание уровня образования от уровня достигнутого наиболее развитыми странами; ускорение падения престижа общего и профессиональнотехнического образования; увеличение числа молодежи начинающей трудовую деятельность с низким уровнем образования и не имеющей желания продолжать...
25399. Рынок труда, занятость и безработица: понятия, виды и основные характеристики 24.08 KB
  В научной литературе сложилось три подхода к определению рынка труда: В узком смысле рынок труда РТ – это спрос и предложение рабочей силы которое за счет этих двух составляющих обеспечивает размещение рабочих мест. В рамках этого подхода раскрывается основа механизма рынка труда взаимодействия спроса и предложения. Это определение не учитывает такие аспекты как подготовка кадров мотивация труда и т.
25401. Технологии работы службы занятости 52.5 KB
  Технологии работы службы занятости. регистрация в целях поиска подходящей работы; 3. Кроме того граждане имеют право получить следующую информацию: о состоянии рынка труда; о наличии вакантных мест об оплате и других условиях труда с целью выбора работы; о возможностях профессиональной подготовки переподготовки повышения квалификации; о порядке и условиях регистрации в целях поиска подходящей работы регистрации и перерегистрации в качестве безработных; о правах и ответственности в области занятости населения и защиты от...
25402. Психосоциальная работа и ее роль в системе социальной работы. Основные психосоциальные технологии, используемые в деятельности специалиста по социальной работе 47.5 KB
  Психосоциальная работа и ее роль в системе социальной работы. на стыке социальной работы и практической психологии возникла новая отрасль психосоциальная работа задача которой преодоление социальной дезадаптации человека оздоровление межличностных отношений в профессиональной и семейнобытовой сферах. В центре внимания психосоциальной работы находится психика человека которая обобщенно понимается как система управления индивидуальной жизнью и поведением то есть жизнедеятельностью. Центральный тезис психосоциальной работы здоровая...