Суббота, 18.05.2024, 19:54
Главная Регистрация RSS
Приветствую Вас, Гость
Меню сайта
Категории раздела
Форма входа
ДРУЗЬЯ САЙТА

Вызвать мастера в Красноярске

8 983 207 5474

8 902 918 9334

8 933 332 3164

---------------------------------

Запчасти бытткхники

  • Велес т.2935600
  • СЦ Близнецов т.2296595
  • Вираж
  • Красраб 110 т.2589503
  • Комплекстур Щорса30 т.2606797
  • Радиодетали

  • Якорный 9 т.2688317
  • Воронова 16 т.2202990
  • Красраб 125а т.2456544
  • Профи т.2702737
  • Дайте две т.+79237713323
  • Электрика

  • Электро +
  • Планета электрика
  • ЗАКЛАДКИ
    Поиск
    Статистика

    Онлайн всего: 1
    Гостей: 1
    Пользователей: 0
    Главная » Статьи » C++ Builder » Простые примеры

    Факториал заданного числа вычислить

    Факториал заданного числа вычислить

    Как вычислить Факториал заданного числа

     

    С++ Builder 6 

    Компиляция и сборка под Windows 10

    Интересно что Рекурсия вычисляет правильно до 30! числа

    а может и дальше 

    А циклы начинают врать с 14!

    Исходник здесь

    =

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

    #include <vcl.h>
    #pragma hdrstop

    #include "Unit1.h"
    //---------------------------------------------------------------------------
    #pragma package(smart_init)
    #pragma resource "*.dfm"
    TForm1 *Form1;
    //---------------------------------------------------------------------------
    __fastcall TForm1::TForm1(TComponent* Owner)
            : TForm(Owner)
    {
    }
    //----------цикл for-----------------------------------------------------------------

    float factorial(int N)
    {
            if(N==0) return 1;
            if(N==1) return 1;

             float F = 1;

        for(int i=1; i <= N; ++i)
        {
            F = F*i;
        }
        return F; // Возвращаем ответ

    }
    //----------цикл while-------------------------------------
    float factorial1(int N)
    {
            if(N==0) return 1;
            if(N==1) return 1;

             float F = 1;  int  x  = 1;

            while( x <=  N)
            {
              F = F*x;
              x++;
            }
        return F; // Возвращаем ответ
    }
    //-----------рекурсия--------------------------------
             float factorial2(int N)
    {
       if(N==0) return 1;
       if(N==1) return 1;

       return N*factorial2(N-1);

    }
    //-----------------------------------------
    void __fastcall TForm1::FormCreate(TObject *Sender)
    {
      S = Image1->Height-10; // нуливая точка для построения графика нижний левый угол
      M = 20; //маштаб множитель для координаты Х чтоб видно было 
    }
    //---------------------------------------------------------------------------

    void __fastcall TForm1::Button1Click(TObject *Sender)
    {
    //---------СОЗДАЕМ points для построения графика на шесть точек-----------------------------------------------------
               TPoint points[CountPoint];
               points[0].x  = 0 ;
               points[0].y = S;
    //---------------------цвет и толщина лин для осей----------------------------------------
               Image1->Canvas->Pen->Color=clBlack;
               Image1->Canvas->Pen->Width=2;
    //----------------------ось игрек строим-----------------------------------------
               Image1->Canvas->MoveTo(1,S) ;
               Image1->Canvas->LineTo(1,0) ;
    //--------------------ось икс строим----------------------------------------------------
               Image1->Canvas->MoveTo(1,S) ;
               Image1->Canvas->LineTo(Image1->Width ,S) ;   
    //----------------------засечки на оси игрек через 10 точек длина засечки 5 точек------------------------------------------------
                for(int z=1; z<S; z++) {

               Image1->Canvas->MoveTo(1,S-z*10) ;
               Image1->Canvas->LineTo(5,S-z*10) ;
                                 }
    //-------------очищаем -ListBox1---------------------------------------------------
              ListBox1->Items->Clear();
    //--------выбираем какая функ будет работать-----
    //--------имя функции - ее адрес, присваеваем указателю; цвет графика------------------------------------------------
               if(RadioButton1->Checked==true ) {pF  = factorial; Image1->Canvas->Pen->Color=clRed; }
               if(RadioButton2->Checked==true ) {pF  = factorial2; Image1->Canvas->Pen->Color=clBlue;}
               if(RadioButton3->Checked==true ) {pF = factorial1; Image1->Canvas->Pen->Color=clGreen; }

                N = StrToInt( Edit2->Text) ;// в водим число
                 AnsiString valueFakt =  "" ;
    //-----------начинаем цикл подсчета факториала--------------------------------------------------
               for(int i=1; i <= N; i++){
    //------------заполняем points значениями для первых шести точек-------------------------------------------------
             if( i < CountPoint  ){ points[i].x =  i  *  M ; points[i].y = S  - pF(i); }

           valueFakt =  FloatToStr( pF(i) ); //вычисляем факториал;  значен факториала переводим в строку

           ListBox1->Items->Add(IntToStr( i)  + "-----"  + valueFakt);//строку добав в  ListBox1

              }


    //--------------строим график по шести точкам---------------------------------
    //-------шестую точку не видно но она есть выходит за размер Image1 720 пиксел--------------------------------------------------------
           Image1->Canvas->Polyline(points ,CountPoint-1);
    //--------------выводим текст номера точек ----------------------------------------------------------
           Image1->Canvas->TextOutA(points[1].x, points[1].y,"1"  ) ;
           Image1->Canvas->TextOutA(points[2].x, points[2].y,"2"  ) ;
           Image1->Canvas->TextOutA(points[3].x, points[3].y,"3"  ) ;
           Image1->Canvas->TextOutA(points[4].x, points[4].y,"4"  ) ;
           Image1->Canvas->TextOutA(points[5].x, points[5].y,"5"  ) ;
           Image1->Canvas->TextOutA(points[6].x, points[6].y,"6"  ) ;

    }
    //------------В Edit2 только цифры и забой---------------------------------------------------------------
    void __fastcall TForm1::Edit2KeyPress(TObject *Sender, char &Key)
    {
      if(Key >= '0' && Key <= '9' || Key == VK_BACK ) return;

                Key =  0;
    }
    //---------Очистка ListBox1 и стираем Canvas------------------------------------------------------------------

    void __fastcall TForm1::RadioButton1Click(TObject *Sender)
    {
       ListBox1->Items->Clear();
       Image1->Canvas->Brush->Color = clWhite;
       Image1->Canvas->FillRect(Image1->Canvas->ClipRect ) ;
    }
    //---------------------------------------------------------------------------

    void __fastcall TForm1::RadioButton3Click(TObject *Sender)
    {
        ListBox1->Items->Clear();
       Image1->Canvas->Brush->Color = clWhite;
       Image1->Canvas->FillRect(Image1->Canvas->ClipRect ) ;
    }
    //---------------------------------------------------------------------------

    void __fastcall TForm1::RadioButton2Click(TObject *Sender)
    {
        ListBox1->Items->Clear();
       Image1->Canvas->Brush->Color = clWhite;
       Image1->Canvas->FillRect(Image1->Canvas->ClipRect ) ;
    }
    //---------значения в ListBox1 выделить в ListBox2------------------------------------------------------------------
    void __fastcall TForm1::ListBox1Click(TObject *Sender)
    {
      ListBox2->SetFocus();
      ListBox2->ItemIndex= ListBox1->ItemIndex ;
    }
    //---------------------------------------------------------------------------

    =

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

    #ifndef Unit1H
    #define Unit1H
    //---------------------------------------------------------------------------
    #include <Classes.hpp>
    #include <Controls.hpp>
    #include <StdCtrls.hpp>
    #include <Forms.hpp>
    #include <ExtCtrls.hpp>
    //------Функции объявляем глобально в  не класса TForm1------------------
    //------для того чтобы укахателю pF можно было передать адрес выбраной функции---------------------------------------------------------------
    float factorial2(int N);
    float factorial(int N);
    float factorial1(int N);
    //-------------------------------------
    class TForm1 : public TForm
    {
    __published:    // IDE-managed Components
            TButton *Button1;
            TEdit *Edit2;
            TRadioGroup *RadioGroup1;
            TRadioButton *RadioButton1;
            TRadioButton *RadioButton2;
            TListBox *ListBox1;
            TImage *Image1;
            TRadioButton *RadioButton3;
            TLabel *Label1;
            TListBox *ListBox2;
            TEdit *Edit1;
            void __fastcall Button1Click(TObject *Sender);
            void __fastcall Edit2KeyPress(TObject *Sender, char &Key);
            void __fastcall RadioButton1Click(TObject *Sender);
            void __fastcall RadioButton3Click(TObject *Sender);
            void __fastcall RadioButton2Click(TObject *Sender);
            void __fastcall FormCreate(TObject *Sender);
            void __fastcall ListBox1Click(TObject *Sender);
    private:    // User declarations
    public:        // User declarations

            long int N ;   // фактоиал числа
            long int S ;   // начальная точка для построения графика
            long int M ;   // множитель координаты х

            static const int CountPoint =7 ;  //количество точек для построен графика
            float (*pF)(int ); // указатель на функцию

            __fastcall TForm1(TComponent* Owner);
    };
    //---------------------------------------------------------------------------
    extern PACKAGE TForm1 *Form1;
    //---------------------------------------------------------------------------
    #endif

    =

    =

    Категория: Простые примеры | Добавил: doka (18.03.2020)
    Просмотров: 619 | Рейтинг: 0.0/0
    Добавлять комментарии могут только зарегистрированные пользователи.
    [ Регистрация | Вход ]