Liczby zespolone w języku C (cz.) Standard ISO C99 wprowadza wsparcie dla liczb zespolonych w języku C. Jest to realizowane przez wprowadzenie słów kluczowych _Complex i _Imaginary oraz nowych kwalifikatorów complex, _Complex_I, imaginary, _Imaginary_I. Mają one następujące znaczenie - complex identyfikator służący definicji typu zespolonego - _Complex_I identyfikator reprezentujący - imaginary identyfikator służący definicji typu urojonego - _Imaginary_I identyfikator reprezentujący typu urojonego Nie wszystkie są obsługiwane przez przez kompilator DevC++. Obsługuje on _Complex, _Complex_I oraz complex ( jeśli włączono plik complex.h ) Plik ten umożliwia również stosowanie identyfikatora I jako.
Liczby zespolone w języku C (cz.) Przykład. apis liczb zespolonych w programie C. (zastosowanie I i _Complex_I).0 +4.0 i.0+ 4.0 * I.0 +4.0 i.0+ 4.0 * _Complex_I
Liczby zespolone w języku C (cz.) Typy zespolone Przykłady definicji zmiennych typów zespolonych. float _Complex z; // części rzeczywista i urojona są typu float float complex z; double complex double _Complex z; // części rzeczywista i urojona są typu double w[]={ +*I, -+4*I};// definicja tablicy // z inicjalizacją long double _Complex z4; long double complex z5; Na wartościach typów zespolonych można wykonywać te same działania arytmetyczne co na typach rzeczywistych ( +,-,*,/)
Liczby zespolone w języku C (cz.4) W C99 wprowadzono szereg arytmetycznych funkcji standardowych umożliwiających realizację różnego rodzaju operacji na danych zespolonych. Poniżej podano cztery wybrane funkcje: cabs() - oblicza wartość modułu liczby zespolonej carg() -oblicza kąt fazowy creal() - wyznacza część rzeczywistą liczby zespolonej cimag() - wyznacza część urojoną liczby zespolonej Oprócz tych funkcji istnieją specjalne konstrukcje, które umożliwiają wczytywanie liczb zespolonych jak również wyznaczanie części rzeczywistej i części urojonej. Wyrażenie real zmiennaespolona reprezentuje część rzeczywistą zmiennej zmiennaespolona ( to podwójne podkreślenie) Wyrażenie imag zmiennaespolona reprezentuje część rzeczywistą zmiennej zmiennaespolona Poniżej w programie zastosowano wczytywanie i drukowanie wartości zespolonych z użyciem tych konstrukcji.
Liczby zespolone w języku C (cz.5) int main(int argc, char *argv[]){ double _Complex z,z;// pierwszy sposób definicji double complex z,z4;// drugi sposób definicji double complex z5=00+00*i;// definicja z //inicjalizacją // Przypisywanie wartości liczbom zespolonym z=+*_complex_i;// +i z=4+6*i; // 4+6i z=z+z; // sumowanie liczb zespolonych // podobnie odejmowanie, mnozenie i dzielenie printf("\n z5=%f+j%f",creal(z5),cimag(z5)); // funkcja creal(z) wyznacza część rzeczywistą liczby // zespolonej, a cimag(z) część urojoną.
Liczby zespolone w języku C (cz.6) // wczytywanie liczby zespolonej i drukowanie printf("\n z="); scanf("%lf %lf", &( real z),&( imag z)); // drukowanie liczby zespolonej (sposob ) printf("\n z=%lf %lf", creal(z),cimag(z)); // drukowanie liczby zespolonej (sposob ) printf("\n z=%lf %lf", real z, imag z);
Liczby zespolone w języku C (cz.7) Przykład. Napisać program realizujący transformacje gwiazda-trójkąt i trójkąt-gwiazda dla zadanych impedancji wczytywanych z wejścia, wczytywać z klawiatury kierunek transformacji. + + = + + = + + =
Liczby zespolone w języku C (cz.8) Przykład. Napisać program obliczający prąd w obwodzie dla zadanego napięcia wejściowego i zadanych impedancji, następnie zmodyfikować program, tak aby dane były wprowadzane z klawiatury. i +j 6-j 0e j0 ~ 0+j.5 0-j4 5-j -j
Liczby zespolone w języku C (cz.9) X ( jω) K ( jω) Y ( jω) K ( jω) Y ( jω) K ( jω) = X ( jω) - transmitacja zespolona
Liczby zespolone w języku C (cz.0) K( j ω ) = K( j ω ) e jθ ( ω ) K ( jω) -charakterystyka amplitudowa θ (ω ) -charakterystyka fazowa 0log K( jω) W decybelach
Liczby zespolone w języku C (cz.) Przykład.Obliczanie charakterystyki amplitudowej filtru. #include <stdio.h> #include <stdlib.h> #include <complex.h> int main () { double complex z,z,z; double complex p,p,p,p4,k_jomega; double absk_jomega,absk_jomega; double Omega=0; int i; p=-0.9+0.8*i;//sprzężone bieguny transmitancji p=-0.9-0.8*i; p=-0.8+0.9*i; p4=-0.8-0.9*i;
Liczby zespolone w języku C (cz.) // Obliczanie modulu charakterystyki amplitudowej for (i=0;i<00;i++) { K_jOmega=(Omega*I+p)*(Omega*I+p)\ *(Omega*I+p)*(Omega*I+p4); K_jOmega=/K_jOmega; // obliczanie absk_jomega=0*log0(sqrt(creal(k_jomega)*\ creal(k_jomega)+cimag(k_jomega)*cimag(k_jomega))); // uzycie funkcji obliczajacej modul liczby zespolonej (drugi sposób) absk_jomega=0*log0(cabs(k_jomega));