Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 43, средняя оценка - 4.65
akhalex
0 / 0 / 0
Регистрация: 18.07.2012
Сообщений: 17
#1

Мнимая единица - C++

18.07.2012, 11:21. Просмотров 6137. Ответов 33
Метки нет (Все метки)

Здравствуйте!
Кто сможет подсказать?
Есть пример из маткада.
Мнимая единица
Как этот пример написать на С++?
Меня интересует, как объявить мнимую единицу или задать, чтобы можно было вывести на экран реальные и мнимые выражения, как в маткаде.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.07.2012, 11:21
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Мнимая единица (C++):

Мнимая единица - C++
Как умножить на мнимую единицу, она же равна корень из (-1).

Структура Комплексное_Число с элементами x - действительная и y - мнимая часть - C++
Создайте структуру Комплексное_Число с элементами x - действительная и y - мнимая часть. Выполнить операцию с тремя комплексными числами...

Класс «Комплексное число». Поля класса: действительная и мнимая части - C++
Помогите, описать класс в соответствии с индивидуальным вариантом задания и реализовать все его методы. Каждый класс помимо указанных в...

Растолкуйте почему выводится единица - C++
Почему выводит 1?? #include int main(int argc, char** argv) { int x = 0; int y = 0; if (x++ && y++) ...

Цилиндр объёма единица имеет в высоту h - C++
Помогите решить задачу. язык Си Цилиндр объёма единица имеет в высоту h. Определить радиус основания цилиндра для значений h, равных ...

Исправьте ошибку: ответ уравнения всегда единица - C++
// pr19.cpp: определяет точку входа для консольного приложения. //printf("%d\n",flag); #include "stdafx.h" #include <iostream> ...

33
-=ЮрА=-
Заблокирован
Автор FAQ
18.07.2012, 11:30 #2
Цитата Сообщение от akhalex Посмотреть сообщение
Как этот пример написать на С++?
Меня интересует, как объявить мнимую единицу или задать, чтобы можно было вывести на экран реальные и мнимые выражения, как в маткаде.
- всё очень и очень просто
прочти теорию http://www.cyberforum.ru/faq/thread436065.html#post2432704
а затем перейди к кодам
http://www.cyberforum.ru/faq/thread436065.html#post2435222
а вот тут функция с комплексом
http://www.cyberforum.ru/faq/thread436065.html#post2439450
2
-=ЮрА=-
Заблокирован
Автор FAQ
18.07.2012, 12:31 #3
Вобщем вод код под данную задачу
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
#include <cmath>
#include <iomanip>
#include <iostream>
using namespace std;
 
struct complex
{
    double re;
    double im;
};
 
//ÔóГ*êöèÿ âîçâðГ*Г№Г*ГҐГІ ìîäóëü êîìïëåêñГ*îãî Г·ГЁГ±Г«Г*
double cfabs(complex val);
//ÔóГ*êöèÿ ГіГ¬Г*îæГ*ГҐГІ êîìïëåêñГ*îå ÷èñëî 
//Гў Г*ëãåáðГ*è÷åñêîé ôîðìå Г§Г*ГЇГЁГ±ГЁ Г*Г* ГўГҐГ№ГҐГ±ГІГўГҐГ*Г*îå
complex cmult(complex val, double p);
//ÔóГ*êöèÿ ïðåîáðГ*çóåò ГЅГЄГ±ГЇГ®Г*ГҐГ*öèГ*ëüГ*ГіГѕ Г§Г*ГЇГЁГ±Гј
//êîìïëåêñГ* Гў Г*ëãåáðГ*ГЁГ·ГҐГ±ГЄГіГѕ
//exp(j*pwr) = cos(pwr) + j*sin(pwr)
complex ExpToAlg(complex pwr);
//ÔóГ*êöèÿ âîçâðГ*Г№Г*ГҐГІ Г§Г*Г*Г·ГҐГ*ГЁГҐ ГґГіГ*êöèè êîìïëåêñГ*îãî Г*ðãóìåГ*ГІГ*
complex z(complex val);
//ÔóГ*êöèÿ âûâîäèò êîìïëåêñГ*îå ÷èñëî Г*Г* ГЅГЄГ°Г*Г*
void show(complex val);
 
int main()
{
    //Г‡Г*Г¤Г*ëè Г¬Г*èìóþ åäèГ*èöó
    complex one = {0};
    one.re = 0;
    one.im = -1;
    //val áóäåò Г°Г*Г*ГЁГІГј Г§Г*Г*Г·ГҐГ*ГЁГҐ exp(j*t)
    complex val = {0};
    double t, tn, tk, dt;
    cout<<"Enter t = [tn...tk]\n";
    cout<<"tn = ";cin>>tn;
    cout<<"tk = ";cin>>tk;
    cout<<"dt = ";cin>>dt;
    cout<<"\tt|\tz(t)\t|\n";
    cout<<setw(28)<<setfill('-')<<"\n";
    for(t = tn; t <= tk; t += dt)
    {
        val = z(cmult(one,5*t));
        cout<<t<<"\t |";
        show(val);
        cout<<endl;
    }       
    cout<<setw(28)<<setfill('-')<<"\n";
    system("pause");
    return 0;
}
 
double cfabs(complex val)
{
    return sqrt(val.re*val.re + val.im*val.im);
}
 
complex cmult(complex val, double p)
{
    val.re *= p;
    val.im *= p;
    return val;
}
 
complex ExpToAlg(complex pwr)
{
    complex arg = {0};
    double cmod = cfabs(pwr);
    arg.re = cos(cmod);
    arg.im = sin(cmod);
    return arg;
}
 
complex z(complex val)
{
    return ExpToAlg(val);
}
 
void show(complex val)
{
    if(0 <= val.re)
        cout<<" ";
    cout<<setfill(' ')<<setprecision(3)<<setw(5);
    cout<<val.re;
    if(val.im < 0)
        cout<<" - j*";
    else
        cout<<" + j*";
    cout<<setprecision(3)<<setw(5)<<setfill(' ')<<fabs(val.im);
}
1
Миниатюры
Мнимая единица  
sandye51
программист С++
685 / 587 / 39
Регистрация: 19.12.2010
Сообщений: 2,016
18.07.2012, 13:02 #4
-=ЮрА=-, а чем http://en.cppreference.com/w/cpp/numeric/complex не устраивает?
1
-=ЮрА=-
Заблокирован
Автор FAQ
18.07.2012, 13:09 #5
Цитата Сообщение от sandye51 Посмотреть сообщение
-=ЮрА=-, а чем http://en.cppreference.com/w/cpp/numeric/complex не устраивает?
- я показал самописный вариант. Конечно же структура _complex и функции для работы с комплексами есть в math.h нужно лишь дефайн _COMPLEX_DEFINED вначале инклуда math сделать.
C++
1
2
3
4
5
6
7
8
9
10
/* Definition of a _complex struct to be used by those who use cabs and
 * want type checking on their argument
 */
 
#ifndef _COMPLEX_DEFINED
struct _complex {
        double x,y; /* real and imaginary parts */
        } ;
 
_CRTIMP double  __cdecl cabs(struct _complex);
и.т.д
Автору данной темы я подал код который понятен от начала и до конца, если пользоваться готовым у начинающих нет возможности понять что же к чему, поэтому и подаю максимально упрощённые самописные коды (чтобы понятно было что откуда и почему взялось).
1
akhalex
0 / 0 / 0
Регистрация: 18.07.2012
Сообщений: 17
18.07.2012, 17:02  [ТС] #6
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
-
Автору данной темы я подал код который понятен от начала и до конца, если пользоваться готовым у начинающих нет возможности понять что же к чему, поэтому и подаю максимально упрощённые самописные коды (чтобы понятно было что откуда и почему взялось).
Спасибо за готовую программу и оперативность!!!
Сейчас её проверю и отпишусь.

Добавлено через 3 часа 38 минут
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
Вобщем вод код под данную задачу
[/CPP]
В общем, я работаю на старом Borlande C++ версии 3.1 и при выполнении данного кода выдает кучу ошибок. Ну это понятно, у меня версия старая. Может подскажешь, какую версию Borland лучше установить для проверки этого кода? Или что нужно добавить или изменить в коде для старой версии?
0
sandye51
программист С++
685 / 587 / 39
Регистрация: 19.12.2010
Сообщений: 2,016
18.07.2012, 17:11 #7
akhalex, борланд лучше вообще не устанавливать. Установи лучше VS 2010
0
-=ЮрА=-
Заблокирован
Автор FAQ
18.07.2012, 17:47 #8
Цитата Сообщение от akhalex Посмотреть сообщение
В общем, я работаю на старом Borlande C++ версии 3.1 и при выполнении данного кода выдает кучу ошибок. Ну это понятно, у меня версия старая. Может подскажешь, какую версию Borland лучше установить для проверки этого кода? Или что нужно добавить или изменить в коде для старой версии?
- у меня старше 4-го BorlandC нет, вот код под него
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
#include <math.h>
#include <stdio.h>
#include <conio.h>
 
typedef struct 
{
    double re;
    double im;
}complex;
 
//ÔóГ*êöèÿ âîçâðГ*Г№Г*ГҐГІ ìîäóëü êîìïëåêñГ*îãî Г·ГЁГ±Г«Г*
double cfabs(complex val);
//ÔóГ*êöèÿ ГіГ¬Г*îæГ*ГҐГІ êîìïëåêñГ*îå ÷èñëî 
//Гў Г*ëãåáðГ*è÷åñêîé ôîðìå Г§Г*ГЇГЁГ±ГЁ Г*Г* ГўГҐГ№ГҐГ±ГІГўГҐГ*Г*îå
complex cmult(complex val, double p);
//ÔóГ*êöèÿ ïðåîáðГ*çóåò ГЅГЄГ±ГЇГ®Г*ГҐГ*öèГ*ëüГ*ГіГѕ Г§Г*ГЇГЁГ±Гј
//êîìïëåêñГ* Гў Г*ëãåáðГ*ГЁГ·ГҐГ±ГЄГіГѕ
//exp(j*pwr) = cos(pwr) + j*sin(pwr)
complex ExpToAlg(complex pwr);
//ÔóГ*êöèÿ âîçâðГ*Г№Г*ГҐГІ Г§Г*Г*Г·ГҐГ*ГЁГҐ ГґГіГ*êöèè êîìïëåêñГ*îãî Г*ðãóìåГ*ГІГ*
complex z(complex val);
//ÔóГ*êöèÿ âûâîäèò êîìïëåêñГ*îå ÷èñëî Г*Г* ГЅГЄГ°Г*Г*
void show(complex val);
 
int main()
{
    //Г‡Г*Г¤Г*ëè Г¬Г*èìóþ åäèГ*èöó
    complex one = {0};
    one.re = 0;
    one.im = -1;
    //val áóäåò Г°Г*Г*ГЁГІГј Г§Г*Г*Г·ГҐГ*ГЁГҐ exp(j*t)
    complex val = {0};
    double t;
    double tn = 0;
    double tk = 0;
    double dt = 0;
    printf("Enter t = [tn...tk]\n");
    printf("tn = ");scanf("%lf",&tn);
    printf("tk = ");scanf("%lf",&tk);
    printf("dt = ");scanf("%lf",&dt);
    printf("\tt|\tz(t)\t|\n");
    printf("%28s","-\n");
    for(t = tn; t <= tk; t += dt)
    {
        val = z(cmult(one,5*t));
        printf("%lf\t |",t);
        show(val);
        printf("\n");
    }       
    printf("%28s","-\n");
    printf("Press any key to continue\n");
    getch();
    return 0;
}
 
double cfabs(complex val)
{
    return sqrt(val.re*val.re + val.im*val.im);
}
 
complex cmult(complex val, double p)
{
    val.re *= p;
    val.im *= p;
    return val;
}
 
complex ExpToAlg(complex pwr)
{
    complex arg = {0};
    double cmod = cfabs(pwr);
    arg.re = cos(cmod);
    arg.im = sin(cmod);
    return arg;
}
 
complex z(complex val)
{
    return ExpToAlg(val);
}
 
void show(complex val)
{
    if(0 <= val.re)
        printf(" ");
    printf("%.3f",val.re);
    if(val.im < 0)
        printf(" - j*");
    else
        printf(" + j*");
    printf("%.3f", fabs(val.im));
}
1
Миниатюры
Мнимая единица   Мнимая единица  
akhalex
0 / 0 / 0
Регистрация: 18.07.2012
Сообщений: 17
18.07.2012, 19:35  [ТС] #9
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
- у меня старше 4-го BorlandC нет, вот код под него
C
1
#include <math.h>
Теперь код программы не показывает ошибки, но после запуска на экране показывают только два значения комплексных чисел. Листинг кода прилагаю. Не знаю где ошибка?
Мнимая единицаCOMPLEX.rar
0
-=ЮрА=-
Заблокирован
Автор FAQ
18.07.2012, 21:40 #10
akhalex, если что либо менял в моем коде(даже мелочь) для BorlandC то давай весь код
1
akhalex
0 / 0 / 0
Регистрация: 18.07.2012
Сообщений: 17
18.07.2012, 21:59  [ТС] #11
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
akhalex, если что либо менял в моем коде(даже мелочь) для BorlandC то давай весь код
Я же приложил код в архиве выше (COMPLEX.RAR справа).
0
-=ЮрА=-
Заблокирован
Автор FAQ
18.07.2012, 22:27 #12

Не по теме:

Цитата Сообщение от akhalex Посмотреть сообщение
Я же приложил код в архиве выше (COMPLEX.RAR справа).
- я с телефона до этого заходил и аттач не увидел, сейчас посмотрю что там с кодом случилось...



Добавлено через 3 минуты
akhalex, всё просто - ты ошибся в спецификаторе формата scanf надо не %1f (один f) а %lf (эль английская f)!
printf("tn = ");scanf("%1f",&tn);
printf("tk = ");scanf("%1f",&tk);
printf("dt = ");scanf("%1f",&dt);
1
-=ЮрА=-
Заблокирован
Автор FAQ
18.07.2012, 22:33 #13
В аттаче файл с кодом и сам экзешник, который безупречно работает (прошу в коде ничего не менять дабы не встречались вот такие непонятные ошибки)
1
Миниатюры
Мнимая единица   Мнимая единица  
Вложения
Тип файла: rar COMPLEX.rar (888 байт, 13 просмотров)
Тип файла: rar COMPLEX.EXE.rar (20.8 Кб, 6 просмотров)
akhalex
0 / 0 / 0
Регистрация: 18.07.2012
Сообщений: 17
19.07.2012, 23:22  [ТС] #14
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
В аттаче файл с кодом и сам экзешник, который безупречно работает (прошу в коде ничего не менять дабы не встречались вот такие непонятные ошибки)
Вот теперь все отлично!!! Все работает как надо.
Спасибо огромное!!!

Добавлено через 22 часа 59 минут
Можно еще вопрос?
Как прописать в коде:
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
В аттаче файл с кодом и сам экзешник, который безупречно работает
Как сделать, чтобы можно было увидеть результат комплексного значения?
Например, если прописать строку так:
printf("t=%3f val=%3.3f \n" ,t,val???);
на экране должно быть так:
t=0.000 val= 1
t=1.000 val= 0,284-0,959i
t=2.000 val= -0.839-0.544i
t=3.000 val= -0.76+0.65i
t=4.000 val=0.408+0.913i
t=5.000 val= 0.991-0.132i
Мне нужно эти данные сохранить в файле.txt

Добавлено через 16 минут
Поэтому нужна связка t и val.

Добавлено через 55 минут
Например, чтобы сохранить данные в файле txt, я набираю код:
C++
1
2
3
4
5
6
7
8
9
10
11
12
FILE  *Out;
int N=5;
 
Out = fopen ("Out.txt",  "wt");   if (Out  == NULL)
{printf ("ошибка открытия файла\n"); exit(-1);}
 
 for(t=0;t<=N;t++)
    {
      z(t)=exp(i*5*t);
 
      fprintf(Out, "%.2f  %.3f \n",t, z(t));
    }
Как можно реализовать такой вариант?
В файле txt соответственно должно быть два столбца:
0.00 1
1.00 0,284-0,959i
2.00 -0.839-0.544i
3.00 -0.76+0.65i
4.00 0.408+0.913i
5.00 0.991-0.132i
0
Avazart
Эксперт С++
7235 / 5431 / 303
Регистрация: 10.12.2010
Сообщений: 24,133
Записей в блоге: 17
20.07.2012, 06:48 #15
akhalex, борланд лучше вообще не устанавливать. Установи лучше VS 2010
Это почему?
0
20.07.2012, 06:48
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.07.2012, 06:48
Привет! Вот еще темы с ответами:

Логическая ошибка: при делении результат всегда единица - C++
Ошибка заключается в том что в переменную L должен идти остаток деления L на 10, но почему то остаток всегда &quot;1&quot;, и не меняется. #include...

Сложение двухбайтовых слов, при переполнении к сумме добавляется единица. - C++
В общем, нужно считать произвольное слово из произвольного же файла, это я сделал. Но вот дальше нужно преобразовать этот &quot;строковый ключ&quot;...

Если в строке или столбце матрицы только одна единица, то заменить ее нулем - C++
задача: Дана матрица,заполненная нулями и еденицами.Если в строке или столбце только одна еденица,то она заменяеться нулем.Если после этого...

в массиве вещественных чисел найти количество элементов, ближайшим целое для которых - единица - C++
Здравствуйте! Помогите с задачей, пожалуйста: в массиве вещественных чисел найти количество элементов, ближайшим целым числом для которых...


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.