Программа сложения и умножения комплексных чисел

Задача

Используя записи, написать программу сложения и умножения двух комплексных чисел.

Пояснение к задаче и алгоритм решения

Комплексные числа состоят из действительной и мнимой частей, обе являются вещественными числами. Например, 1.5+0.3i. Здесь 1.5 - действительная часть, 0.3 - мнимая часть, i - так называемая мнимая единица. Части комплексных чисел могут быть отрицательными величинами. Например, -3+1.5i, 2-2i, -10.5-1.25i.

Если даны комплексные числа a и b, где их действительные части обозначены как a.x и b.x, а мнимые - как a.y и b.y, то их сумма и произведение находятся по формулам:
a + b = (a.x + b.x) + (a.y + b.y)i
a * b = (a.x * b.x - a.y * b.y) + (a.x * b.y + a.y * b.x)i

В задаче используется структура данных (запись), представляющая комплексное число. Структура содержит два поля для хранения действительной и мнимой части. Для каждого комплексного числа используется переменная типа объявленной структуры.

Исходный код на языке программирования Pascal

type
    complex = record
        x: real;
        y: real;
    end;
 
var
    a,b,sum,mult: complex;
 
begin
    writeln('Число A');
    write('   действ. часть: '); readln(a.x);
    write('   мнимая  часть: '); readln(a.y);
    writeln('Число B');
    write('   действ. часть: '); readln(b.x);
    write('   мнимая  часть: '); readln(b.y);
 
    sum.x := a.x + b.x;
    sum.y := a.y + b.y;
    mult.x := a.x * b.x - a.y * b.y;
    mult.y := a.y * b.x + a.x * b.y;
    writeln('Сумма:   ', sum.x:2:2, '+',sum.y:2:2,'j');
    writeln('Произв.: ', mult.x:2:2, '+',mult.y:2:2,'j');
end.

Исходный код на языке программирования C

#include <stdio.h>
struct complex {float x, y;};
main() {
    struct complex a, b, sum, mult;
    printf("Число A\n");
    printf("   действ. часть: "); scanf("%f",&a.x);
    printf("   мнимая  часть: "); scanf("%f",&a.y);
    printf("Число B\n");
    printf("   действ. часть: "); scanf("%f",&b.x);
    printf("   мнимая  часть: "); scanf("%f",&b.y);
 
    sum.x = a.x + b.x;
    sum.y = a.y + b.y;
    mult.x = a.x * b.x - a.y * b.y;
    mult.y = a.y * b.x + a.x * b.y;
    printf("Сумма:   %.2f+%.2fj\n", sum.x,sum.y);
    printf("Произв.: %.2f+%.2fj\n", mult.x,mult.y);
}

Пример(ы) выполнения программы на языке C

Число A
   действ. часть: -1.24
   мнимая  часть: 0.5
Число B
   действ. часть: 2.1
   мнимая  часть: -0.1
Сумма:   0.86+0.40j
Произв.: -2.55+1.17j

Исходный код на языке программирования Python

# Вариант 1. Использование встроенного типа данных complex:

a = input()
b = input()
a = complex(a)
b = complex(b)
suma = a + b
mult = a * b
print(suma)
print(mult)

# Вариант 2. Определение собственного класса и перегрузка операторов:

class Cmplx:
    def __init__(self, x, y):
        self.x = x
        self.y = y
    def __add__(self, obj):
        self.sumax = self.x + obj.x
        self.sumay = self.y + obj.y
    def __mul__(self, obj):
        self.multx = self.x * obj.x - self.y * obj.y
        self.multy = self.y * obj.x + self.x * obj.y
 
x = float(input())
y = float(input())
a = Cmplx(x,y)
x = float(input())
y = float(input())
b = Cmplx(x,y)
a + b
a * b
print('Сумма:   %.2f+%.2fj' % (a.sumax, a.sumay))
print('Произв.: %.2f+%.2fj' % (a.multx, a.multy))

# Вариант 3. Использование словарей:

a = {'x':0, 'y':0}
b = {'x':0, 'y':0}
a['x'] = float(input())
a['y'] = float(input())
b['x'] = float(input())
b['y'] = float(input())
suma = {}
mult = {}
suma['x'] = a['x'] + b['x']
suma['y'] = a['y'] + b['y']
mult['x'] = a['x'] * b['x'] - a['y'] * b['y']
mult['y'] = a['y'] * b['x'] + a['x'] * b['y']
print('Сумма:   %.2f+%.2fj' % (suma['x'], suma['y']))
print('Произв.: %.2f+%.2fj' % (mult['x'], mult['y']))

Особенности решения на языке программирования Python

В Python есть встроенный тип данных комплексные числа, который поддерживает операции сложения и умножения.

Однако можно определить свой тип данных, используя классы. В них также можно использовать перегрузку операторов, т.е в данном случае переопределить операции сложения и умножения для своего типа данных.

Также можно использовать словари с двумя ключами - действительной и мнимой частью комплексного числа.

Тема

Структуры данных (записи, словари)

Уровень сложности

Простой

Дата публикации