Главная страница
Навигация по странице:

  • Цель работы

  • Подпрограмма

  • Вызов функции

  • Область действия переменных

  • При объявлении глобальные переменные обнуляются.

  • Указатель на функцию

  • методичка. метода по ООП для практики. Лабораторная работа 1. Линейный вычислительный процесс 2 Общие теоретические сведения 2 Создание оконного приложения 6


    Скачать 1.1 Mb.
    НазваниеЛабораторная работа 1. Линейный вычислительный процесс 2 Общие теоретические сведения 2 Создание оконного приложения 6
    Анкорметодичка
    Дата11.01.2022
    Размер1.1 Mb.
    Формат файлаdoc
    Имя файламетода по ООП для практики.doc
    ТипЛабораторная работа
    #328342
    страница9 из 19
    1   ...   5   6   7   8   9   10   11   12   ...   19

    Лабораторная работа №4. Функции пользователя




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

    4.1. Краткие теоретические сведения


    Подпрограмма – это именованная и определенным образом оформленная группа операторов, вызываемая по мере необходимости.

    В языке С++ в качестве подпрограмм используют функции, которые должны быть декларированы до их первого использования. Предварительное описание функции называется прототипом, который обычно размещается в начале программы (*.cpp) либо в заголовочном файле (*.h) и сообщает компилятору о том, что далее в программе будет приведен ее полный текст, т.е. реализация.

    Описание прототипа имеет следующий вид:

    тип_результата ID_функции (список типов параметров);

    а определение функции имеет следующую структуру:

    тип_результата ID_функции (список параметров)

    {

    код функции

    return результат;

    }

    Результат возвращается из функции в точку вызова при помощи оператора return и преобразуется к типу, указанному в заголовке функции. Если тип функции не указан, то по умолчанию устанавливается тип int, если же функция не возвращает результата, то следует указать пустой тип void. Список параметров состоит из перечня типов и ID параметров, разделенных запятыми.

    Из функции можно передать только одно значение, при необходимости возвратить несколько – в списке параметров используют указатели.

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

    int Min_x_y(int x, int y) {

    return (x
    }
    Вызов функции имеет следующий формат:

    ID_функции(список аргументов);

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

    Вызов предыдущей функции может иметь вид: min = Min_x_y(a, b);

    Область действия переменных

    Область действия переменной – это правила, которые устанавливают, какие данные доступны из текущего места программы, и определяют переменные двух типов: глобальные и локальные.

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

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

    В языке С каждая переменная принадлежит одному из четырех классов памяти – автоматической (auto), внешней (extern), статической (static) и регистровой (register). Тип памяти указывается перед спецификацией типа, например, register int a; или static double b; По умолчанию устанавливается класс auto и переменные размещаются в стеке.

    Указатель на функцию

    Функции могут быть использованы в качестве формальных параметров, для этого используется указатель на функцию. Например, указатель р на функцию, возвращающую результат типа double и имеющую два параметра doublet и int, объявляется следующим образом:

    double (*p)(double, int);

    Используя операцию typedef, тип такого указателя может быть объявлен так

    typedef double (*TFun)(double, int);

    4.2. Пример выполнения задания


    Написать программу вычисления выбранной функции, вид которой в свою очередь передается в качестве параметра в функцию вывода (Out_Rez).

    4.2.1. Создание оконного приложения


    Панель диалога с полученными результатами представлена на рис. 4.1, а текст программы может иметь следующий вид:

    . . .

    #include "math.h"

    //------------ Декларация типа указателя на функции -------------------------

    typedef double (*TFun)(double);

    //------------Декларации прототипов функций Пользователя ---------------

    double fun1(double);

    double fun2(double);

    void Out_Rez(TFun, double, double, double, TMemo*);

    //---------------------------------------------------------------------------

    void __fastcall TForm1::FormCreate(TObject *Sender)

    {

    Edit1->Text="0,1"; Edit2->Text="3"; Edit3->Text="0,3";

    Memo1->Clear(); Memo2->Clear();

    RadioGroup1->ItemIndex=0;

    }

    //---------------------------------------------------------------------------

    void __fastcall TForm1::Button1Click(TObject *Sender)

    {

    double a, b, h;

    a = StrToFloat(Edit1->Text);

    b = StrToFloat(Edit2->Text);

    h = StrToFloat(Edit3->Text);

    switch(RadioGroup1->ItemIndex) {

    case 0: Out_Rez (fun1,a,b,h,Memo1); break;

    case 1: Out_Rez (fun2,a,b,h,Memo2); break;

    }

    }



    Рис. 4.1
    //---------- Реализации функций Пользователя ---------------------------------

    double fun1( double r){

    return 2*exp(r*r);

    }

    double fun2(double r) {

    return pow(sin(r), 2);

    }

    void Out_Rez (TFun f,double xn,double xk,double h,TMemo *mem) {

    for(double x=xn; x<=xk; x+=h)

    mem->Lines->Add(" x = "+FloatToStrF(x,ffFixed,8,2)+

    " y = "+FloatToStrF(f(x),ffFixed,8,4));

    }

    4.2.2. Создание консольного приложения


    Текст программы может выглядеть следующим образом:

    . . .

    typedef double (*TFun)(double); // Декларация типа указателя на функцию

    double fun1(double); // Декларации прототипов функций

    double fun2(double);

    void Out_Rez (TFun,double,double,double);

    void main()

    {

    double a, b, h;

    puts("Input a,b,h"); scanf("%lf%lf%lf", &a, &b, &h);

    puts("\n\t Function - 2*exp(x)"); Out_Rez (fun1,a,b,h);

    puts("\n\t Function - sin(x)*sin(x)"); Out_Rez (fun2,a,b,h);

    puts("\n Press any key ... ");

    getch();

    }

    //---------- Реализации функций пользователя ---------------------------------

    double fun1( double r){

    return 2*exp(r*r);

    }

    double fun2(double r) {

    return pow(sin(r), 2);

    }

    void Out_Rez (TFun f,double xn,double xk,double h) {

    for(double x=xn; x<=xk; x+=h)

    printf(" x = %5.2lf, y = %8.4lf\n",x,f(x));

    }


    Результат выполнения программы:



    1   ...   5   6   7   8   9   10   11   12   ...   19


    написать администратору сайта