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.  Изучение порядка вызова функций
  •  разработать программу вычисления факториала числа с использованием пользовательской функции;
  •  отладить и запустить ее в среде программирования.


 

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

1937. Противоречие как движущая сила воспитательного процесса в современных условиях 21.81 KB
  Общефилософский закон единства и борьбы противоположностей. Внешние противоречия, порожденные взаимодействием человека с окружающим миром. Индивидуальные противоречия, обусловленные конкретной ситуацией развития каждого человека.
1938. Стадии развития воспитательного коллектива. Средства формирования коллектива. Стили педагогического управления детским коллективом 22.28 KB
  Коллектив как специально организованное объединение учащихся. Процесс формирования коллектива. Стили управления детским коллективом.
1939. НОВЫЕ ПОДХОДЫ К СИНТЕЗУ ФОТОХРОМНЫХ ДИГЕТАРИЛЭТЕНОВ 1.19 MB
  Получение диарил(гетарил)ацетиленов из терминальных ацетиленов. Присоединение комплексов переходных металлов к диарилацетиленам. Попытки проведения внутримолекулярной конденсации 2,2,4,4-тетраметил-2,4-бис(2,5-диметил-3-тиенил)-3-тиапентан-1,5-диона. Синтез дитиенилэтенов с помощью внутри- и межмолекулярных конденсаций карбонильных соединений ряда тиофена по мак-мурри.
1940. Анекдот как средство переживания национальной идентичности (на материале анализа еврейских анекдотов) 1.17 MB
  Анализ теоретических и эмпирических подходов к исследованию идентичности. Изучение особенностей еврейской этнической идентичности. Социально-психологические аспекты проблемы комического. Еврейский анекдот как материал изучения еврейской национальной идентичности. Различные подходы к анализу текстов. Классификация и количественный анализ еврейских анекдотов
1941. Концепт Труд как объект идеологизации 1.17 MB
  Семантическое ядро концепта труд в русском языке, лексическое значение и концепт в научно-лингвистической интерпретации. Семантическая структура слов труд, работа. Витки идеологизации концепта труд в газете Магнитогорский рабочий.
1942. Функциональное состояние сердечно-сосудистой системы организма детей с учетом их конституциональных особенностей 1.17 MB
  Морфофункциональные особенности здоровых детей в норме и при врожденной патологии сердечно-сосудистой системы. Конституциональный подход в фундаментальной биологической характеристике целостного организма. Клиническая характеристика врожденной сердечно-сосудистой патологии. Возрастные и конституциональные особенности функционирования сердечно-сосудистой системы организма детей.
1943. Только трудом велик человек 25.02 KB
  Воспитание трудолюбия, творческого отношения к учению, труду, жизни. Ценности: уважение к труду, творчество и созидание, стремление к познанию и истине, целеустремлённость и настойчивость, бережливость, трудолюбие.
1944. Воспитательный процесс в школе 24.85 KB
  Организационно-педагогические мероприятия. Воспитание положительного отношения школьников к учению. Воспитание нравственных ценностей у школьников. Физическая культура и здоровье учащихся. Работа с родителями и общественностью.
1945. Добро починається з тебе 24.1 KB
  Мета: допомогти учням з’ясувати сутність понять добро, доброта, милосердя як принципів людського буття, навчити учнів критично ставитися до своїх вчинків та вчинків інших людей, аналізувати матеріал з різних джерел і самостійно робити правильні висновки.