Исходник программы - класс для работы с комплексными числами в Си(C++)


Добавил:DMT
Дата создания:29 апреля 2008, 15:51
Дата обновления:29 апреля 2008, 15:51
Просмотров:38424 последний сегодня, 21:21
Комментариев: 2
В этой программе рассмотрен вывод объектов собственного класса с использованием класса ostream, функция которого будет определена дружественной для нашего класса. Это достигается перегрузкой операторов функций << (для объекта cout класса ostream), чтобы они поддерживали работу с нашим созданным классом. Помимо этого в программе будут рассмотрены перегрузки таких операторов, как сложение (+), вычитание (-), умножение (*) и деление (/). Кроме того, в программе предусмотрены конструктор по умолчанию; и соответственно для удаления объекта из памяти без завершения программы предусмотрен деструктор. Еще в классе рассмотрена функция-элемент abs(), которая возвращает модуль комплексного числа типа float
Код на C++
  1. #include <iostream.h>
  2. #include <conio.h>
  3. #include <math.h>
  4.  
  5. class Complex
  6. {
  7. private:
  8. double real; // Действительная часть
  9. double image; // Мнимая часть
  10. public:
  11. Complex() {}; // Конструктор по умолчанию
  12. Complex(double r) { real = r; image = 0; } // Конструктор
  13. Complex(double r, double i) { real = r, image = i; } // Конструктор
  14. ~Complex() {} // Деструктор
  15. float abs() // Модуль комплексного числа
  16. {
  17. return sqrt(real * real - image * image);
  18. }
  19.  
  20. Complex operator+(Complex &); // Перегрузка оператора сложения
  21. Complex operator-(Complex &); // Перегрузка оператора вычитания
  22. Complex operator*(Complex &); // Перегрузка оператора умножения
  23. Complex operator/(Complex &); // Перегрузка оператора деления
  24.  
  25. // Перегрузка функции-оператора << для вывода класса Complex
  26. friend ostream &operator<<(ostream &, Complex &);
  27.  
  28. // Перегрузка функции-оператора >> для ввода класса Complex
  29. friend istream &operator>>(istream &, Complex &);
  30. };
  31.  
  32. // Перегрузка +
  33. Complex Complex::operator+(Complex &fp1)
  34. {
  35. fp1.real = real + fp1.real;
  36. fp1.image = image + fp1.image;
  37. return fp1;
  38. }
  39.  
  40. // Перегрузка -
  41. Complex Complex::operator-(Complex &fp1)
  42. {
  43. fp1.real = real - fp1.real;
  44. fp1.image = image - fp1.image;
  45. return fp1;
  46. }
  47.  
  48. // Перегрузка *
  49. Complex Complex::operator*(Complex &fp1)
  50. {
  51. double i, j;
  52. i = real * fp1.real - image * fp1.image;
  53. j = real * fp1.image + fp1.real * image;
  54. fp1.real = i;
  55. fp1.image = j;
  56. return fp1;
  57. }
  58.  
  59. // Перегрузка /
  60. Complex Complex::operator/(Complex &fp1)
  61. {
  62. double k, i, j;
  63. k = fp1.real * fp1.real + fp1.image * fp1.image;
  64. i = (real * fp1.real + image * fp1.image) / k;
  65. j = (fp1.real * image - real * fp1.image) / k;
  66. fp1.real = i;
  67. fp1.image = j;
  68. return fp1;
  69. }
  70.  
  71. // Перегрузка оператора <<
  72. ostream &operator<< (ostream &fo, Complex &fp)
  73. {
  74. if (fp.image < 0) fo << fp.real << "+i(" << fp.image << ")\n";
  75. else fo << fp.real << "+i" << fp.image << "\n";
  76.  
  77. return fo;
  78. }
  79.  
  80. // Перегрузка оператора >>
  81. istream &operator>>(istream &fi, Complex &fp)
  82. {
  83. cout << "Введите действительную часть: ";
  84. fi >> fp.real;
  85. cout << "Введите мнимую часть: ";
  86. fi >> fp.image;
  87. return fi;
  88. }
  89.  
  90. void main()
  91. {
  92. clrscr();
  93.  
  94. // Комплексные числа
  95. Complex c1, c2, c3, c4, c5;
  96.  
  97. // Ввод комплексных чисел
  98. cin >> c1;
  99. cin >> c2;
  100. cin >> c3;
  101. cin >> c4;
  102. cin >> c5;
  103.  
  104. // Вывод комплексных чисел
  105. cout << "\nc1 = " << c1;
  106. cout << "c2 = " << c2;
  107. cout << "c3 = " << c3;
  108. cout << "c4 = " << c4;
  109. cout << "c5 = " << c5 << '\n';
  110.  
  111. cout << "Модуль c1: " << c1.abs() << "\n\n";
  112.  
  113. // Вывод результатов операций
  114. cout << "c1 + c2 = " << (c1 + c2);
  115. cout << "c1 - c3 = " << (c1 - c3);
  116. cout << "c1 * c4 = " << (c1 * c4);
  117. cout << "c1 / c5 = " << (c1 / c5);
  118.  
  119. getch();
  120. }
  121.  
  122.  
При использовании обязательна ссылка на http://DMTSoft.ru
Результаты работы программы
Введите действительную часть: 9
Введите мнимую часть: 8
Введите действительную часть: 7
Введите мнимую часть: 6
Введите действительную часть: 5
Введите мнимую часть: 4
Введите действительную часть: 3
Введите мнимую часть: 2
Введите действительную часть: 1
Введите мнимую часть: 2

c1 = 9+i8
c2 = 7+i6
c3 = 5+i4
c4 = 3+i2
c5 = 1+i2

Модуль c1: 4.123106

c1 + c2 = 16+i14
c1 - c3 = 4+i4
c1 * c4 = 11+i42
c1 / c5 = 5+i(-2)
up

Комментарии для "Исходник программы - класс для работы с комплексными числами в Си(C++)"


Пользователь: iat
Сообщений: 2
Статус: Незримый
Зарегистрирован:
6 декабря 2008, 19:16
Был:7 декабря 2008, 0:10
iat
smsup
Дата: 6 декабря 2008, 20:46 Сообщение № 1
плз пришлите полный алгоритм на мэйл(iat_08@mail.ru)
Пользователь: sonyrik
Сообщений: 1
Статус: Незримый
Зарегистрирован:
19 декабря 2008, 23:26
Был:29 декабря 2008, 20:23
sonyrik
smsup
Дата: 19 декабря 2008, 23:28 Сообщение № 2
Здравствуйте, пришлите плиз исходник на sonyrik@inbox.ru