Исходник программы - класс рациональных несократимых дробей m/n, где m - целое число, а n - положительное целое число на Си(C++)


Добавил:DMT
Дата создания:29 апреля 2008, 18:22
Дата обновления:29 апреля 2008, 18:22
Просмотров:22693 последний сегодня, 1:25
Комментариев: 0
Исходник программы - определение точек пересечения прямой с коружностью на Си(C++)
Класс рациональных несократимых дробей m/n, где m - целое число, а n - положительное целое число. Конструктор строит рациональное число по паре целых чисел m и n. По умолчанию n=1. Перегрузить операции сложения, вычитания, унарного минуса, умножения и деления рациональных дробей. Определить операцию вывода в десятичной форме.
Код на C++
  1. #include <iostream.h>
  2. #include <math.h>
  3. #include <conio.h>
  4. #include <stdio.h>
  5.  
  6. class Rat
  7. {
  8. public: //общедоступные элементы
  9. int x, y;
  10. Rat(int x, int y=1): x(x), y(y) {} //конструктор
  11.  
  12. friend Rat operator+(Rat, Rat); //перегрузка операции +
  13. friend Rat operator-(Rat, Rat); //перегрузка операции -
  14. friend Rat operator*(Rat, Rat); //перегрузка операции *
  15. friend Rat operator/(Rat, Rat); //перегрузка операции /
  16.  
  17. void operator--() {x=x-y;} //перегрузка префиксной операции --
  18. void operator--(int) {x=x-y;}//перегрузка постфиксной операции --
  19.  
  20. //функция вывода в десятичной форме
  21. void show() {printf("%.3f", float(x)/float(y));}
  22. };
  23.  
  24. Rat operator+(Rat v, Rat w) //перегрузим операцию сложения
  25. {
  26. v.x=v.x*w.y+w.x*v.y; //формируем числитель дроби
  27. v.y=v.y*w.y; //формируем знаменатель дроби
  28. return v;
  29. }
  30.  
  31. Rat operator-(Rat v, Rat w) //перегрузим операцию вычитания
  32. {
  33. v.x=v.x*w.y-w.x*v.y; //числитель дроби
  34. v.y=v.y*w.y; //знаменатель дроби
  35. return v;
  36. }
  37.  
  38. Rat operator*(Rat v, Rat w) //перегрузим операцию умножения
  39. {
  40. v.x=v.x*w.x;
  41. v.y=v.y*w.y;
  42. return v;
  43. }
  44.  
  45. Rat operator/(Rat v, Rat w) //перегрузим операцию умножения
  46. {
  47. v.x=v.x*w.y;
  48. v.y=v.y*w.x;
  49. return v;
  50. }
  51.  
  52. void main()
  53. {
  54. clrscr();
  55. printf("Класс рациональноых несократимых дробей\n");
  56. Rat v(1),w(1),t(1);
  57. printf ("\nВходные данные:\nv= ");
  58. scanf("%d/%d",&v.x, &v.y);
  59. printf("w= ");
  60. scanf("%d/%d",&w.x,&w.y);
  61. //Проверка на несократимость и положительноть знаменателя
  62. if(v.y>0 && w.y>0 && v.x%v.y!=0 && w.x%w.y!=0)
  63. {
  64. t=v+w;
  65. printf("\nРезультат сложения v+w={%d/%d}=",t.x, t.y);
  66. //функция вывода рационального числа в десятичной форме
  67. t.show();
  68. t=v-w;
  69. printf("\nРезультат вычитания v-w={%d/%d}=",t.x, t.y);
  70. t.show();
  71. t=v*w;
  72. printf("\nРезультат умножения v*w={%d/%d}=",t.x, t.y);
  73. t.show();
  74. t=v/w;
  75. printf("\nРезультат деления v/w={%d/%d}=",t.x, t.y);
  76. t.show();
  77. v--;
  78. printf("\nУнарный постфиксный минус v--={%d/%d}=",v);
  79. v.show();
  80. --v;
  81. printf("\nУнарный префиксный минус --v={%d/%d}=",v);
  82. v.show();
  83. }
  84. else printf("\nОшибка при вводе рационального числа");
  85. getch();
  86. }
При использовании обязательна ссылка на http://DMTSoft.ru
up