Символы кириллицы выводит некорректно. Как сделать чтобы выводился читабельный текст на русском языке? Тип приложения - не Qt, Qt Creator 4.5.0 основан на Qt 5.10.0. Win7.
|
Использование функций при программировании на C++
4.2 Передача параметров в функцию
Обмен информацией между вызываемой и вызывающей функциями осуществляется с помощью механизма передачи параметров.Список_переменных, указанный в заголовке функции, называется формальными параметрами или просто параметрами функции. Список_переменных в операторе вызова функции — это фактические параметры или аргументы.
Механизм передачи параметров обеспечивает замену формальных параметров фактическими параметрами и позволяет выполнять функцию с различными данными. Между фактическими параметрами в операторе вызова функции и формальными параметрами в заголовке функции устанавливается взаимно однозначное соответствие. Количество, типы и порядок следования формальных и фактических параметров должны совпадать.
Передача параметров выполняется следующим образом. Вычисляются выражения, стоящие на месте фактических параметров. В памяти выделяется место под формальные параметры в соответствии с их типами. Затем формальным параметрам присваиваются значения фактических. Выполняется проверка типов и при необходимости выполняется их преобразование.
Передача параметров в функцию может осуществляться по значению и по адресу.
При передаче данных по значению функция работает с копиями фактических параметров, и доступа к исходным значениям аргументов у неё нет. При передаче данных по адресу в функцию передаётся не переменная, а её адрес, и, следовательно, функция имеет доступ к ячейкам памяти, в которых хранятся значения аргументов. Таким образом, данные, переданные по значению, функция изменить не может, в отличие от данных, переданных по адресу.
Если требуется запретить изменение параметра внутри функции, используют модификатор const. Заголовок функции в общем виде будет выглядеть так:
тип имя_функции ( const тип_переменной* имя_переменной, ...)
Например:
#include <iostream> using namespace std; int f1 ( int i ) //Данные передаются по значению { return ( i ++); } int f2 ( int * j ) //Данные передаются по адресу. При подстановке фактического параметра, //для получения его значения, применяется операция разадресации * . { return ( ( * j )++); } int f3 ( const int * k ) //Изменение параметра не предусмотрено . { return ( ( * k )++); } int main ( ) { int a; cout<<"a="; cin >>a; f1( a ); cout<<"a="<<a<<"\n"; f2(&a ); //Для передачи фактического параметра используется операция взятия адреса & . cout<<"a="<<a<<"\n"; f3(&a ); cout<<"a="<<a<<"\n"; return 0; }
Результат работы программы:
Введено значение переменной .
a=5
Значение переменной a после вызова функции не изменилось.
a=5
Значение переменной a после вызова функции изменилось.
a=6
Значение переменной a после вызова функции не изменилось.
a=6
Удобно использовать передачу данных по адресу, если нужно чтобы функция изменяла значения переменных в вызывающей программе.
Далее приведён пример программы, в которой исходя из радианной меры некоторого угла вычисляется величина смежного с ним угла. На экран выводятся значения углов в градусной мере. Функция degree выполняет перевод из радианной меры в градусную2Чтобы найти градусную меру угла по заданной радианной, нужно помножить число радиан на; если из полученной дроби выделить целую часть, то получим градусы; если из числа полученного умножением оставшейся дробной части на 60, выделить целую часть, получим минуты; секунды вычисляются аналогично из дробной части минут.. Эта функция ничего не возвращает. Её аргументами являются значение переменной rad, определяющее величину угла в радианах, и адреса переменных deg, min, sec, в которых будут храниться вычисленные результаты — градусная мера угла.
#include <iostream> #include <math.h> #define PI 3.14159 using namespace std; void degree ( double rad, int * deg, int * min, int * sec ) { * deg= floor ( rad * 180/ PI ); * min=floor ( ( rad * 180/ PI -(* deg ) ) * 60); * sec=floor ( ( ( rad * 180/ PI -(* deg ) ) *60 -(* min ) ) * 60); } int main ( ) { int DEG, MIN, SEC; double RAD; cout<<" Inpout :"<<endl; cout << " Value in radian A="; cin >>RAD; degree (RAD,&DEG,&MIN,&SEC); cout << DEG<<" "<<MIN<<" "<<SEC << endl; degree ( PI- RAD,&DEG,&MIN,&SEC); cout << DEG<<" "<<MIN<<" "<<SEC << endl; return 0; }