русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

Функции. Объявление и определение функции. выполнение функции. Локальные и глобальные переменные C++. Аргументы функции — фактические и формальные. Перегрузка функций. Возвращаемые значения. Массивы

 

Функции.

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

Функция по своей сути — это подпрограмма, которая может манипулировать данными и возвращать некоторое значение. Каждая программа имеет хотя бы дону программу — main().

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

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

Функции возвращают либо некоторое реальное значение либо некоторое значение типа void (то есть «ничего»).

Функция так же может принимать некоторые значения, то есть иметь параметры.

В общем виде объявление функции может иметь вид:

int MyFunction(int some Value, float SameFloat);

Вызов функции имеет вид:

Rezult=MyFunction(12.4,4.7);

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

Существуют три способы объявления функции:

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

Прототип функции имеет вид:

В прототипе используется список формальных параметров.

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

Пример: заголовок функции складывающей два числа.

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

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

#include <iostream.h>
int Add(int x, int y);
int Add(int x,int y)
{
cout << “В Add складываются “ <<x<< “и”<<y<<”\n”;
return (x+y);
}
int main()
{  int a,b,c;
cout <<”Введите два числа:\n”;
cin >>a;
cin >> b;
c=Add(a,b);
   cout <<”a+b=”<<c<<”\n”;
return 0;
}

Макрофункции

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

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

Пример 3.

/* текст программы до обработки препроцессором */
#include<stdio.h>
#define SQUARE(x)  x*x
 void main(void)
{
   int y=5,rez;
printf("квадрат y равен %d\n",SQUARE(y)); printf("квадрат y+2 равен %d\n",SQUARE(y+2)); printf("частное равно %f\n",100./SQUARE(y));
}

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

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

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

inline int Area(int,int);

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

Пример.

#include <iostream.h>
int fib(int n);
int fib(int n)
{ if (n<3)
               return 1;
   else
   return (fib(n-2)+fib(n-1));
}
int main(void)
{
int i,rez;
cout <<"введите число Фибоначи = ";
cin >> i;
rez=fib(i);
cout <<i<<"-oe число Фибоначи ="<<rez<<"\n";
return 0;
}

Результат:

введите число Фибоначи = 6
6-oe число Фибоначи =8

 

Возврат более одного результата

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

Пример.

#include<iostream.h>
#include<conio.h>
//  #include"sqwere.cpp"
#include <math.h>
int sqwere(float a,float b, float c,float *x1,float *x2);
// объявление функции, ниже идут заголовок и тело этой функции
int sqwere(float a,float b, float c,float *x1,float *x2)
{ float   d;
d=b*b-4.*a*c;
if(d<0.)return 0;
*x1=(-b-sqrt(d))/(2.*a);
*x2=(-b+sqrt(d))/(2.*a);
if(d==0.)return 1;
if(d>0)  return 2;
}

 

int main(void)
{
float a,b,c,x1,x2;
int rez;
cout <<"Введите числа\n a:";
cin >>a;
cout <<"\n b=:";
cin >>b;
cout <<"\n c=:";
cin >>c;
// вызов функции с фактическими параметрами
rez=sqwere(a,b,c,&x1,&x2);
switch(rez)
{ case 0: cout << "корней нет \n";break;
  case 1: cout << "корнь один = "<< x1 <<" \n";break;
  case 2: cout << "корней два x1= "<< x1 <<"  x2= "<<x2<<"\n";break;
}
return 0;
}

 

Та же самая программа написана при помощи ссылок, найдите отличия

#include<iostream.h>
#include<conio.h>
#include <math.h>
int sqwere(float a,float b, float c, float &x1,float &x2);
int sqwere(float a,float b, float c,float &x1,float &x2)
{ float   d;
d=b*b-4.*a*c;
if(d<0.)return 0;
x1=(-b-sqrt(d))/(2.*a);
x2=(-b+sqrt(d))/(2.*a);
if(d==0.)return 1;
if(d>0)  return 2;
}

 

int main(void)
{
float a,b,c,x1,x2;
int rez;
cout <<"Введите числа\n a:";
cin >>a;
cout <<"\n b=:";
cin >>b;
cout <<"\n c=:";
cin >>c;
rez=sqwere(a,b,c,x1,x2);
switch(rez)
{ case 0: cout << "корней нет \n";break;
  case 1: cout << "корнь один = "<< x1 <<" \n";break;
  case 2: cout << "корней два x1= "<< x1 <<"  x2= "<<x2<<"\n";break;
}
return 0;
}

Просмотров: 20218

Вы можете --> Заказать программу или Задать вопрос на форуме

Вернуться воглавление


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Полезен материал? Поделись:

Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.