PDA

View Full Version : C++ domandine cazzate ma un po' urgenti aspetto risposte


leomeya
09-07-2003, 08:34
il tipo double comprende i numeri con la virgola e anche i numeri con le frazioni?
1)
Es
#include <iostream.h>
void main (){
double a;
double b=5/3;
double c=3/4;
double d=b+c;
cout <<"la somma tra 5/3 e 3/4 e' "<<d<<'\n';
double e=b-c;
cout <<"la differenza tra 5/3 e 3/4 e' "<<e<<'\n';
cin >> a;
}
Domanda perche' non mi da il risultato in decimali o con le frazioni visto che anche la variabile risultato è un double?perche' lo approssima?
2)
Es Programma che calcola le soluzioni di una equazioni di secondo grado omogenea cosa sbaglio?funziona tutto ma non da' il risultato!
#include <iostream.h>
void main ()
{
long double a,b,c,z;
long double d=-(c/b);
long double e=(b*b)-(4*a*c);
cout <<"Questo e' un programma che trova le soluzioni delle equazioni di"<<'\n';
cout <<"secondo grado omogenee del tipo:"<<'\n';
cout <<"ax^2+bx+c=0"<<'\n';
cout <<"Inserisci il coefficiante della a:"<<'\n';
cin >>a;
cout <<"Inserisci il coefficiante della b:"<<'\n';
cin >>b;
cout <<"Inserisci il coefficiante della c:"<<'\n';
cin >>c;
if (a==0 && b==0) {cout <<"L'equazione e' degenere!"<<'\n';}
else if (a==0) {cout <<"L'equazione e' di primo grado! "<<b<<"x+"<<c<<"=0"<<'\n';
cout <<"La soluzione dell'equazione e': "<<d;}
else {{cout <<"L'equazione e' del tipo: "<<a<<"x^2+"<<b<<"x+"<<c<<"=0"<<'\n';
cout <<"Le soluzione dell'equazione sono: "<<'\n';}
if (e<0) cout <<"Determinante negativo le soluzioni non appartengono al campo reale!"<<'\n';
else {cout <<"Le soluzioni sono: "<<'\n';
long double f=(-b+sqrt(e))/(2+a);
long double g=(-b-sqrt(e))/(2+a);
cout <<"Prima= "<<f<<'\n';
cout <<"Seconda= "<<g<<'\n'; }}
cin >>z;
}




Forza ragazzi che il terzo appello si avvicina!

NA01
09-07-2003, 09:03
a quanto ho capito tu vuoi questo
sui float inposta il numero di decimali dopo la virola:
cout.preciosion(3);
questo produce un numero con tre numeri dopo la virgola; variando il parametro varia la preciosione

NA01
09-07-2003, 09:17
per il secondo:


#include "stdafx.h"
#include <iostream.h>
#include <math.h>
void main ()
{
long double a,b,c,z;
long double d;
long double e;
cout <<"Questo e' un programma che trova le soluzioni delle equazioni di"<<'\n';
cout <<"secondo grado omogenee del tipo:"<<'\n';
cout <<"ax^2+bx+c=0"<<'\n';
cout <<"Inserisci il coefficiante della a:"<<'\n';
cin >>a;
cout <<"Inserisci il coefficiante della b:"<<'\n';
cin >>b;
cout <<"Inserisci il coefficiante della c:"<<'\n';
cin >>c;
e=(b*b)-(4*a*c);
d=-(c/b);
if (a==0 && b==0) {cout <<"L'equazione e' degenere!"<<'\n';}
else if (a==0) {cout <<"L'equazione e' di primo grado! "<<b<<"x+"<<c<<"=0"<<'\n';
cout <<"La soluzione dell'equazione e': "<<d;}
else {{cout <<"L'equazione e' del tipo: "<<a<<"x^2+"<<b<<"x+"<<c<<"=0"<<'\n';
cout <<"Le soluzione dell'equazione sono: "<<'\n';}
if (e<0) cout <<"Determinante negativo le soluzioni non appartengono al campo reale!"<<'\n';
else {cout <<"Le soluzioni sono: "<<'\n';
long double f=(-b + sqrt(e))/(2+a);
long double g=(-b-sqrt(e))/(2+a);
cout <<"Prima= "<<f<<'\n';
cout <<"Seconda= "<<g<<'\n'; }}
cin >>z;
}



senza la libreria math non lo puoi nemmeno compilare, dato che serve per la funzione sqrt(), per quanto riguarda i risultati, E e D vanno calcolati dopo che hai i valori, altrimenti non và niente.
in alternativa puoi dichiarare le variabili dopo aver chiesto i dati all'utente, altrimenti i calcoli vengono fatti su variabili non iniziallizzate (strano che il tuo compilatore non abbia messo i messaggi di warning)...

ciao

leomeya
09-07-2003, 09:31
grazie NA01 ho capito anche come mai non prendeva le frazioni il tipo double vuole l'inizializzazione della variabile non come double a=3/4 ma come double 3.0/4.0!per il secondo hai ragione gli ho dato da calcolare una variabile senza che abbia inumeri in ingresso strano comunque che il dev c++(usoquesto di compilatore) non mi abbia dato errore!
grazie comunque

leomeya
09-07-2003, 09:37
te che sei un grande del c++ mi sapresti spiegare brevemente perche'
++(++i) si puo' fare mentre (i++)++ no?

leomeya
09-07-2003, 18:34
nessuno mi sa rispondere?

dm69
09-07-2003, 21:13
Il motivo dovrebbe essere questo:
l'operatore di post incremento (almeno quello applicato su tipi base) deve essere applicato ad un oggetto alterabile (l-value) mentre il risultato di (var++) e' un valore e quindi non alterabile.

Ciao.

leomeya
10-07-2003, 08:07
in parole piu' semplici???e un esempio per favore!grazie ;)

leomeya
10-07-2003, 08:41
poi avrei anche un altra domandina!lo so' scasso!!!!!!!!!! :D

#include <iostream.h>
void main ()
{
int a,n;
cin>>n;
while(n--)
{cout<<n;
cout<<'*';}
cin>>a;
}

se inserisco 5 nel cout abbiamo 4*3*2*1*0*. Perche' dopo lo 0 abbiamo l'asterisco? in 0 ,che in c++ significa falso, la condizione del ciclo si interrompe e non dovrebbe stampare * perche' invece lo stampa????

cionci
10-07-2003, 09:31
Perchè n-- non ritorna il valore di n decrementeato di 1, ma il valore di n... Il decremento avviene alla fine dello statement in cui n-- è inserito...

La diffrenza fra gli operatori unari di pre- e post- incremento/decremento sta proprio lì...

n = 9;
x = n--; //in x ci finisce 9

E' equivalente a fare:

n = 9;
x = n;
--n;

Se invece si fa:

n = 9;
x = --n; //in x ci finisce 8, perchè ild ecremento viene fatto prima dell'assegnazione

Quindi se n = 1 e faccio:

while(n--) //n-- ritorna 1 e solamente dopo n viene decrementato
{
cout << n; //stampa 0
}

leomeya
10-07-2003, 09:54
grazie mille