Advertisement
dllbridge

Untitled

Dec 4th, 2022
922
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.54 KB | None | 0 0
  1.  
  2.  
  3. #include <iostream>
  4. using namespace std;
  5.  
  6.  
  7.  
  8.  
  9. int  a,       //    числитель 1-й дроби   Требуется в ответе указать чему равна 1-я дробь.
  10.      b,       //  знаменатель 1-й дроби                                              a/b  
  11.      c = 3,   //    числитель 2-й дроби
  12.      d = 7,   //  знаменатель 2-й дроби
  13.      p,       //    числитель 3-й дроби  
  14.      q;       //  знаменатель 3-й дроби
  15.  
  16.  
  17.  
  18. int MaxDenominator(int);
  19. int checking_the_correct_fraction(int k, int p);
  20.  
  21.  
  22. ////////////////////////////////////////////////////
  23. int main()                                        //
  24. {
  25.    
  26.     int res = MaxDenominator(1000000);    
  27.    
  28.     if(res == 1)
  29.     {
  30.        
  31.        cout << "The fraction to the left of 3/7 is "<< a <<"/"<< b << endl;
  32.            
  33.        if(checking_the_correct_fraction(a, b) == 1)
  34.             cout << "Checked and correct." << endl;
  35.        else cout << "Error ! ! !"          << endl;                
  36.     }
  37.     else cout << "Inadmissibly small denominator. Less than 19"<< endl;
  38.  
  39.  
  40.     cin >> c; //  Пауза перед завершением программы.
  41. }
  42.  
  43.  
  44.  
  45.  
  46.  
  47.  
  48.  
  49.  
  50. ////////////////////////////////////////////////////
  51. int MaxDenominator(int nMaxD)                     //  
  52. {
  53.    
  54.     nMaxD  -= 12;  
  55.     int d   = nMaxD % 7;
  56.    
  57.     nMaxD -= d;
  58.        
  59.     if(nMaxD < 1)   return 0;  
  60.            
  61.     a   = (nMaxD * 3)/7 +  5;                     //  Найден   числитель ЛЕВОЙ дроби      
  62.     b   =  nMaxD        + 12;                     //  Найден знаменатель ЛЕВОЙ дроби
  63.          
  64. return 1;  
  65. }
  66. //  47 - 12 = 35
  67. //  35 /  7 =  5
  68. //   5 *  3 = 15 (+ 5) =   числитель
  69. //   5 *  7 = 35 (+12) = знаменатель  
  70.  
  71.  
  72.  
  73.  
  74.  
  75.  
  76. //  Возвращает: 0, если дробь неправильная
  77. //              1, если правильная
  78. ////////////////////////////////////////////////////  k - это числитель
  79. int checking_the_correct_fraction(int k, int p)   //  p -   знаменатель
  80. {
  81.    
  82.     if(k >= p)  return 0;                         //  Числитель не меньше знаменателя
  83.    
  84.     while(p > 0)
  85.     {
  86.         int c = k % p;                            //  Алгоритм Евклида (НОД)
  87.         k = p;
  88.         p = c;
  89.     }
  90.    
  91.     if(k != 1) return 0;                          //  Есть общий множитель больше 1 (единицы)
  92.    
  93. return 1;    
  94. }
  95.  
  96.  
  97.  
  98.  
  99.  
  100.  
  101.  
  102.  
  103.  
  104.  
  105.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement