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

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

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

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

18.07.2012, 11:21. Просмотров 6244. Ответов 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
Nameless One
Эксперт С++
5780 / 3429 / 255
Регистрация: 08.02.2010
Сообщений: 7,448
20.07.2012, 09:42 #16
Avazart, да потому, что он протух еще десяток лет назад
0
defer
秘密
555 / 235 / 3
Регистрация: 29.11.2010
Сообщений: 783
20.07.2012, 11:54 #17
Цитата Сообщение от Nameless One Посмотреть сообщение
да потому, что он протух еще десяток лет назад
А вы новые версии от Embarcadero пробовали?
0
-=ЮрА=-
Заблокирован
Автор FAQ
20.07.2012, 12:07 #18
Цитата Сообщение от akhalex Посмотреть сообщение
Как сделать, чтобы можно было увидеть результат комплексного значения?
Например, если прописать строку так:
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.
- да легко, ты считай сам всё ниже и написал. Вот немного преобразованный код
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
#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);
//ÔóГ*êöèÿ ïðåîáðГ*çóåò êîìïëåêñГ*îå ÷èñëî Гў ñòðîêó
char * fmt(complex val, char * str);
 
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;
    char str[64] = {0};//Г„Г*Г*Г*Г*Гї ñòðîêГ* áóäåò ñîäåðæГ*ГІГј Гў Г±ГҐГЎГҐ
    //òåêñòîâêó êîìïëåêñГ*
    FILE * file = NULL;//ÓêГ*Г§Г*òåëü Г*Г* ГґГ*éëîâûé ïîòîê
    printf("Enter t = [tn...tk]\n");
    printf("tn = ");scanf("%lf",&tn);
    printf("tk = ");scanf("%lf",&tk);
    printf("dt = ");scanf("%lf",&dt);
    file = fopen("out.txt", "w");
    if(file == NULL)
        printf("Error create out.txt\n");
    ///Ïðè îøèáêè ñîçäГ*Г*ГЁГї Г±Г*ìó ïðîãó Г*ГҐ ðóáГ*Гѕ - ГЇГіГ±ГІГј Г*Г* ГЅГЄГ°Г*Г* âûâîäèò
    for(t = tn; t <= tk; t += dt)
    {
        val = z(cmult(one,5*t));
        sprintf(str, "%s", fmt(val, str));
        printf("t = %.3f | val = %s\n",t, str);
        if(file)
            fprintf(file,"t = %.3f | val = %s\n",t, str);
    }       
    if(file)//Åñëè ïîòîê áûë îòêðûò 
        fclose(file);//Г§Г*êðûâГ*ГҐГ¬ ГҐГЈГ®
    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);
}
 
char * fmt(complex val, char * str)
{
    if(0 <= val.re)
        sprintf(str, " %.3f", val.re);
    else
        sprintf(str, "%.3f",val.re);
    if(val.im < 0)
        sprintf(str, "%s - j*", str);
    else
        sprintf(str, "%s + j*", str);
    sprintf(str, "%s%.3f", str, fabs(val.im));
    return str;
}
В аттаче out.txt сам экзешник и файл с кодом
1
Миниатюры
Мнимая единица  
Вложения
Тип файла: rar COMPLEX.EXE.rar (23.8 Кб, 4 просмотров)
Тип файла: txt out.txt (216 байт, 5 просмотров)
Тип файла: rar COMPLEX.CPP.rar (1.0 Кб, 5 просмотров)
Avazart
Эксперт С++
7458 / 5504 / 314
Регистрация: 10.12.2010
Сообщений: 24,555
Записей в блоге: 17
20.07.2012, 12:11 #19
А вы новые версии от Embarcadero пробовали?
B и я о том, кстати некоторые досих пор в 6-том пишут.
0
-=ЮрА=-
20.07.2012, 12:18
  #20

Не по теме:

Цитата Сообщение от Avazart Посмотреть сообщение
кстати некоторые досих пор в 6-том пишут.
я именно представитель тех кто пишет в 6-ке, а также BorlandC, 9-ке, короче в чём просят под то и пишу
PS:Ещё не встретил ни одного человека, которому бы мешал багаж знаний старых и новых компиляторов, а в чём писать это по моему глубокому убеждению дело сугубо личное, лишь бы приложения работали на новых ОС и платформах а уж как они были созданы это дело второстепенное...

1
akhalex
0 / 0 / 0
Регистрация: 18.07.2012
Сообщений: 17
20.07.2012, 15:16  [ТС] #21
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
В аттаче out.txt сам экзешник и файл с кодом
Экзешник работает, а файл COMPLEX.CPP не работает, такое может быть?
Выдает:Название: Снимок.JPG
Просмотров: 46

Размер: 19.9 Кб и Название: Снимок2.JPG
Просмотров: 46

Размер: 18.3 Кб
0
akhalex
0 / 0 / 0
Регистрация: 18.07.2012
Сообщений: 17
20.07.2012, 15:21  [ТС] #22
Прилагаю тот же код
0
Вложения
Тип файла: zip COMPLEX.CPP.zip (1.0 Кб, 3 просмотров)
-=ЮрА=-
Заблокирован
Автор FAQ
20.07.2012, 16:34 #23
akhalex, вот ещё раз проект, посомтри на этот цикл
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
for(t = tn; t <= tk; t += dt)
* * {
* * * * val = z(cmult(one,5*t));
* * * * sprintf(str, "%s", fmt(val, str));
* * * * printf("t = %.3f | val = %s\n",t, str);
* * * * if(file)
* * * * * * fprintf(file,"t = %.3f | val = %s\n",t, str);
* * }
Я убрал sprintf
for(t = tn; t <= tk; t += dt)
{
val = z(cmult(one,5*t));
fmt(val, str);
printf("t = %.3f | val = %s\n",t, str);
if(file)
fprintf(file,"t = %.3f | val = %s\n",t, str);
}
утром когда писал код с файлом, борланда под рукой не было и накидал всё в 6-й VisualStudio как оказалось BorlandC ещё "не умел" делать такие штуки как 6-ка(получилось так - экзешник студия слинковала как надо, а вот твой да и мой тоже BorlandC не захотели курить sprintf с вызовом функции, от того новоиспечённые экзешники работали не совсем так как эксзешник от студии)...Я поправил этот моент уже имея под рукой BorlandC теперь всё ок
0
Миниатюры
Мнимая единица  
Вложения
Тип файла: rar COMPLEX.rar (1.0 Кб, 6 просмотров)
akhalex
0 / 0 / 0
Регистрация: 18.07.2012
Сообщений: 17
20.07.2012, 16:45  [ТС] #24
Все равно хрень какая-то выводятся только мнимые значения...
Мнимая единица
0
Nameless One
Эксперт С++
5780 / 3429 / 255
Регистрация: 08.02.2010
Сообщений: 7,448
20.07.2012, 17:09 #25
C:
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <stdio.h>
#include <stdlib.h>
#include <complex.h>
 
int main(int argc, char *argv[])
{
    size_t t;
    
    for(t = 0; t <= 5; ++t)
    {
        complex val = cexp(5 * t * I);
 
        printf("%+6.2f %+6.2fi\n", creal(val), cimag(val));
    }
    
    exit(0);
}
C++:
C++
1
2
3
4
5
6
7
8
9
10
#include <iostream>
#include <complex>
 
int main()
{
    std::complex<double> j(0.0, 1.0);
    
    for(size_t i = 0; i <= 5; ++i)
        std::cout << std::exp(5.0 * i * j) << std::endl;    
}
2
akhalex
0 / 0 / 0
Регистрация: 18.07.2012
Сообщений: 17
20.07.2012, 18:22  [ТС] #26
Цитата Сообщение от Nameless One Посмотреть сообщение
C++:
C++
1
2
3
4
5
6
7
8
9
10
#include <iostream>
#include <complex>
 
int main()
{
    std::complex<double> j(0.0, 1.0);
    
    for(size_t i = 0; i <= 5; ++i)
        std::cout << std::exp(5.0 * i * j) << std::endl;    
}
установил код в Borland C++ version 3.1 выдает 4 ошибки:
Мнимая единица
0
Avazart
Эксперт С++
7458 / 5504 / 314
Регистрация: 10.12.2010
Сообщений: 24,555
Записей в блоге: 17
20.07.2012, 18:45 #27
установил код в Borland C++ version 3.1 выдает 4 ошибки:
Ну а что ты хотел?
Не знает он повидимому что такое std:: слишком старый ( хотя можешь попробывать первый пример который для Си)
Ставь либо RAD либо VC++ либо что то еще.
0
akhalex
0 / 0 / 0
Регистрация: 18.07.2012
Сообщений: 17
20.07.2012, 18:48  [ТС] #28
Цитата Сообщение от Avazart Посмотреть сообщение
Ну а что ты хотел?
Не знает он повидимому что такое std:: слишком старый.
Ставь либо RAD либо VC++ либо что то еще.
В том то и дело, что мне нужно реализовать комплексное число в старой версии.
Однако, я не теряю надежды. У -=ЮрА=- это хорошо получается.
0
-=ЮрА=-
20.07.2012, 19:14
  #29

Не по теме:

Цитата Сообщение от akhalex Посмотреть сообщение
Однако, я не теряю надежды. У -=ЮрА=- это хорошо получается.
так я дома, сейчас мы закончим с этим заданием раз и навсегда!akhalex, жди...

1
-=ЮрА=-
Заблокирован
Автор FAQ
20.07.2012, 19:24 #30
Упростил форматный вывод (дело было только в нём)
C
1
2
3
4
5
char * fmt(complex val, char * str)
{
    sprintf(str, "%.3f %cj*%.3fj", val.re, val.im < 0 ? '-' : '+', fabs(val.im));
    return str;
}
1
Миниатюры
Мнимая единица  
Вложения
Тип файла: rar COMPLEX_LAST.rar (1.1 Кб, 3 просмотров)
Тип файла: rar COMPLEX_LAST.EXE.rar (21.7 Кб, 2 просмотров)
Тип файла: txt OUT.TXT (283 байт, 2 просмотров)
20.07.2012, 19:24
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.07.2012, 19:24
Привет! Вот еще темы с ответами:

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

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

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

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


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

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

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