C ++, Ошибка при объединении комплексных чисел с обычными двойными числами внутри функции for () - PullRequest
1 голос
/ 04 ноября 2019

Извините, если эта проблема очевидна, но я просто не могу понять, что не так с моим кодом. Объяснение ниже, вот код:

#include <iostream>
#include <cmath>
#include <complex>

using namespace std;

int main(){

  //Variables:
  complex<double> c;  //Coordinate
  complex<double> zn;
  complex<double> znp1;


  double iteration;  //Iteration counter
  double limit = 1.0e3;  //zn must exceed limit


  double resolution = 50.0;     //Points/pixels per axis

  double realrangeplus =5.0;    //Coordinate system
  double realrangeminus = -5.0;
  double realsubdiv = (realrangeplus - realrangeminus)/resolution;

  double imagrangeplus = 5.0;
  double imagrangeminus = -5.0;
  double imagsubdiv = (imagrangeplus - imagrangeminus)/resolution;



  //cycle through real axis with c
  for(real(c) = realrangeminus; real(c) <= realrangeplus; real(c) = real(c) + realsubdiv){

    //cycle through imaginary axis with c
    for(imag(c) = imagrangeminus; imag(c) <= imagrangeplus; imag(c) = imag(c) + imagsubdiv){
      //==========================================

      iteration = 0.0;  //reset
      zn = (0.0, 0.0);
      znp1 = (0.0, 0.0);

      //Start iterating:
      do{
        iteration = iteration + 1.0; //count iterations

        zn = znp1;
        znp1 = zn*zn + c;

      }while(abs(zn)<=limit);



      cout << real(c) << " " << imag(c) << "      " << real(zn) << " " << imag(zn) << "    " << iteration << endl;

      //==========================================
    }

  }

  return 0;
}

А вот ошибка при компиляции с g++ mandelbrot_skript.cpp в терминале Ubuntu или в затмении:

mandelbrot_skript.cpp: In function ‘int main()’:
mandelbrot_skript.cpp:32:17: error: lvalue required as left operand of assignment
   for(real(c) = realrangeminus; real(c) <= realrangeplus; real(c) = real(c) + realsubdiv){
                 ^~~~~~~~~~~~~~
mandelbrot_skript.cpp:32:79: error: lvalue required as left operand of assignment
   for(real(c) = realrangeminus; real(c) <= realrangeplus; real(c) = real(c) + realsubdiv){
                                                                               ^~~~~~~~~~
mandelbrot_skript.cpp:35:19: error: lvalue required as left operand of assignment
     for(imag(c) = imagrangeminus; imag(c) <= imagrangeplus; imag(c) = imag(c) + imagsubdiv){
                   ^~~~~~~~~~~~~~
mandelbrot_skript.cpp:35:81: error: lvalue required as left operand of assignment
     for(imag(c) = imagrangeminus; imag(c) <= imagrangeplus; imag(c) = imag(c) + imagsubdiv){

                                                                             ^~~~~~~~~~

Я пытаюсьсоздайте образ множества Мандельброта, и код может быть совершенно неправильным, но это не главное.

Я не понимаю, почему появляется сообщение об ошибке. Насколько я вижу, ошибок в правописании нет, все переменные имеют правильный тип данных (я думаю), и я успешно попытался добавить и умножить действительную и мнимую части на нормальные двойные переменные. Эта ошибка появляется только тогда, когда я делаю это внутри функции for(). Странно тот же самый код выполняется без проблем внутри приложения для Android под названием «CPP N-IDE».

Итак, что же я не так делаю?

Ответы [ 2 ]

4 голосов
/ 04 ноября 2019

real(c) - функция считывания. c.real(value) - функция записи. источник

Таким образом:

for (c.real(realrangeminus); real(c) <= realrangeplus; c.real(real(c) + realsubdiv)) {

и т. Д.

0 голосов
/ 04 ноября 2019

cpp reference

Для любого указателя на элемент массива комплекса с именем p и любого допустимого индекса массива i reinterpret_cast (p) [2 * i] имеет виддействительная часть комплексного числа p [i] и reinterpret_cast (p) [2 * i + 1] является мнимой частью комплексного числа p [i]

Итак, как было сказано ранее, real(c) и imag(c) будут методами считывания для чтения переменных, а не их установки.

Дополнительную информацию об использовании комплексных чисел можно найти в StackOverflow здесь

...