آژانس هواپیماییexchanging

کلاس عملگر های اعداد مختلط

شروع موضوع توسط hossein2kk ‏1 آپریل 2010 در انجمن خانواده C++ , C

  1. hossein2kk

    hossein2kk Registered User

    تاریخ عضویت:
    ‏31 جولای 2007
    نوشته ها:
    48
    تشکر شده:
    1
    وقت بخیر دوستان
    این کلاس رو من نوشتم که میشه گفت حل یکی از تمرین های کتاب آقای قمی هست ، یک سری مشکل وجود داره که که هنوز نتونستم اونعا رو رفه کنم که گفتم از شما دوستان برای حل اون کمک بگیرم . کلاس اصلی من به شرح زیر هست :
    کد:
    # include <iostream.h>
    # include <conio.h>
    # include <stdio.h>
    # include <string.h>
    
    class complex {
       public:
       float x1,x2,y1,y2,result_x,result_y;
       char *answer;
       char ope;
       void sum();
       void min();
       void mul();
       void div();
       void core();
       void read();
       void again();
       complex ();
    };
    void main (){
    	complex obj ;
       getch();
    }
    complex::complex(){
       strcpy(answer,"yes");
       core();
    }
    
    void complex::core(){
    	read();
    	while (1){
       	if(ope == '+'){
          	sum();
          }else if (ope == '-') {
             min();
          }else if (ope == '*'){
             mul();
          }else if (ope == '/'){
             div();
          }else{
          	cout << "Invalid Entry." << endl;
             break;
          }
          cout << "Your result is " << result_x << ((result_y > 0) ? "+" : "") << result_y << "i" << " (do you want to have a new operation on this result ? yes/no)" <<endl;
          cin.get(answer,4);
          cin.get();
          if(!strcmp(answer,"yes")){
          	cout << "Enter your optional operation with "<< result_x << ((result_y > 0) ? "+" : "") << result_y << "i" << " (Example : *(4-6i) )" << endl;
    			scanf ("%c(%e%ei)",&ope,&x2,&y2);
             x1 = result_x;
             y1 = result_y;
          	continue;
          }else{
          	break;
          }
       }
    	again();
    }
    void complex::sum(){
    	result_x= x1+x2;
       result_y = y1+y2;
    }
    void complex::min(){
    	result_x=x1-x2;
       result_y=y1-y2;
    }
    void complex::mul(){
    	result_x=(x1*x2)-(y1*y2);
       result_y=(x1*y2)+(x2*y1);
    }
    void complex::div(){
    	result_x=(x1*x2+y1*y2)/(x2*x2+y2*y2);
       result_y=(y1*x2-y2*x1)/(x2*x2+y2*y2);
    }
    void complex::read(){
    	cout << "Enter your optional operation (Example : (2+3i)*(4-6i) )" << endl;
    	scanf ("(%e%ei)%c(%e%ei)",&x1,&y1,&ope,&x2,&y2);
    }
    void complex::again (){
    	cout << "Do you want to have a new operation with two new numbers ? yes/no" << endl;
       cin.get(answer,4);
       cin.get();
       if (!strcmp(answer,"yes")){
          core();
       }
    }
    اولین مشکل اینجاست که وقتی ما از حلقه while در تابع core بیرون میایم از ما سوال میشه که آیا می خواهیم دوباره اجرا کنیم عملیات ها رو یا نه(تابع again) ، که در این صورت تابع دوباره تابع core فراخوانی خواهد شد یا خیر . ولی مشکل اینجاست که وقتی دوباره به ابتدای تابع برمیگرده برنامه خط scanf از تابع read رو کاملا skip می کنه و به Invalid Entry میره .
    دومین مشکل برنامه من اینه که اگه هیچ علامتی بین دو تا عدد موهومی نذارم می خوام عملیات ضرب انجام بشه مثلا (x+iy)(k+mi) .
    سومین مشکلم اینه که قبل از i مقدار موهومی عدد مختلط هست رو بتونیم اگه هیچی وارد نکنیم 1 برای i و -1 برای -i در نظر بگیره ، مثلا x-i .
    یه اشکال محاسباتی هم داره کلاس نمی دونم چرا . مثلا 1-2i ضرب در 3+1i باید بشه 5-5i ولی خروجی میده 5+1i . من چند بار الگوریتم رو چک کردم ولی نفهمیدم مشکل از کجاست.

    پیشاپیش ممنون از توجهتون
     
    Last edited: ‏1 آپریل 2010