Функции. Основные принципы структурной методологии. Принцип формальности. Принцип иерархического упорядочивания, страница 11

maxmin (a ,b); maxmin (a, c);        //a  получает максимальное значение    maxmin (b, c);                                 //c получает максимальное значение    cout << a  <<"  " << b << "  "  << c << endl;

getch ();

return 0;

}

void maxmin (double & x, double &y)     //определение функции

{double r;

if(x < y) { r =x; x= y; y=r;}

}

Пример 5. Опишем функцию cont (s), определяющую континент, на котором находится страна. Используем функцию для изменения значения переменной t на противоположное, если страны x и y находятся на разных континентах.

#include <iostream.h>

enum  strana {Avstria, Egypet, Italia, Peru, Usa, Belarus}; enum continent {Amerika, Aphrika, Europe, Error}; continent cont (strana s);                       //прототип функции

main ()

{strana  x, y;

bool t=true;

int k1, k2;

cout << "bool=" << t << endl;                           //начальное значение t

cout << “Input strana (2): 0 – Avstria, 1 – Egypet, ...5 – Belarus\n”; cin >> k1 >> k2;

x= static_cast<strana> (k1);

y= static_cast<strana> (k2);

if ((cont(x)==3 )||( cont(y)==3)) {cout <<"strana : ?"; return 1 ;} if (cont (x) !=cont (y))  t = ! t; cout << "bool=" <<  t << endl ;                      //конечное значение t

return 0 ;

}

continent cont (strana s)                           //определение функции {continent con;

switch ( s)      {  case Avstria:

case  Italia:

case  Belarus:  con = Europe; break;                         case  Egypet: con = Aphrika; break;                         case  Peru:

case Usa:  con = Amerika; break;

default:   con = Error;

}

return (con);

}

Пример 6. Выделение целой и дробной частей вещественного числа. Обратите внимание на операцию приведения типа static_cast.

#include <iostream.h>

int main()

   {

void intfrac(float, float&, float&);     //прототип функции, передачапараметровпоссылке                                                       

float number, intpart, fracpart;         

do {

cout << "\nEnter a real number: \n ";    

cin >> number;

intfrac(number, intpart, fracpart);  //вызов функции, неинициализированные                                           // переменные intpart, fracpart передаются для возврата результата

cout  << "Integer part is " << intpart << endl;

cout  << ", fraction part is " << fracpart << endl;

      } while (number != 0.0);                   //завершение работы, если введено 0.0

return 0;

   }

//-------------------------------------------------------------void intfrac(float n, float& intp, float& fracp)        // определение функции

{

long temp = static_cast<long>(n);     //конвертирование в long int для выделения целой части

intp = static_cast<float>(temp);               //конвертирование назад в тип  float

fracp = n - intp;                                         //нахождение дробной части

}

Использование ссылок в качестве формального параметра

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

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