Jump to content

Recommended Posts

  • Moderators
Posted

Sa se scrie un program in C care sa permita efectuarea unor operatii asupra unor numere complexe. Programul trebuie sa contina definirea tipului de data nr_complex si urmatoarele functii pentru operatiile cu numere complexe:

void citire (nr_complex *rezultat);

 void afisare (nr_complex n);

 void adunare (nr_complex n1, nr_complex n2, nr_complex *rezultat);

 void scadere (nr_complex n1, nr_complex n2, nr_complex *rezultat);

 void inmultire (nr_complex n1, nr_complex n2, nr_complex *rezultat);

 double modul (nr_complex n);

 void conjugat (nr_complex n, nr_complex *rezultat);
Programul trebuie sa contina un meniu cu urmatoarele optiuni: 1. Suma 2. Diferenta 3. Produsul 4. Modulul 5. Conjugatul 0. Exit La selectarea optiunilor 1, 2 sau 3, aplicatia va citi de la tastatura 2 numere complexe si va afisa rezultatul operatiei corespunzatoare. Pentru optiunile 4 si 5, aplicatia va citi un singur numar complex si va afisa rezultatul operatiei respective. Meniul se repeta pana cand utilizatorul selecteaza optiunea 0.
#include <stdio.h>

 #include <conio.h>

 #include <math.h>


 typedef struct {

     double rl;

     double im;

 } nr_complex;


 void citire(nr_complex * rezultat)

 {

     printf("real="); scanf("%lf", &(rezultat->rl));

     printf("imag="); scanf("%lf", &(rezultat->im));

 }


 void afisare(nr_complex n)

 {

     if (n.rl)

     {

         printf("%7.3lf", n.rl);

         if (n.im)

         {

             if (n.im>0) printf("+");

             printf("%7.3lfi", n.im);

         }

     }

     else

     {

         if (n.im) printf("%7.3lf", n.im);

         else printf("0");

     }

 }


 void adunare(nr_complex n1, nr_complex n2, nr_complex * rezultat)

 {

     rezultat->rl=(n1.rl+n2.rl);

     rezultat->im=(n1.im+n2.im);

 }


 void scadere(nr_complex n1, nr_complex n2, nr_complex * rezultat)

 {

     rezultat->rl=(n1.rl-n2.rl);

     rezultat->im=(n1.im-n2.im);

 }


 void inmultire(nr_complex n1, nr_complex n2, nr_complex * rezultat)

 {

     rezultat->rl=(n1.rl*n2.rl-n1.im*n2.im);

     rezultat->im=(n1.rl*n2.im+n1.im*n2.rl);

 }


 double modul(nr_complex n)

 {

     return sqrt(pow(n.rl, 2)+pow(n.im, 2));

 }


 void conjugat(nr_complex n, nr_complex * rezultat)

 {

     rezultat->rl=n.rl;

     rezultat->im=-n.im;

 }


 int meniu(void)

 {

     nr_complex a, b, r;

     const char men[6][80]={    "Suma",

                 "Diferenta",

                 "Produsul",

                 "Modulul",

                 "Conjugatul",

                 "Exit" };

     unsigned ttl;


     ttl=0;

     do

     {

         switch (meniu_core(men, 6))

         {

             case 1:

             {

                 printf("\n\rIntroduceti primul numar:\n\r");

                 citire(&a);

                 printf("\n\rIntroduceti al doilea numar:\n\r");

                 citire(&b);

                 adunare(a, b, &r);

                 printf("Suma este: "); afisare(r);

                 getch();

             } break;

             case 2:

             {

                 printf("\n\rIntroduceti primul numar:\n\r");

                 citire(&a);

                 printf("\n\rIntroduceti al doilea numar:\n\r");

                 citire(&b);

                 scadere(a, b, &r);

                 printf("Diferenta este: "); afisare(r);

                 getch();

             } break;

             case 3:

             {

                 printf("\n\rIntroduceti primul numar:\n\r");

                 citire(&a);

                 printf("\n\rIntroduceti al doilea numar:\n\r");

                 citire(&b);

                 inmultire(a, b, &r);

                 printf("Produsul este: "); afisare(r);

                 getch();

             } break;

             case 4:

             {

                 printf("\n\rIntroduceti numarul:\n\r");

                 citire(&a);

                 printf("Modulul este: %7.3lf", modul(a));

                 getch();

             } break;

             case 5:

             {

                 printf("\n\rIntroduceti numarul:\n\r");

                 citire(&a);

                 conjugat(a, &r);

                 printf("Conjugatul este: "); afisare(r);

                 getch();

             } break;

             case 6:

             default: ttl=1;

         };

     } while (!ttl);

     return 0;

 }


 int main()

 {

     return meniu();

 }

sursa: tutorialehd.info

Posted

explica-mi te rog:

1) switch (meniu_core(men, 6)) -> ce-i asta?

2) ce-i cu unsigned ttl; ? dc il folosesti sub forma asta?

3) rezultatu' ala e folosit ca toata ceapa..il iei ca si pointer, doar ca sa-i pastrezi valoarea cu referinta pacii, care o folosesti doar pentru afisare.. in loc sa o afisezi direct in functie(varianta scurta), sau sa faci functia respectiva sa returneze un numar complex (rezultatu').

Scuze, da' e facut foarte aiurea codu'. (parerea mea)

love is a verb
Love is a doing word

Posted

numai de curiozitate Pav, tu stii ce sunt numerele complexe? multimea numerelor complexe? Nu mai stiu sigur dar cred ca in a 10-a se faceau (daca imi amintesc eu bine).

  • Moderators
Posted

numai de curiozitate Pav, tu stii ce sunt numerele complexe? multimea numerelor complexe? Nu mai stiu sigur dar cred ca in a 10-a se faceau (daca imi amintesc eu bine).

Mmm ... îmi aduc aminte ceva din ce-mi spunea altcineva. Era şi un număr "i", care ridicat la pătrat dădea -1.

Posted

As se numeste mai nou Google?=)

Apropo, Alex, ce-ai facut la simulare la Info?

Nu fac info, decat tic... ca la tehnic nu se face. Dar tu ce ai facut?

Mmm ... îmi aduc aminte ceva din ce-mi spunea altcineva. Era şi un număr "i", care ridicat la pătrat dădea -1.

Si sa-ti dau si un exemplu. Stii ca ti se zice ca nu exista radical din -1? acum o sa existe. Nr compleze sunt asa numitele nr imaginare si e cam acelasi lucru numai ca atunci cand scoti de sub radical pui un i sau ceva de genu. Oricum la mine nu intra la bac... so don't care. si o sa fie ceva de genu N c Z c R c C unde c este inclus. Ma rog sunt simple cel putin ce am afcut eu.

Posted

@courage: daca toata lumea ar da copy paste aici, s-ar umple forumu-l asta d multe chestii... mai mult sau mai putin importante, si totodata de foarte muuulte intrebari, la care nu multi stiu sa raspunda. :->

@godsotherhand:

1. Numerele de tipul unsigned sunt totdeauna pozitive.

2. int meniu(void) intoarce void; o functie de tip void nu returneaza o valoare in mod explicit, executa doar o secventa de instructiuni.

3. switch (meniu_core(men, 6)): nu are un prototip declarat.

@courage: gasesti p gogu explicatii despre switch() si macar daca postezi ceva SA SI INTELEGI ceva din asta. (ps: e un sfat :yes: )

bafta :-h

  • Upvote 1
Posted

deci tu nush ceai vrut sami zici, da mai aburit..

1) nu asta era problema.. dc a folosit unsigned? Si int era la fel de bun, la fel de optim. Daca vroia sal optimizeze, folosea boolean. Insa sa foloseasca unsigned nu la optimizat cu nimic ( foloseste doar 2 valori).

2) cand mam legat eu de functia aia void meniu? eu vorbeam de alea in care aduna, etc (void adunare, care ar fi fost mai frumos de tipul complex adunare( complex a, complex b). (

3)meniu_core(men, 6) ala eu intrebam ce e.. chiar nush ce face, asta e singura intrebare la care chiar cautam un raspuns..

love is a verb
Love is a doing word

Please sign in to comment

You will be able to leave a comment after signing in



Sign In Now
  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.