Προς το περιεχόμενο

C++ μιγαδικοί (επειγον)


panoos3162

Προτεινόμενες αναρτήσεις

hello παιδιά.μια ερώτηση.

γραφω σε C ,βάζω #include<complex.h>

θέλω να ορίσω μια μεταβλητή ως μιγαδικό.πως την ορίζω? υπάρχει πρότυπη δήλωση η ορίζω εγώ τη δομή δεδομένων.θέλω να την ορίσω έτσι ώστε να μπορώ να χρησιμοποιήσω συναρτήσεις βιβλιοθήκης.

μετά θέλω μια συνάρτηση στην οποία να εισάγω τον μιγαδικό κ να μου εμφανίζει το φ(χ) για φ(χ)=pow(x,4) - 2*pow(x,3) + 2*pow(x,2) - 17*x + 72.25;

ποιά συνάρτηση χρησιμοποιώ για ύψωση σε δύναμη μιγαδικού,πολ/σμο,διαιρεση κ προσθαφαίρεση?

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Μπορείς να φτιάξεις ένα object (δηλαδή class) που να αναπαριστά μιγαδικούς π.χ.

 

class Complex

{

Complex(float,float);

private:

float realpart;

float imaginarypart;

};

Complex::Complex(float rl,float im)

{

realpart=real;

imaginarypart=im;

}

αλλά αμφιβάλλω αν θα μπορεί να επικοινωνεί με υπάρχουσες συναρτήσεις. Μπορείς όμως πολύ εύκολα να φτιάξεις εσύ συναρτήσεις που να κάνουν βασικές πράξεις με το object που θα έχεις φτιάξει.

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Πιο βολική η complex της STL

>
#include <complex>
#include <iostream>

using namespace std;

int main()
{
complex<double> cr;
complex<double> ca(3.0, 2.0);
complex<double> cb(3.0, -2.0);
cr = pow(ca, 2);
cout<<cr<<endl;
cr = ca * cb;
cout<<cr<<endl;
cout<<norm(ca)<<endl;
return 0;
}

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Λοιπον εχω το εξης πρόβλημα.θέλω ν μπορω να χρησιμοποιησω καποιες βασικες συναρτησεις για μιγαδικους οπως πολ,σμο,προσθαφαιρεση,μετρο,real(x),imag(x)..αυτα.εγραψε ένα προγραμμα αλλα επειδή είμαι νεος σε C δεν μπορω να βρω τα λάθη.ισως μπορεις να με βοηθησεις επειδή βλέπω ότι την ξέρεις.

Το πρόβλημα απλό.σε ένα πλέγμα μιγαδικών να εφαρμώσω μέθοδο Newton-Rapson για να βρω τις ρίζες μιας συνάρτησης.θέλουμε να εκτυπώνουμε μόνο τις καινούριεσ ρίζες που βρίσκουμε κ τέλος να εκτυπώνουμε για κάθε Ζο του πλεγματος :" * " αν δεν συγκλίνει σε κάποια ρίζα," 1 " αν συγκλίνει στη πρώτη κ.ο.κ.

 

ΑΥΤΟ ΠΟΥ ΘΕΛΩ ΕΙΝΑΙ ΝΑ ΜΕ ΒΟΗΘΗΣΕΤΕ ΜΕ ΤΗ ΣΥΝΤΑΞΗ

 

bilco το προσπαθησα αυτο που ειπες αλλα δεν μπορεσα να βγαλω ακρη

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Κοιτάζοντας τον κώδικα σου έχω την εντύπωση ότι δεν δουλεύει, δεν τον έβαλα βέβαια μέσα στον compliler αλλά τα real και τα imag δεν βρίσκονται στο math.h. Επίσης κάπου λες list temp και μετά ενώ έχεις ένα δείκτη στην λίστα σου τον οποίο τον περνάς σαν όρισμα στην συνάρτηση λες, temp = ptr;. Εδώ έχουμε λάθος. Επίσης εφόσον ονομάζεις ως complex την δομή που ονομάζεις μιγαδικό αριθμό παιρνώντας ως migadikos την συνάρτηση δεν θα δουλέψει, βάλε ή struct migadikos f(....) ή complex f(....). Επίσης για να κάνεις την άσκηση πρέπει να διαλέξεις C ή C++ με την χρήση STL framework, μην τα μπουρδουκλώσεις και τα 2. Επίσης επιστρέφεις σε κάθε συνάρτηση τον μιγαδικό, πως το κάνεις αυτό; Επίσης πως περνάς το χ σαν δομή σε κάθε συνάρτηση για να κάνεις πράξεις;

Δηλαδή αν χ η δομή ενός μιγαδικού που έχει πραγματικό και φανταστικό μέρος, έστω οτι τον περνάς σαν όρισμα λοιπόν, τι σημαίνει για τον compiler το 2 * χ ???? ή το χ + 3 ???? Μήπως πρέπει να του πεις ότι βάλε μου σε μία νέα δομή το αποτέλεσμα της δομής που έχω + 3 αλλά έτσι;

 

Και στην main() τα έχεις κάνει λίγο σαλάτα....

 

complex sumInt(complex X, int num)

{

complex Y;

Y.real = X.real + num;

Y.imag = X.imag;

return Y;

}

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

+1 σε αυτά που αναφέρει ο bokarinho. Αποφάσισε πρώτα C vs C++.

Αν η επιλογή είναι C εγώ θα σου πρότεινα να φτιάξεις τις 4-βασικές πράξεις (c_add, c_sub, c_div, c_mul) με ορίσματα μόνο μιγαδικούς. π.χ.

>
complex c_div(complex a, complex 
{
complex ret;
double nb;
nb = b.real * b.real + b.imag * b.imag;
ret.real = (a.real * b.real + a.imag * b.imag) / nb;
ret.imag = (a.imag * b.real - a.real * b.imag) / nb;
return ret;
}

Για πράξεις μιγαδικών με πραγματικούς, μπορείς να μετατρέψεις τον πραγματικό σε complex (σε βάρος της ακρίβειας και της ταχύτητας αλλά υπερ της απλότητας) π.χ. η συνάρτησή σου f μπορεί να γίνει

>
complex f(complex x)
{
complex c2, c17, c72dot25;
c2.real = 2.0; c2.imag = 0;
c17.real = 17.0; c17.imag = 0;
c72dot25.real = 72.25; c72dot25.imag = 0;
return c_add(c_mul(c_sub(c_mul(c_add(c_mul(c_sub(x, c2), x), c2), x), c17), x), c72dot25);
}

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

παιδιά ευχαριστώ παρα πολύ με βοήθησαν αυτά που είπατε.

με ποιο κριτήριο επιλέγω c or c++.ποια η διαφορά τους?

 

τελικα το προγραμμα αυτο το εδωσα ετσι χωρίς να τρέχει

(τελείωσα τα υπόλοιπα της εργασίας,δεν αξιζε να κάτσω μια μέρα ολόκληρη για να πάρω επιπλέον μόνο 0,2 στα 10)

θα το διορθώσω κάποια στιγμή στο άμεσο μέλλον κ θα σας πω τα αποτελέσματα.

ΕΥΧΑΡΙΣΤΩ Κ ΠΑΛΙ

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Αρχειοθετημένο

Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.

  • Δημιουργία νέου...