Dev - C++ - Error en programa C++

 
Vista:
sin imagen de perfil

Error en programa C++

Publicado por Nadia (1 intervención) el 10/07/2014 12:36:54
Buenas tardes.
El código que he hecho, usando Eclipse, para este ejercicio

es este:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
#include <iostream>
using namespace std;
 
int leerX(int x){
	cout<<"Introducir valor de X: "<<endl;
	cin>>x;
	return x;
}
void calcularPotencia(int x, int totalX=1){
	for(int i=1; i<=x; i++){
		totalX=totalX*x;
		cout<<"Potencia de "<<x<<" elevado a "<<i<<" es "<<totalX<<endl;
	}
}
void calcularFactorial(int x, int totalF=1){
	for(int j=2; j<=x; j++){
		totalF=totalF*j;
		cout<<"Factorial de "<<x<<" es "<<totalF<<endl;
	}
}
 
void calcularSumandos(double sum, double total=0){
	int totalX, totalF, x;
	while(sum>0.0001){
			calcularPotencia(x, totalX);
			calcularFactorial(x, totalF);
			sum=totalX/totalF;
			total=total+sum;
		}
}
int main(){
	int x;
	double total, sum;
	x=leerX(x);
	calcularSumandos(sum, total);
	cout<<total;
	return 0;
}

Pero cuando este código no ejecuta ninguno de los void. ¿Alguien me puede decir por qué?
Gracias de antemano.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de JuanC

Error en programa C++

Publicado por JuanC (35 intervenciones) el 10/07/2014 12:53:58
a simple vista veo que no inicias la variable sum en main
también que mezclas int con double en la operaciones, ojo con eso...

Saludos, desde Baires, JuanC
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Error en programa C++

Publicado por Capitan Kirk (48 intervenciones) el 14/07/2014 09:04:38
En las funciones calcularPotencia(), calcularFactorial() y calcularSumandos() no estás devolviendo resultadoi alguno (son de tipo void), y tampoco estás modificando el valor de la variable en la que pretendes devolver el resultado (tendrías que pasar el parámetro correspondiente por referencia, en lugar de por valor). Además, dices que no te ejecuta ninguno de los void, es porque en el bucle while de la función calcularSumandos() probablemente entre con un valor de sum inferior a 0.0001 y, por tanto, ya no se ejecute el bucle (entras a él cumpliendo la condición de salida, por lo que no se ejecuta). Además, la condición del problema se refiere a que un sumando sea inferior a 0.0001, no el total (que es lo que has puesto).

Además de esto, los valores totalX y totalF los has declarado como enteros, con lo que al dividirlos para calcular sum te hará la división entera, con lo que perderás la parte decimal. Estas variables debes declararlas como double, o hacerles un cast a double antes de hacer la división. También el valor de entrada x debe ser de tipo double, la serie que te han pedido es para cualquier número real.

Otro problema con el que te puedes encontrar es que, tanto en el cálculo del factorial como en el cálculo de la potencia, lo haces con tipo int. Ten en cuenta que, con este tipo de funciones, puedes sobrepasar rápidamente el rango de valores para un número entero y, dado que la máquina no te va a avisar de ello, te pueden aparecer resultados completamente sin sentido. Además, para la `potencia tienes la función pow:

double pow(double x, double y); // Eleva el número x al exponente y, tienes que #incluir <math>

Te dejo algunos retoques en tu programa:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
#include <iostream>
#include <math>
 
using namespace std;
 
double calcularFactorial(int n)
{
	double totalF=1.0;
	if (n>2)	// 0! es 1, 1! es 1
		for (j=2; j<=n; j++)
			totalF=totalF*(double)j;
	cout<<"Factorial de "<<x<<" es "<<totalF<<endl;	// La tenías dentro del bucle, debería estar fuera
	return totalF;
}
 
double calcularSumando(double x, int n)
{
	double sumando;
	sumando = pow((double)x, (double)n) / calcularFactorial(x);
	return sumando;
}
 
int main()
{
	int i=0;
	double x, sumando, total=0.0;
 
	cout << "Introducir valor de X: ";
	cin >> x;
 
	do
	{
		sumando = calcularSumando(x, i);
		total = total + sumando;
	}
	while (sumando > 0.0001);
 
	cout << "El total es: " << total << endl;
	return 0;
}

Saludos,
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 46
Ha disminuido 1 puesto en Dev - C++ (en relación al último mes)
Gráfica de Dev - C++

Error en programa C++

Publicado por manuel venezuela (62 intervenciones) el 17/07/2014 16:56:36
se me cuelga el programa ¡¡¡¡¡
tengo ese ejercicio resuelto en c....facilmente resolvible¡¡¡a c++....pero sin ese 0.0001

anexo el codigo¡¡¡
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
#include<stdio.h>
main()
{
 
	int x;
	int tem=0;
	int y=0;
	int z=0;
	int k;
	int n;
 
	int total1=0;
	int i=1;
	long int factorial=1;
 
 
	float total2=0;
	float total3=0;
 
	float aux1=0;
	float aux2=0;
	 float exp=0;
 
 
	printf("n de iteraciones\n");
	scanf("%d",&n);
	printf("valor de x\n");
	scanf("%d",&x);
 
	while(i<=n){
	factorial*=i;
 
 
		tem=x;
	y=(tem*=tem);
	for(k=i;k>1;k--){
		z=(y*=x);
	}
 
	total1=z/x;
	//printf("%d\n",total1);
 
	if(i==1){
		aux1=(float)x/factorial;
		//printf("%d\n",factorial);
		total2+=aux1;
		}
	if(i>1){
			aux2=(float)total1/factorial;
			//printf("%f\n",aux2);
		total3+=aux2;
		}
 
		exp=1+total2+total3;
 
		i++;
	}
		printf("exp(%d)=%f\n",x,exp);
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar