Форум программистов, компьютерный форум CyberForum.ru

ООП. Косплексные числа и операции. - C++

Восстановить пароль Регистрация
 
piran'ka
Сообщений: n/a
28.09.2011, 13:25     ООП. Косплексные числа и операции. #1
Всем доброго времени суток. Помогите пожалуйста с задачей.
Создать класс комплексное число и реализовать операции сложения, вычитания, умножения, деления, перевод из строки в компелксное число.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
// Komplex.cpp : Defines the entry point for the console application.
//
 
#include "stdafx.h"
#include <stdio.h>
#include <conio.h>
#include "string.h"
 
struct complex
{   float Re; float Im;};
 
bool StrToComplex(char*s, complex*x)
{int i,j,j1=1,n=0,f=0,mnim=0,f2=0,f4=0,k=0; bool q=true;
 
n=strlen(s);
x->Re=0;
x->Im=0;i=0;
 
while(i<n&&q==true)
 {while((((s[i]>='0')&&(s[i]<='9'))||(s[i]=='+')||(s[i]=='-')||(s[i]=='i'))&&(i<n))
   {if(s[i]=='i')mnim=1;
    if(s[i]=='i'&&i==n-1){x->Im=1;i=i+n;}
    
    
    if (s[i]=='+'){f=0;}
    if(s[i]=='-'){f=1;f2++;}
    if(mnim==0){if(s[i]>='0'&&s[i]<='9')
                   {x->Re=x->Re*10+(s[i]-'0');}}
    if(mnim==1){if(s[i]>='0'&&s[i]<='9')
                   {x->Im=x->Im*10+(s[i]-'0');}}
    i++;
    k=1;}
 if (k==0) q=false;
 i++;}
 
if((mnim==0&&f==1&&f2==1)||(mnim==1&&f==0&&f2==1)) x->Re=-x->Re;
if(mnim==1&&f==1&&f2==1)x->Im=-x->Im;
if(mnim==1&&f==1&&f2==2){x->Re=-x->Re;x->Im=-x->Im;}
 
return(q);}
 
 
 
 
complex Sum(complex A, complex B)
{complex C;
C.Re=A.Re+B.Re;
C.Im=A.Im+B.Im;
return C;}
 
complex Raz(complex A, complex B)
{complex C;
C.Re=A.Re-B.Re;
C.Im=A.Im-B.Im;
return C;}
 
complex Umn(complex A, complex B)
{complex C;
 C.Re=A.Re*B.Re-A.Im*B.Im;
 C.Im=A.Re*B.Im+A.Im*B.Re;
   return C;}
 
bool Del(complex A, complex B,complex*D)
{if((B.Re!=0)&&(B.Im!=0))
  {(*D).Re=(A.Re*B.Re+A.Im*B.Im)/(B.Re*B.Re+B.Im*B.Im);
  (*D).Im=(A.Im*B.Re-A.Re*B.Im)/(B.Re*B.Re+B.Im*B.Im);
  return true;}
else return false;}
 
int _tmain(int argc, _TCHAR* argv[])
{struct complex A,B,C; complex*D;
bool f,fA,fB;
int n;
char s[50];
 
 
 
printf("Vvedite chislo 1 (format vvoda: a+ib) \n");
gets(s);
fA=StrToComplex(s,&A);
if(fA==true){printf("Re=%f  Im=%f\n",A->Re,A->Im);}
else printf("Error!");
 
printf("\nVvedite chislo 2 (format vvoda: a+ib)\n");
gets(s);
fB=StrToComplex(s,&B);
if(fB==true)printf("Re=%f  Im=%f \n",B->Re,B->Im);
else printf("Error!");
 
if((fA!=false)&&(fB!=false))
{C=Sum(A,B)
printf(" Summa: Re=%f, Im=%f \n", (*C).Re, (*C).Im);
else printf("Error!");
 
C=Raz(A,B)
printf(" Raznost': Re=%f, Im=%f \n", (*C).Re, (*C).Im);
 
C=Umn(A,B)
printf(" Proizvedenie: Re=%f, Im=%f \n", (*C).Re, (*C).Im);
 
f=Del(A,B,D);
if (f==true)
printf(" Chasstnoe: Re=%f, Im=%f \n", (*C).Re, (*C).Im);
else printf("Error!");}
else printf("\nOsibochnoe chislo");
 
    getch();
    return 0;
}
На ее основе надо написать и класс. Не смотрите что не доделано, так как показываю, что работала. Не знаю как обработать ошибку при делении и при переводе строки в число;как вообще вывести на печать этот класс?;как преобразовать функцию StrToComplex в членфункцию. И вообще еще много вопросов! Подскажите пожалуйста

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
// Klass_komp.cpp : Defines the entry point for the console application.
//
 
 
#include "stdafx.h"
#include <stdio.h>
#include <conio.h>
#include "string.h"
 
class complex
{   float Re; float Im;
public:
    complex();
    complex(char*s);
    void Init(float a, float b){Re=a;Im=b;f=1;}
    complex Sum(complex& B);
    complex Raz(complex& B);
    complex Umn(complex& B);
    complex Del(complex& B);
   
 
};
 
complex complex::complex()
{Re=0;Im=0;}
 
complex complex::complex(char *s)
{int i,j,j1=1,n=0,f=0,mnim=0,f1=1,f2=0,f4=0,k=0; bool q=true;
 
n=strlen(s);
x->Re=0;
x->Im=0;i=0;
 
while(i<n&&q==true)
 {while((((s[i]>='0')&&(s[i]<='9'))||(s[i]=='+')||(s[i]=='-')||(s[i]=='i'))&&(i<n))
     {if(s[i]=='i')mnim=1;
      if(s[i]=='i'&&i==n-1){x->Im=1;i=i+n;}
    
    
      if (s[i]=='+'){f=0;}
      if(s[i]=='-'){f=1;f2++;}
      if(mnim==0){if(s[i]>='0'&&s[i]<='9')
                     {x->Re=x->Re*10+(s[i]-'0');}}
      if(mnim==1){if(s[i]>='0'&&s[i]<='9')
                     {x->Im=x->Im*10+(s[i]-'0');}}
      i++;
      k=1;}
  if (k==0) q=false;
  i++;}
 
if((mnim==0&&f==1&&f2==1)||(mnim==1&&f==0&&f2==1))x->Re=-x->Re;
if(mnim==1&&f==1&&f2==1)x->Im=-x->Im;
if(mnim==1&&f==1&&f2==2){x->Re=-x->Re;x->Im=-x->Im;}
 
if(q==true)return(x);
}
 
 
void complex::Init(float a, float b)
{Re=a;Im=b;}
 
complex complex::Sum(complex& B)
{complex C;
C.Re=Re+B.Re;
C.Im=Im+B.Im;
return C;
}
 
complex complex::Raz(complex& B)
{complex C;
C.Re=Re-B.Re;
C.Im=Im-B.Im;
return C;
}
 
complex complex::Umn(complex& B)
{complex C;
C.Re=Re*B.Re-Im*B.Im;
C.Im=Re*B.Im+Im*B.Re;
   return C;}
 
complex complex::Del(complex& B)
{complex C;
if((B.Re!=0)&&(B.Im!=0))
{C.Re=(Re*B.Re+Im*B.Im)/(B.Re*B.Re+B.Im*B.Im);
 C.Im=(Im*B.Re-Re*B.Im)/(B.Re*B.Re+B.Im*B.Im);
return C;}
}
 
 
int _tmain(int argc, _TCHAR* argv[])
{complex A,B,C;
bool f,fA,fB;
int n;
char s[50];
 
 
printf("Vvedite chislo 1 (format vvoda: a+ib) \n");
gets(s);
 
 
printf("\nVvedite chislo 2 (format vvoda: a+ib)\n");
gets(s);
B("s")
if(fB==true)printf("Re=%f  Im=%f \n",B->Re,B->Im);
else printf("Error!");
 
if((fA!=false)&&(fB!=false))
{C=A.Sum(B);
printf(" Summa: Re=%f, Im=%f \n", C.Re,C.Im);
 
C=A.Raz(B)
printf(" Raznost': Re=%f, Im=%f \n", C.Re,C.Im);
}
    getch();
    return 0;}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.09.2011, 13:25     ООП. Косплексные числа и операции.
Посмотрите здесь:

Класс Hugeint (целые числа) Операции: - =, сравнение(<, >) C++
C++ Поразрядные операции, получение максимального числа
C++ Описать функцию возведения любого натурального числа n в куб без операции умножения, пользуясь следующим свойством: куб любого числа n равен
ООП: Объект: множество символов алфавита. Реализовать базовые операции над множествами C++
ООП. Перевести числа из 10-чного вида в двоичный, сосчитать, и результат вывести и в двоичном, и в десятичном C++
Побитовые операции в Си. Изменение отдельных битов числа C++
ООП. Определить, является ли текст десятичной записью числа, кратного 4 C++
Операции над 4 цифрами числа C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ответ Создать тему
Опции темы

Текущее время: 17:02. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru