C/Visual C - problema con funciones

   
Vista:

problema con funciones

Publicado por carlos (63 intervenciones) el 14/07/2017 21:29:27
Tengo un problema segun el ejercicio tengo que calcular la probabilidad de sacar 3 cartas especificas de una baraja de 48 y me dice que use la formula de combinación

He usado la recursividad pero me sale dos errores:

19 5 F:\C\borrar.cpp declared here
29 25 F:\C\borrar.cpp [Error] too few arguments to function 'int factorial1(int, int)'

No entiendo porque, por mas que miro esta todo bien le paso todas las variables y todo lo demas
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
#include <stdio.h>
int factorial1 (int m,int vac);
main(){
	int n;
	int m;
	int resultado;
	int vac;
	printf("introduzca la baraja entera");
	scanf ("%d",&m);
	printf("cartas cogidas");
	scanf ("%d",&n);
	vac=m-n;
resultado=factorial1(m,vac);
printf("el factorial de los corredores es %d",resultado);
return 0;
}
 
 
int factorial1(int vac,int m){
 
if(m==1){
return 1;
}
else
if (m<vac){
return 1;
}
else {
return (m*factorial1(m-1));
}
}
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

problema con funciones

Publicado por Thanatos (19 intervenciones) el 14/07/2017 23:00:59
En la línea 29:

1
return (m*factorial1(m-1));

Estás pasando sólo un dato (m-1), como argumento de la función factorial1, en lugar de los dos datos de tipo int que espera recibir.

[Error] too few arguments to function 'int factorial1(int, int)'
[Error] muy pocos argumentos para la función 'int factorial1(int, int)'
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar

problema con funciones

Publicado por carlos (63 intervenciones) el 15/07/2017 12:40:57
Ya lo arregle puse variables globales y ya

A veces hasta que pregunto no se me ocurre la solución :D
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

problema con funciones

Publicado por juanki (24 intervenciones) el 15/07/2017 21:22:13
Hola

Pues hacerlo todo global no suele ser la solución, las variables globales tiene su uso y usadas correctamente tienen sus ventajas, pero hacerlo todo global, normalmente suele ser muy mala idea.

En tu caso como es un programa pequeño pues no habrá problemas, pero no es bueno acostumbrarse, yo trataría de resolver el error, es fácil, como te indicó @Thanatos, es solo que no le estás pasando los parámetros que necesita la función.

Un saludo
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

problema con funciones

Publicado por carlos (63 intervenciones) el 17/07/2017 11:16:55
pero es que no se como funciona el devolverle dos parametros o sea por ejemplo en 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
#include <stdio.h>
int mcd(int a,int b);
int mcm(int a,int b);
 
main(){
	int a,b,c,d;
	printf("Inserte el 1º numero");
	scanf("%d",&a);
	printf("Escriba el 2º numero");
	scanf("%d",&b);
c=mcd(a,b);
printf("algo %d",mcd(a,b));
if(c<0);
printf("\n%d es el maximo comun divisor de %d y %d\n",c,a,b);
d=mcm(a,b);
if(d<0) ;
printf("\n%d es el minimo comun de %d y %d",d,a,b);
return 0;
}
 
int mcd(int a,int b)
{
return (b == 0)? a : mcd(b,a % b);
}
 
int mcm(int a,int b)
{
return (a*b)/mcd(a,b);
}

que es parecido al error anterior que tenia pero no entiendo que hace al devolverle los dos parametros cuando luego solo coge uno (el codigo se ejecuta bien pero no lo entiendo) de ahi que decidiera usar variable global
¿no se si me explico?
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

problema con funciones

Publicado por juanki (24 intervenciones) el 17/07/2017 17:11:32
Hola

No se pueden devolver dos parámetros, bueno, a no ser que uses un array, pero no estarías devolviendo dos parámetros, estarías devolviendo uno, el array, que contiene múltiples valores.

¿ Esto es lo que no entiendes ?

return (b == 0)? a : mcd(b,a % b);

Ahí no está devolviendo dos valores, eso es el operador ternario, es como un if simplificado: si b == 0 retorna lo que está detrás del ?, es decir a, en caso contrario retorna lo que está detrás de los dos puntos, que será lo que retorne de llamar a mcd(b,a % b). Pero en cualquier caso es un único valor.

En tu anterior duda era diferente, la función factorial esperaba recibir dos parámetros y tú le estabas pasando solo uno, de ahí el error.

Un saludo
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

problema con funciones

Publicado por carlos (63 intervenciones) el 17/07/2017 22:10:26
entonces no deberia dar 1 error ? o sea le pasas dos valores pero le hago un printf y solo tiene uno

Me estoy liando con esto
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

problema con funciones

Publicado por juanki (24 intervenciones) el 18/07/2017 12:24:48
Hola

Por favor, indica donde tienes las dudas, es muy difícil adivinar...

¿Te refieres a este printf?

1
printf("algo %d",mcd(a,b));

Si es así, creo que tienes un lío de conceptos enorme. Una cosa es los parámetros que pasas a una función, que pueden ser ninguno o varios, los que quieras, y otra cosa es el valor de retorno, que es uno o ninguno. Son dos cosas totalmente diferentes.

Ahí, la función mcd recibe dos parámetros (a y b), pero retorna uno, que es el que imprime el printf.

Desconozco tu nivel de C, pero casi te recomendaría que te pongas con un curso que empiece por lo básico.

Un saludo
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

problema con funciones

Publicado por carlos (63 intervenciones) el 25/07/2017 13:20:28
es el curso basico
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
Revisar política de publicidad