From: Erika B. <eri...@st...> - 2004-03-08 16:44:26
|
Hi guys! I have experienced a lot of problems programming with Dev-cpp 4.0; though, I continue to think that it is one of the most well-working application in order to program with C++ using Windows. So, I will make a list of my problems. First of all, I have some problems with the system of input/output. It seems that the program does not recognise cin >>...But it's probably my fault. This is the guilty program: #include <iostream.h> #include <stdio.h> #include <stdlib.h> #include <math.h> #include <complex.h> class Complesso { double re, im; /* le due componenti di un numero complesso*/ public: Complesso(); /* costruttore di default */ Complesso(double r, double i); /* costruttore con le due componenti */ Complesso operator+ (Complesso c); /* overloading di '+' per la somma fra numeri complessi */ Complesso operator-(Complesso d); /* overloading di '-' per la differenza fra numeri complessi */ Complesso operator*(Complesso e); /* overloading di '*' per il prodotto fra numeri complessi */ Complesso operator/(Complesso f); /* overloading di '/' per la divisione fra numeri complessi */ Complesso operator=(double re); double show(); }; /* fine dichiarazioni */ Complesso::Complesso() { re = 0; im = 0; } Complesso::Complesso(double r, double i) { re = r; im = i; } Complesso Complesso::operator+(Complesso c){ /* overloading di '+' per la somma fra numeri complessi */ Complesso a, b; c.re = a.re + b.re; c.im = a.im + b.im; return c; } Complesso Complesso::operator-(Complesso d){ /* overloading di '-' per la differenza fra numeri complessi */ Complesso a, b; d.re = a.re - b.re; d.im = a.im - b.im; return d; } Complesso Complesso::operator*(Complesso e){ /* overloading di '*' per il prodotto fra numeri complessi. NOTA: il prodotto del numero Complesso (a + ib) per il numero complesso (c + id) da' come risultato il numero complesso (ac-bd) + i(ad+bc) */ Complesso a, b; e.re = a.re*b.re - b.im*b.im; e.im = a.re*b.im + b.im*b.re; return e; } Complesso Complesso::operator/(Complesso f){ /* overloading di '/' per la divisione fra numeri complessi. NOTA: la divisione del numero complesso (a + ib) per il numero complesso (c + id) e' definita solo se almeno uno fra c e d e' diverso da 0. Il risultato e' il numero complesso (ac + bd)/(c^2+d^2)+ i (bc - ad)/(c^2+d^2) */ Complesso a, b; if (f.re!=0 || f.im!=0){ f.re = (a.re*b.re + a.im*b.im)/(a.re*b.re + b.im*b.im); f.im = (a.im*b.re - a.re*b.im)/(a.re*b.re + b.im*b.im); } return f; }; Complesso a, b, c, d, e, f; Complesso Complesso::operator=(double re) { c = c.re + c.im; return *this; } double Complesso::show() { printf("%lf, %lf"), c.re, c.im ; printf("c.re\n"); printf("c.im\n"); } int main() { cout <<"dammi a: ", cin >> (Complesso a); cout <<"\ndammi b: ", cin >> (Complesso b); c = a + b ; cout<< "la somma di a e b \350 c \n" ; c.show(); system("PAUSE"); return 0; } It is a classs that should do all the operstions between complex numbers, but it does'nt work very well. Dev-cpp doesn't show any fault, though. There is another version that works well on others pc, but on mine M_PI is not recognoised. Here it is: #include <iostream.h> #include <stdio.h> #include <math.h> class complex { double a[200], b[200], radice[2], somma[2], divisione[2], prodotto[2], x1[2], x2[2]; double x, y, z, t, p1, p2, p3, Delta, RAD, modulo, theta; int i, n, h; public: int Avvio(int r); int Importa(); int Somma(); int Prodotto(); int Divisione(); int Radice(); int Polinomio(); }; int complex::Avvio(int r) { switch(r) { case 1: {Somma(); break;} case 2: {Prodotto(); break;} case 3: {Divisione(); break;} case 4: {Radice(); break;} default: Polinomio(); } } int complex::Importa() { printf("\nQuanti numeri complessi vuoi usare max[200]? "); scanf("%d", &n); printf("\nInserisci i coefficienti dei %d numeri.\n", n); for (i=0; i<n; i++) { printf("\na%d: ", i); scanf("%lf", &a[i]); printf("b%d: ", i); scanf("%lf", &b[i]); } } int complex::Somma() { Importa(); somma[0]= a[0]; somma[1]= b[0]; for(i=1; i<n; i++) { somma[0]+= a[i]; somma[1]+= b[i]; } printf("\nSomma: %f", somma[0]); if (somma[1]>=0) printf("+%fi\n", somma[1]); else printf("%fi\n", somma[1]); } int complex::Prodotto() { Importa(); prodotto[0]= a[0]; prodotto[1]= b[0]; for(i=1; i<n; i++) { x= prodotto[0]* a[i]; y= prodotto[0]* b[i]; z= prodotto[1]* a[i]; t= prodotto[1]* b[i]; prodotto[0]= x - t; prodotto[1]= y + z; } printf("\nProdotto: %f", prodotto[0]); if (prodotto[1]>=0) printf("+%fi\n", prodotto[1]); else printf("%fi\n", prodotto[1]); } int complex::Divisione() { printf("\nScrivi i coefficienti dei due numeri della divisione:\n"); printf("\na0= "); scanf("%lf", &a[0]); printf("b0= "); scanf("%lf", &b[0]); printf("\na1= "); scanf("%lf", &a[1]); printf("b1= "); scanf("%lf", &b[1]); if(a[1]==0 && b[1]==0) printf("\nERRORE! DIVISIONE PER ZERO NON AMMESSA.\n"); else { divisione[0]=(a[0]*a[1] - b[0]*(-b[1]))/(a[1]*a[1] + b[1]*b[1]); divisione[1]=(a[0]*(-b[1]) + b[0]*a[1])/(a[1]*a[1] + b[1]*b[1]); printf("\nDivisione: %f", divisione[0]); if (divisione[1]>=0) printf("+%fi\n", divisione[1]); else printf("%fi\n", divisione[1]); } } int complex::Radice() { printf("\nScrivi i coefficenti [a,b] e l'indice [k] della radice:\n"); printf("\na= "); scanf("%lf", &a[0]); printf("b= "); scanf("%lf", &b[0]); printf("k= "); scanf("%d", &n); modulo=sqrt(a[0]*a[0] + b[0]*b[0]); theta=atan2(b[0],a[0]); x=pow(modulo,1./n); for(h=0; h<n; h++) { radice[0]=x*(cos((theta + 2*M_PI*h)/n)); radice[1]=x*(sin((theta + 2*M_PI*h)/n)); printf("\nZ(%d)= ", h); printf("%f", radice[0]); if (radice[1]>0) printf("+%fi\n", radice[1]); else printf("%fi\n", radice[1]); } } int complex::Polinomio() { printf("\nScrivi i coefficienti del polinomio\n"); printf("\na= "); scanf("%lf", &p1); printf("b= "); scanf("%lf", &p2); printf("c= "); scanf("%lf", &p3); Delta=(p2*p2) - (4*p1*p3); if (Delta>=0) { RAD= sqrt(Delta); x1[0]= (-p2 + RAD)/(2*p1); x2[0]= (-p2 - RAD)/(2*p1); printf("\nx1= %f", x1[0]); printf("\nx2= %f\n", x2[0]); } else { RAD= ((-1)*(Delta)); x1[0]= (-p2)/(2*p1); x1[1]= (RAD)/(2*p1); x2[0]= (-p2)/(2*p1); x2[1]= (-RAD)/(2*p1); printf("\nx1= %f", x1[0]); if (x1[1]>=0) printf("+%fi\n", x1[1]); else printf("%fi\n", x1[1]); printf("\nx2= %f", x2[0]); if (x2[1]>=0) printf("+%fi\n", x2[1]); else printf("%fi\n", x2[1]); } } int Richiesta() { int scelta; complex e; printf("\n[1] SOMMA di n numeri;"); printf("\n[2] PRODOTTO di n numeri;"); printf("\n[3] DIVISIONE tra 2 numeri;"); printf("\n[4] RADICE k-esima di un numero;"); printf("\n[5] RADICI di un polinomio di secondo grado;\n"); printf("\nNumero scelto: "); scanf("%d", &scelta); if(scelta<1 || scelta>5) { printf("\nERRORE!!! NUMERO NON AMMESSO\n"); Richiesta(); } else { e.Avvio(scelta); char c; printf("\nSE SI VUOLE ESEGUIRE UN ALTRO CALCOLO PREMERE [s]o [S]: "); scanf("%s", &c); if(c=='s' || c=='S') Richiesta(); } } int main() { printf("Questo programma esegue calcoli con i NUMERI COMPLESSI."); printf("\nDigita il numero indicato per utilizzare le varie operazioni:\n"); Richiesta(); } // But the most unexpecteded thing is in the last program: it works well on two others pcs, one has dev-cpp. It must give the factorial of a number, but when I execute it , it only returns the number followed by 0.000000... #include <stdio.h> #include <stdlib.h> long double l, n; int fattoriale (); int valori(); int funz(); int main() { printf("Scrivi il numero da fattorializzare: "); scanf("%Lf", &n); valori(); fattoriale(); funz(); system("PAUSE"); return 0; } int valori() { if((n>0) && (n<2000)) { l=n-1; fattoriale(); printf("Il fattoriale \350: %Le\n", n); } else if(n==0) printf ("Il fattoriale \350: 1\n"); else if(n<0) printf ("Non posso calcolare il fattoriale di un numero negativo\n"); else printf ("Non posso calcolare il fattoriale, il numero \350 troppo elevato\n"); funz(); } int fattoriale() { while(l>1) { n=n*l--; fattoriale(); } } int funz() { char c; printf ("Vuoi calcolare un altro fattoriale? Premere [s] o [S] se si: \n", c); scanf("%s", &c); if(c=='s'|| c=='S') main(); else printf ("Esecuzione terminata\n"); } And it worked well even with another C program. Now I will try to execute them with dev-cpp 5.0 because I think that it isn't only my fault and my loss of experience. Could you help me to find the bugs? Thank you Erika |