Potrzebuję schemat blokowy - Kalkulator liczb zespolonych


(Kuna 87) #1

Witam,

jestem tu pierwszy raz i prosiłbym zeby mi ktos pomógł.. potrzebuję algorytm w schemacie blokowym do takiego oto kodu:

#include 

#include 

#include 

#include 

#include 


struct zmienna {

                double re;

                double im;

               };


void wprowadz(zmienna &l1, zmienna &l2,char znak);

void wyswietl(double suma1, double suma2);

void wyswietl_try_wyk(double &suma1,double &suma2);

void dodawanie(zmienna l1, zmienna l2, double &suma1, double &suma2, char znak);

void odejmowanie(zmienna l1, zmienna l2, double &suma1, double &suma2, char znak);

void mnozenie(zmienna l1, zmienna l2, double &suma1, double &suma2, char znak);

void dzielenie(zmienna l1, zmienna l2, double &suma1, double &suma2, char znak);

void potegowanie(zmienna l1, zmienna l2, double &suma1, double &suma2, char znak);


int main()

{

  textbackground(7);

  clrscr();

  bool wyjscie=false;

  char znak;

  double suma1,suma2;

  zmienna l1,l2;

  char znaki[40]="-\|/-\|/-\|/-\|/-\|/-\|/-\|/-\|/-\|/-\|/";

//-------------START SCREN-----------------------------------------------------//

    gotoxy(26,2);

    textcolor(16);

    cprintf("\nKALKUlATOR LICZB ZESPOLONYCH");

    gotoxy(28,4);

    textcolor(9);

    cprintf("\nWykonanie: RAFAL\n");

    for(int i=0;i<20;i++)

      {

       gotoxy(31,12);

       textcolor(12);

       cprintf("System loading... %c",znaki[i]);

       Sleep(100);

      }

//--------------------MENU-----------------------------------------------------//

  while(!wyjscie){

    clrscr();

    gotoxy(33,2);textcolor(9); cprintf("\n###...MENU...###");

    gotoxy(31,6);textcolor(16); cprintf("\n Wybierz dzia%canie:\n",136);

    gotoxy(32,8); cprintf("[+] Dodawanie.");

    gotoxy(32,9); cprintf("[-] Odejmowanie.");

    gotoxy(32,10); cprintf("[*] Mno%cenie.",190);

    gotoxy(32,11); cprintf("[/] Dzielenie.");

    gotoxy(32,12); cprintf("[^] Pot%cgowanie.",169);

    gotoxy(32,13); cprintf("[k] Koniec.");

    gotoxy(32,15); cprintf("Dokonaj wyboru:");

    char dzialanie=getch();

    clrscr();

    switch(dzialanie)

                {


                case '+':

                        clrscr();

                        textcolor(9); cprintf("\nWybra%ce%c dodawanie.",136,152);

                        wprowadz(l1,l2,znak);

                        dodawanie(l1,l2,suma1,suma2,znak);

                        wyswietl(suma1,suma2);

                        wyswietl_try_wyk(suma1,suma2);break;

                case '-':

                        clrscr();

                        textcolor(9); cprintf("\nWybra%ce%c odejmowanie.",136,152);

                        wprowadz(l1,l2,znak);

                        odejmowanie(l1,l2,suma1,suma2,znak);

                        wyswietl(suma1,suma2);

                        wyswietl_try_wyk(suma1,suma2);break;

                case '*':

                        clrscr();

                        textcolor(9); cprintf("\nWybra%ce%c mno%cenie.",136,152,190);

                        wprowadz(l1,l2,znak);

                        mnozenie(l1,l2,suma1,suma2,znak);

                        wyswietl(suma1,suma2);

                        wyswietl_try_wyk(suma1,suma2);break;

                case '/':

                        clrscr();

                        textcolor(9); cprintf("\nWybra%ce%c dzielenie.",136,152);

                        wprowadz(l1,l2,znak);

                        dzielenie(l1,l2,suma1,suma2,znak);

                        wyswietl(suma1,suma2);

                        wyswietl_try_wyk(suma1,suma2);break;

                case '^':

                        clrscr();

                        textcolor(9); cprintf("\nWybra%ce%c pot%cgowanie.",136,152,169);

                        potegowanie(l1,l2,suma1,suma2,znak);break;

                case 'k':

                        wyjscie=true;break;

                }

                 }

}

//-----------------IN----------------------------------------------------------//

void wprowadz(zmienna &l1, zmienna &l2,char znak)

{

  textcolor(16);

  cprintf("\n\rPodaj pierwsz%c liczb%c w formacie a(+/-)bi: ",165,169);

  scanf("%lg %lg %c",&l1.re,&l1.im,&znak);

  textcolor(16);

  cprintf("\rPodaj drug%c liczb%c w formacie a(+/-)bi: ",165,169);

  scanf("%lg %lg %c",&l2.re,&l2.im,&znak);

}

//------------------OUT--------------------------------------------------------//

void wyswietl(double suma1, double suma2)

{

  textcolor(16);

  cprintf("\n\n\rPosta%c algebraiczna: ",134);

  if ((suma2>0)||(suma2==0))

     {

     cprintf("%0.3lg", suma1);

     cprintf("+");

     cprintf("%0.3lg", suma2);

     cprintf("i");

     }

  else

     {

     cprintf("%0.3lg", suma1);

     cprintf("%0.3lg", suma2);

     cprintf("i");

     };

}

void wyswietl_try_wyk(double &suma1,double &suma2)

{

  double Pi1,Pi2,Pi3,r,dod;

  r=sqrt(suma1*suma1+suma2*suma2); //Modul liczby zespolonej//

  textcolor(16);

  if ((suma1==0)||(suma2==0))

     {cprintf("\n\rBrak postaci trygonometrycznej i wykladniczej.");}

  else

     {

     Pi1=atan(cos(suma1/r));

     Pi2=atan(sin(suma2/r));

     Pi3=atan(Pi1/Pi2);

     if (Pi3>0)

        {

        cprintf("\n\rPosta%c trygonometryczna: %0.3lg (cos %0.3lg +isin %0.3lg)",134,r,Pi3,Pi3);

        cprintf("\n\rPosta%c wykladnicza: e^i*%lg",134,Pi3);

        }

     else

        {

        dod=pow(Pi3,2);

        cprintf("\n\rPosta%c trygonometryczna: ",134);

        cprintf("%0.3lg ",r);

        cprintf("(-cos %0.3lg%c ",dod,20);

        cprintf("- isin %0.3lg%c)",dod,20);

        cprintf("\n\rPosta%c wyk%cadnicza: e^i*(%lg)",134,136,Pi3);

        };

  }

  cprintf("\n\n\rNACISNIJ DOWOLNY KLAWISZ...");

  getch();

}

//--------------DZIAŁANIA------------------------------------------------------//

void dodawanie(zmienna l1, zmienna l2, double &suma1, double &suma2, char znak)

{

  cprintf("\n\n\rSuma liczb urojonych: ");

  suma1=l1.re+l2.re;

  suma2=l1.im+l2.im;

}


void odejmowanie(zmienna l1, zmienna l2, double &suma1, double &suma2, char znak)

{

  cprintf("\n\n\rR%c%cnica liczb urojonych: ",162,190);

  suma1=l1.re-l2.re;

  suma2=l1.im-l2.im;

}


void mnozenie(zmienna l1, zmienna l2, double &suma1, double &suma2, char znak)

{

  cprintf("\n\n\rIloczyn liczb urojonych: ");

  suma1=(l1.re*l2.re)-(l1.im*l2.im);

  suma2=(l1.re*l2.im)+(l2.re*l1.im);

}


void dzielenie(zmienna l1, zmienna l2, double &suma1, double &suma2, char znak)

{

  cprintf("\n\n\rIloraz liczb urojonych: ");

  suma1=((l1.re*l2.re)+(l1.im*l2.im))/((l2.re*l2.re)+(l2.im*l2.im));

  suma2=((l2.re*l1.im)-(l1.re*l2.im))/((l2.re*l2.re)+(l2.im*l2.im));

}

void potegowanie(zmienna l1, zmienna l2, double &suma1, double &suma2, char znak)

{

  int n;

  double Pi1,Pi2,kat,r,p,p1,p2;

  double pot_pi,dod;

  textcolor(16);

  cprintf("\n\rPodaj liczb%c w formacie a(+/-)bi: ",169);

  scanf("%lg %lg %c",&l1.re,&l1.im,&znak);

  cprintf("\nPodaj stopie%c pot%cgi: ",228,169);

  scanf("%i", &n);


  r=sqrt(l1.re*l1.re+l1.im*l1.im); //Modul liczby zespolonej//

  Pi1=atan(cos(l1.re/r));

  Pi2=atan(sin(l1.im/r));

  kat=atan(Pi1/Pi2);

  pot_pi=kat*n;


  p=pow(r,n);

  p1=pow(l1.re,n);

  p2=pow(l1.im,n);


  cprintf("\n\n\rPot%cga stopnia %i wynosi:",169,n);

  cprintf("\rPosta%c algebraiczna: ",134);

        if ((p2>0)||(p1==0))

           {

           cprintf("%0.3lg",p1);

           cprintf("+");

           cprintf("%0.3lg",p2);

           cprintf("i");

           }

        else

           {

           cprintf("%0.3lg",p1);

           cprintf("%0.3lg",p2);

           cprintf("i");

           };

        if (pot_pi>0)

           {

           cprintf("\n\rPosta%c trygonometryczna: %0.3lg (cos %0.3lg%c + isin %0.3lg%c)",134,p,pot_pi,20,pot_pi,20);

           }

        else

           {

           dod=pow(pot_pi,2);

           cprintf("\n\rPosta%c trygonometryczna: ",134);

           cprintf("%0.3lg ",p);

           cprintf("(-cos %0.3lg%c ",dod,20);

           cprintf("- isin %0.3lg%c)",dod,20);

           };

  cprintf("\n\rPosta%c wyk%cadnicza: e^i*%lg",134,136,pot_pi);

  cprintf("\n\n\rNACISNIJ DOWOLNY KLAWISZ...");

  getch();

}

Jakby ktoś mógłby mi pomóc byłbym bardzo wdzięczny!!

Z góry dziękuje i pozdrawiam :slight_smile:


(Fiołek) #2

Nie za dużo tego kodu? Wątpię czy Ci ktoś to ot tak napisze...


(Kuna 87) #3

Kodu nie jest chyba za dużo... zresztą nie wiem czy da sie to skrócić jakoś .. :] jest to progam który umożliwia dodawanie, odejmowanie, mnozenie, dzielenie i pierwiastkowanie liczb zespolonych.. program wyświetla wynik w postaci trygonometrycznej, algebraicznej i wykładniczej.. jest menu graficzne :]

Algorytm wydaje mi sie ze musi byc prosty? tzn. Start, Wprowadzenie zmiennych, Wylicznie, Przedstawienie w 3 postaciach i tyle ?

Jak mówisz ze nikt mi nie pomoze sam sie pomęcze ... jak zrobie to wrzuce na forum moze sie komus przyda :]

Pozdro