Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include "Complex_num.h"
- #define _CRT_SECURE_NO_WARNINGS
- #include <stdio.h>
- #include <stdlib.h>
- #include <math.h>
- #define pi 3.141596
- COMPLEX Add(COMPLEX* p1, COMPLEX* p2) {
- COMPLEX res = { 0, 0 };
- res.Re = (p1->Re + p2->Re);
- res.Im = (p1->Im + p2->Im);
- return res;
- }
- COMPLEX Sub(COMPLEX* p1, COMPLEX* p2) {
- COMPLEX res = { 0, 0 };
- res.Re = (p1->Re - p2->Re);
- res.Im = (p1->Im - p2->Im);
- return res;
- }
- COMPLEX Multi(COMPLEX* p1, COMPLEX* p2) {
- COMPLEX res = { 0, 0 };
- res.Re = (p1->Re * p2->Re - p1->Im * p2->Im);
- res.Im = (p1->Re * p2->Im + p1->Im * p2->Re);
- return res;
- }
- COMPLEX Div(COMPLEX* p1, COMPLEX* p2) {
- COMPLEX res = { 0, 0 };
- COMPLEX binded = { p2->Re, -(p2->Im) };
- double Im_down = p2->Re * binded.Im + p2->Im * binded.Re;
- double Re_down = p2->Re * binded.Re - p2->Im * binded.Im;
- if ((Re_down) == 0 && (Im_down) != 0)
- res.Re = ((p1->Re * binded.Re - p1->Im * binded.Im) / (Im_down));
- else if ((Re_down) != 0)
- res.Re = ((p1->Re * binded.Re - p1->Im * binded.Im) / (Re_down));
- if (Im_down == 0 && Re_down != 0)
- res.Im = ((p1->Re * binded.Im + p1->Im * binded.Re) / (Re_down));
- else if ((Im_down) != 0)
- res.Im = ((p1->Re * binded.Im + p1->Im * binded.Re) / (Im_down));
- return res;
- }
- void Print(const COMPLEX* p) {
- printf("%.lf", p->Re);
- if (p->Im > 0) printf("+%.lfi\n", p->Im);
- else if (p->Im < 0) {
- printf("%.lfi\n", p->Im);
- }
- }
- int IsEqual(const COMPLEX* p1, const COMPLEX* p2) {
- if (p1->Re == p2->Re && p1->Im == p2->Im) return 1;
- else return 0;
- }
- void PrintAsAbsPhase(const COMPLEX* p) {
- double abs_phase = sqrt(pow(p->Re, 2) + pow(p->Im, 2));
- double cosa = p->Re / abs_phase;
- //double angle_cos = acos(cosa);
- double angle_cos = (acos(cosa));// / pi * 180); //просто acos без учета pi; с добавлением - в градусах.
- double sina = p->Im / abs_phase;
- double angle_sin = (asin(sina));// / pi * 180);
- printf("%.2lf(cos(%.3lf + 2%ck)+isin(%.3lf + 2%cn))", abs_phase, angle_cos,/* 175, */175, angle_sin,/* 175,*/ 175);
- }
- void EnterNum(COMPLEX* p) {
- char Im_part[10];
- char* Im_num = (char*)calloc(sizeof(char*), 5);
- scanf("%lf%s", &p->Re, Im_part);
- for (size_t i = 0; Im_part[i] != '\0'; i++)
- {
- Im_num[i] = Im_part[i];
- if (i > 0 && Im_part[i] == 'i' && Im_part[i - 1] == '-' || Im_part[i - 1] == '+') Im_num[i] = '1';
- }
- p->Im = atof(Im_num);
- free(Im_num);
- }
- Header:
- #ifndef COMPLEX_H
- #define COMPLEX_H
- typedef struct complex
- {
- double Re, Im;
- } COMPLEX;
- COMPLEX Add(COMPLEX* p1, COMPLEX* p2);
- COMPLEX Sub(COMPLEX* p1, COMPLEX* p2);
- COMPLEX Multi(COMPLEX* p1, COMPLEX* p2);
- COMPLEX Div(COMPLEX* p1, COMPLEX* p2);
- void Print(const COMPLEX* p);
- void EnterNum(COMPLEX* p);
- int IsEqual(const COMPLEX* p1, const COMPLEX* p2);
- void PrintAsAbsPhase(const COMPLEX* p);
- #endif
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement