Liczby zespolone – losowanie liczb

0

W jaki sposób przerobić poniższy kod, aby wczytywał losowe liczby zespolone?


#include <stdio.h>
#include <stdlib.h>
#include <complex.h>

void readComplex1D ( double complex z[], int n);
void printComplex1D ( double complex z[], int n,char nazwa[]);
void minMaxComplex( double complex z[], int n,  double complex wynikiComplex[]);

int main()           // int main(int argc, char *argv[])
{
    int n=5;
    double complex z[n];
    double complex wynikiComplex[2];
    readComplex1D (z, n);
    printComplex1D (z,n,"z");

    minMaxComplex(z,n,wynikiComplex);
    printf("\n Wyniki");
    printComplex1D (wynikiComplex,2, "Wyniki");
    fflush(stdin);

    getchar();
    return 0;
}
    void readComplex1D ( double complex z[], int n)
    {
        int i;
        for ( i=0; i<n;i++)
        { printf("\n element[%d]=",i);
        scanf("%lf %lf", &(__real__ z[i]),&(__imag__ z[i])); }
    }
    void printComplex1D ( double complex z[], int n, char nazwa[])
    {
        int i;
        for ( i=0; i<n;i++)
        printf("\n %s [%d]=%lf %lf", nazwa, i,creal(z[i]),cimag(z[i]));

    }
    void minMaxComplex( double complex z[], int n,double complex wynikiComplex[])
    {
       double min,max, modul;
        int i, ind1=0,ind2=0;
       min=max=cabs(z[0]);
       for (i=1; i<n;i++)
        {
         modul=cabs(z[i]);
         if ( modul<min)
         {
          min=modul;
           ind1=i;
          }
         if ( modul>max) 
          {
            max=modul;
            ind2=i;
            }
        }
         wynikiComplex[0]=z[ind1];
         wynikiComplex[1]=z[ind2];
    }




0

Czego dokładnie nie rozumiesz, aby dopisać losowanie części liczby zespolonej?
rand() powinno się przydać.

0

Wiem jak losować liczby w innych przypadkach.Na przykład

srand(time(0));

printf("\n Drukuj liczbe %d",rand()%30);

Jak to użyć dla liczb zespolonych?

0

W tym przypadku zostają uzupełnione jedynie części rzeczywiste.

#include <stdio.h>
#include <stdlib.h>
#include <complex.h>

void wczyt1D(double complex z[],int n,char znak[]);
void druk1D(double complex z[],int n,char znak[]);
void minMaxComplex(double complex z[],int n,double complex wynikiComplex[]);

int main()
{
int n=4;
double complex z[n];
wczyt1D(z,n,"z");
druk1D(z,n,"z");
double complex wynikiComplex[2];
minMaxComplex(z,n,wynikiComplex);
druk1D(wynikiComplex,2,"wyniki");
srand(time(NULL));


    getchar();
    return 0;
}
void wczyt1D(double complex z[],int n,char znak[])
{
    int i;
    for(i=0;i<n;i++)
    {
       // printf("\n Podaj liczbe %s[%d]: ",znak,i);
       // scanf("%lf %lf",&(__real__ z[i]),&(__imag__ z[i]));
      z[i]=rand()%30;
    }
}
void druk1D(double complex z[],int n,char znak[])
{
    int i;
    for(i=0;i<n;i++)
    {
        printf("\n Liczba %s[%d]= %lf +j%lf",znak,i,creal(z[i]),cimag(z[i]));
    }
}
void minMaxComplex(double complex z[],int n,double complex wynikiComplex[])
{
    int i;
    int ind1=0,ind2=0;
    double min,max,modul;
    min=max=cabs(z[0]);

    for(i=1;i<n;i++)
    {
        modul=cabs(z[i]);
        if(modul<min)
        {
            min=modul;
            ind1=i;
        }
        if(modul>max)
        {
            max=modul;
            ind2=i;
        }
    }
wynikiComplex[0]=z[ind1];
wynikiComplex[1]=z[ind2];
}

0

Cóż, liczbę zespoloną wylosujesz losując dwie liczby rzeczywiste, nie ma innej drogi, bo wymiar C nad R to 2.

0

Czy tak jest poprawnie?


void readZ(double complex z[],int n,char znak[])
{
    int i;
    for(i=0;i<n;i++)
    {
      
    __real__ z[i]=rand()%30;
    __imag__ z[i]=rand()%30;

    }
}

0

Kompiluje się, wypisuje nawet (na pierwszy rzut oka) chyba poprawne wyniki

1 użytkowników online, w tym zalogowanych: 0, gości: 1