Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 24.05.2021, 18:30   #1
Krasemal
Новичок
Джуниор
 
Регистрация: 24.05.2021
Сообщений: 2
По умолчанию Описать тип struct Complex

Описать тип struct Complex, задающий комплексное число с
действительной частью Re и мнимой частью Im. Реализовать в
виде отдельных функций а) операцию вычисления модуля
комплексного числа; б) операцию вычисления аргумента
комплексного числа; операции в) суммы, г) разности, д)
произведения и е) частного двух комплексных чисел. С
использованием описанных типа и функций разработать
программу, которая для заданного набора из N комплексных чисел
находит 1) тройку чисел, произведение которых имеет наибольший
модуль; 2) модуль и аргумент суммы заданных N комплексных
чисел.
Надо переделать на Си.

Код:
#include "pch.h"
#define _CRT_SECURE_NO_WARNINGS 
#include <stdio.h> 
#include <math.h> 
#include <time.h> 
#include <locale.h> 
#include <windows.h> 
#include <malloc.h> 
#pragma warning(disable : 4996)
 
typedef struct
{
    float Re;
    float Im;
} complex;
 
//Операция вычисления модуля комплексного числа 
float Modyl(complex x, complex y)
{
    float s;
    s = sqrt(x.Re*x.Re + y.Im*y.Im);
    return s;
}
//Операция вычисления аргумента комплексного числа 
float Arg(complex x, complex y)
{
    float s;
    s = y.Im / x.Re;
    return s;
}
//Сумма комплексного числа 
complex Sum(complex x, complex y)
{
    complex s;
    s.Re = x.Re + y.Re;
    s.Im = x.Im + y.Im;
    return s;
}
//Разность комплексного числа 
complex Razn(complex x, complex y)
{
    complex s;
    s.Re = x.Re - y.Re;
    s.Im = x.Im - y.Im;
    return s;
}
//Операция произведения трех чисел
complex proiz(complex x, complex y)
{
    complex s;
    s.Re = (x.Re*y.Re) - (x.Im*y.Im);
    s.Im = (x.Im*y.Re) + (y.Im*x.Re);
    s.Re= (s.Re*x.Re) - (x.Im*s.Im);
    s.Im = (x.Im*s.Re) + (s.Im*x.Re);
    //s=(x.Re*x.Im-y.Re*y.Im)+(x.Re*y.Im+y.Re*x.Im); 
    return s;
}
//Частного двух комплексных чисел 
complex Chact(complex x, complex y)
{
    complex s;
    s.Re = (x.Re*y.Re + x.Im*y.Im) / (y.Re*y.Re + y.Im*y.Im);
    s.Im = (x.Im*y.Re - y.Im*x.Re) / (y.Re*y.Re + y.Im*y.Im);
 
    return s;
}
 
//Операция произведения
complex Proiztrex(complex x, complex y)
{
    complex s;
    s.Re = (x.Re*y.Re) - (x.Im*y.Im);
    s.Im = (x.Im*y.Re) + (y.Im*x.Re);
    return s;
}
//Вывод 
void Vivod(complex q)
{
    printf("%.2f+%.2fi\n", q.Re, q.Im);
}
 
void main()
{
 
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    complex x, y;
    int N, i, j, k, f = 1, max_i = 0, max_j = 0, max_k = 0;
    printf("Введите кол-во косплексного числа \n");
    scanf_s("%i", &N);
    complex *q, s = { 1,1 };
    float m, max;
    //распределение памяти под массив 
    q = (complex *)malloc(N * sizeof(complex));
    if (q == NULL)
    {
        printf("Ошибка выделения памяти \n");
        return;
    }
    //else
    //  printf("Данных не хватило");
    //Ввод x,y 
    for (i = 0; i < N; i++)
    {
        printf("Re %i :\n", i);
        scanf("%f", &q[i].Re);
        printf("Im %i:\n", i);
        scanf("%f", &q[i].Im);
    }
    for (i = 0; i < N - 2; i++)
    {
        s = proiz(s, q[i]);
        for (j = i + 1; j < N - 1; j++)
        {
            s = proiz(s, q[j]);
            for (k = j + 1; k < N - 1; k++)
            {
                s = proiz(s, q[k]);
                m = Modyl(s, s);
                if (f == 1)
                {
                    max = m;
                    max_i = i;
                    max_j = j;
                    max_k = k;
                    f = 0;
                }
                if (m > max)
                {
                    max = m;
                    max_i = i;
                    max_j = j;
                    max_k = k;
                }
            }
        }
    }
    //модуль и аргумент суммы заданных N комплексных чисел. 
    printf(" \n Введите число N, для заданых комплексных чисел \n ");
    scanf_s("%i", &N);
    i = 0;
    m = 0;
    int sum;
    int g = 0;
    for (i = 0; i < N; i++)
    {
        m = Modyl(s, s);
        g = Arg(s, s);
        sum = m + g;
 
    }
    printf("модуль и аргумент суммы заданных N комплексных чисел \n",sum);
    printf("Max тройка произведения наибольшего модуля \n");
    Vivod(q[max_i]);
    Vivod(q[max_j]);
    Vivod(q[max_k]);
    system("pause");
}

Последний раз редактировалось BDA; 24.05.2021 в 21:50. Причина: code tag
Krasemal вне форума Ответить с цитированием
Старый 24.05.2021, 21:58   #2
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,291
По умолчанию

И что не получается? Повыкидывать include, define и pragma, на которые пожалуется компилятор; заменить scanf_s на scanf; заменить "void main()" на "int main(void)" и добавить возвращаемое значение в return. Код станет компилироваться. Не сравнивал имеющиеся в коде функции с требуемыми по условию задачи.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA на форуме Ответить с цитированием
Старый 13.08.2021, 13:39   #3
taras-proger77
Заблокирован
 
Регистрация: 17.12.2018
Сообщений: 514
По умолчанию

Цитата:
Сообщение от Krasemal Посмотреть сообщение
//Операция вычисления модуля комплексного числа
Код:
float Modyl(complex x, complex y)
{
    float s;
    s = sqrt(x.Re*x.Re + y.Im*y.Im);
    return s;
}
Нет.
Цитата:
float ComplexAbs(Compex x)
{
float s;
s=sqrt(x.Re*x.Re+x.Im*x.Im);
return s;
}
taras-proger77 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Описать тип struct staccy Общие вопросы C/C++ 69 08.06.2017 11:54
Реализовать struct Группа(group), в которой содержатся struct Студент(Student) TokaChan Помощь студентам 2 07.07.2016 07:22
описать тип 'шахматная доска' vadimc Помощь студентам 0 15.12.2012 10:54
Описать тип с данными о сотрудниках Масим Помощь студентам 13 24.03.2010 14:09