Форум программистов, компьютерный форум CyberForum.ru

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

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 43, средняя оценка - 4.65
akhalex
0 / 0 / 0
Регистрация: 18.07.2012
Сообщений: 17
18.07.2012, 11:21     Мнимая единица #1
Здравствуйте!
Кто сможет подсказать?
Есть пример из маткада.
Мнимая единица
Как этот пример написать на С++?
Меня интересует, как объявить мнимую единицу или задать, чтобы можно было вывести на экран реальные и мнимые выражения, как в маткаде.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.07.2012, 11:21     Мнимая единица
Посмотрите здесь:

Цилиндр объёма единица имеет в высоту h C++
какой-то элемент массива равен 1. Теперь мне нужно добавить к этому элементу 0 так, чтобы элемент массива стал равен 10(не десять, а единица и ноль C++
C++ Сложение двухбайтовых слов, при переполнении к сумме добавляется единица.
C++ Структура Комплексное_Число с элементами x - действительная и y - мнимая часть
Мнимая единица C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
akhalex
0 / 0 / 0
Регистрация: 18.07.2012
Сообщений: 17
20.07.2012, 15:16  [ТС]     Мнимая единица #21
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
В аттаче out.txt сам экзешник и файл с кодом
Экзешник работает, а файл COMPLEX.CPP не работает, такое может быть?
Выдает:Название: Снимок.JPG
Просмотров: 43

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

Размер: 18.3 Кб
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
akhalex
0 / 0 / 0
Регистрация: 18.07.2012
Сообщений: 17
20.07.2012, 15:21  [ТС]     Мнимая единица #22
Прилагаю тот же код
Вложения
Тип файла: 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 теперь всё ок
Миниатюры
Мнимая единица  
Вложения
Тип файла: rar COMPLEX.rar (1.0 Кб, 6 просмотров)
akhalex
0 / 0 / 0
Регистрация: 18.07.2012
Сообщений: 17
20.07.2012, 16:45  [ТС]     Мнимая единица #24
Все равно хрень какая-то выводятся только мнимые значения...
Мнимая единица
Nameless One
Эксперт С++
 Аватар для Nameless One
5753 / 3402 / 255
Регистрация: 08.02.2010
Сообщений: 7,393
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;    
}
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 ошибки:
Мнимая единица
Avazart
 Аватар для Avazart
6900 / 5140 / 252
Регистрация: 10.12.2010
Сообщений: 22,591
Записей в блоге: 17
20.07.2012, 18:45     Мнимая единица #27
установил код в Borland C++ version 3.1 выдает 4 ошибки:
Ну а что ты хотел?
Не знает он повидимому что такое std:: слишком старый ( хотя можешь попробывать первый пример который для Си)
Ставь либо RAD либо VC++ либо что то еще.
akhalex
0 / 0 / 0
Регистрация: 18.07.2012
Сообщений: 17
20.07.2012, 18:48  [ТС]     Мнимая единица #28
Цитата Сообщение от Avazart Посмотреть сообщение
Ну а что ты хотел?
Не знает он повидимому что такое std:: слишком старый.
Ставь либо RAD либо VC++ либо что то еще.
В том то и дело, что мне нужно реализовать комплексное число в старой версии.
Однако, я не теряю надежды. У -=ЮрА=- это хорошо получается.
-=ЮрА=-
20.07.2012, 19:14
  #29

Не по теме:

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

-=ЮрА=-
Заблокирован
Автор 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;
}
Миниатюры
Мнимая единица  
Вложения
Тип файла: rar COMPLEX_LAST.rar (1.1 Кб, 3 просмотров)
Тип файла: rar COMPLEX_LAST.EXE.rar (21.7 Кб, 2 просмотров)
Тип файла: txt OUT.TXT (283 байт, 2 просмотров)
akhalex
0 / 0 / 0
Регистрация: 18.07.2012
Сообщений: 17
20.07.2012, 19:32  [ТС]     Мнимая единица #31
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
Упростил форматный вывод (дело было только в нём)
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;
}
Ну теперь все!!! Я думаю, можно закрывать тему. Всем спасибо, а особенно -=ЮрА=- Отличный спец!!!
-=ЮрА=-
Заблокирован
Автор FAQ
20.07.2012, 19:39     Мнимая единица #32
Наконец-то СВЕРШИЛОСЬ

Не по теме:

akhalex, по итогам всего могу добавить что в BorlandC да и Visual Studio уже присутсвуют стандартные функции и классы для работы с комплексами так что отмечу код Nameless One, как полностью пригодный (вариант Си для борландС, вариант плюсов для всего постарше)

Agent Smith
11.01.2013, 19:50
  #33

Не по теме:

Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
//val будет ранить значение exp(j*t)
ранить

MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.12.2013, 16:36     Мнимая единица
Еще ссылки по теме:

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

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

Или воспользуйтесь поиском по форуму:
Faind
0 / 0 / 0
Регистрация: 25.09.2013
Сообщений: 2
19.12.2013, 16:36     Мнимая единица #34
Доброго времени суток -=ЮрА=-, подскажи плиз такую вещь - мне в нужно преобразовать строку из matlab на плюсы
Matlab M
1
s(1:ssize)=(b(1:2:ssize*2)+1i*b(2:2:ssize*2))/128*sa;
Суть четная часть массива b вещественная, нечетная мнимая. С массивами и векторами все понятно, никак не дойду как правильно собрать из этих данных комплексное число и положить в др массив для отправки на дальнейшее преобразование.
Пока я пробовал понять как это сделать, читая эту тему, у меня рождается что-то типо этого,
Но пока что-то я ни как не врублюсь ((( Прошу помощи 8)

C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
       void function(char* data_in, long len_in, char* data_out, long* len_out, float sa)
{
/*По коду data_in - входной массив(b), long len_in - 64(Читаю из файла кусочки по 64 байта),data_out - массив для отправки после преобразования(s), len_out -понятно, sa - переменная задаваемая пользователем  */
    char *real = new char [len_in/2];
    char *imp = new char [len_in/2];
    complex one ={0};
    one.re = 0;
    one.im = -1;
 
    complex val= {0};
 
    for(long i = 0; i < len_in/2; i++)
    {
        real[i] = data_in[2*i];
        imp[i] = data_in[2*i+1];
        val.re = (int)real[i];                           // Вот тут начинаются тупняки мои
        val.im = cmult(one,imp[i]);//(int)imp[i];// Как и куда правильно, короче заляпал мозгом стенку уже
        data_out[i] = (real[i] + imp[i])/128*sa;
    }
Yandex
Объявления
19.12.2013, 16:36     Мнимая единица
Ответ Создать тему
Опции темы

Текущее время: 02:32. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru