Problema al devolver un valor desde una funcion

rafa_bkn
04 de Diciembre del 2005
Hola todos/as tengo un pequeño problema con este programa porque la funcion que analiza si un numero es primo o no esta bien escrita pero no devuelve bien el valor (0 ó 1) a la funcion main(). Espero que alguien pueda ayudarme. Muchas gracias

CODIGO FUENTE

//Autor: Rafael Enriquez Herrador
//Asignatura: Metodologia y Tecnologia de la Programacion
//Titulo: Practica 2, Ejercicio1
//Fecha:. 20-11-2005
//Version: 0.1

/* Programa que tome un numero y diga si es primo o no mediante el uso de una funcion que en este caso intetaremos
que sea recursiva */

#include <stdio.h>
#include <stdlib.h>

//Declaracion de la funcion EsPrimo()

int EsPrimo(int num, int i);


//Funcion main

int main() //Funcion principal
{

//Declaracion de variables

int n, aux, cont;

aux = 1;

//Entrada de datos

printf("Introduzca el numero a analizar si es primo o no: ");
scanf("%i", &n);

cont = n/2;

aux = EsPrimo(n, cont);

printf("nEl valor de la funcion EsPrimo() es %in", aux);

//Utilizamos la funcion EsPrimo() para comprobar si el numero es primo o no

if (aux == 1)
{
printf("El numero ES primon");
}
else
{
printf("El numero NO ES primon");
}

return 0;

}

//Definicion de la funcion EsPrimo()

int EsPrimo (int num, int i) //Funcion que analiza si un numero es primo o no
{
//Declaracion de variables

//int bool = 0;

//Estructura de seleccion para la funcion recursiva

if (i == 1) //Caso base de la recursion
{
//bool = 1;
printf("El numero %i ES primon", num);
//printf("bool = %in", bool);
printf("%in", i);
return 1; //Devuelve 1 ya que no ha encontrado divisores y el numero es primo
}
else
{
if (num % i == 0) //En este caso el numero tiene un divisor antes de llegar
// al 1 por lo tanto no es primo
{
//printf("bool = %in", bool);
printf ("El numero %i NO ES primon", num);
return 0; //Devuelve que el numero no es primo
}
else //Caso recursivo
{
printf("%in", i);
EsPrimo(num, i - 1); //Realiza la misma funcion pero decrementando el contador
}
}
}

chuidiang
04 de Diciembre del 2005
Hola:

Veo que te faltan return. En el caso recursivo supongo que debes poner

return EsPrimo(num,i-1);

Se bueno.

rafa_bkn
04 de Diciembre del 2005
Tienes razon me faltaba el return en el caso recursivo, el programa ya va como la seda.
Muchas gracias por todo.