Haz una pregunta
  Foros de Electrónica » Diseño digital » Interfaces y Programación
Foros Registrarse ¿Olvidaste tu contraseña?
23/02/2011 #1


Quien sepa C, y tenga ganas que me eche una mano.
Buenas a todos.

Tengo un problema con un programa, en concreto con las funciones.
Dejo el código y abajo la explicación de cada función.

Este código calcula los 100 primeros nº primos.

dev++

Código:
#include <stdio.h>
#include <stdlib.h>

/* devuelve 1 si numero es primo y 0 si no lo es*/
int esPrimo (int numero)
{
  int divisor=2;
  int resto=0;
  
  for (divisor=2; divisor<numero; divisor++)
      {
        resto=numero%divisor;
          if (resto==0)
           {printf ("0000");   // Esto es para ver si entra (si entra)
             resto=numero;
           }
          if (resto==1)
          {  printf ("1111");  //Aqui tambien.
             resto=numero;
              break;
        }  }   
    
    
}


void primos (int  *primo)
{
   int posible=2;
   int contador=0; 
   do{ 
       if (esPrimo(posible) == 1){
          primo[contador] = posible;
          contador++;
       }
       posible++;
    } while (contador<100);
}
  
 int main ()
  {
     int primo [100]; 
     primos (primo);   
     printf ("%d", primo);       
          
  }

Bien pues este código consta de 2 funciones y la función principal main.

1ª Función: "primos"
2ª Función: "esPrimo"

================================================== ===============

La función primos se encarga de generar numeros desde 2 hacia delante con la variable "posible" y la variable "contador" de contar cuantos nº primos se han guardado.

------------------------------------------------------------------------------------

La función esPrimo se encarga de recibir el dato de la función primos e ir dividiendo desde 2 hasta (posible-1).


Entonces si el nº que estamos comprobando es primo retorna un "1", si no es "0".

Aqui creo que esta el problema, deberia retornar el resto (1 o 0) a la función "primos" para que guarde el nº primo en caso de que fuese primo.


Disculparme por esta liosa explicación, seguro que falta alguna explicación más.

Pedirme cualquier dato que necesiteis.

Si podeis comentar algo se lo agradezco, tengo que entregarlo antes de las 12 asi que estaré atento.

Muchas gracias.
23/02/2011 #2

Avatar de Unikfriend

Hi Not,
intenta con esto...


int esPrimo (int numero)
{
int divisor=2;
int resto=0;
for (divisor=2; divisor<numero; divisor++)
{
resto=numero%divisor;
if (resto==0)return (0);
}
return (1);
}
void primos (int *primo)
{
int posible=2;
int contador=0;
do{
if (esPrimo(posible) == 1)
{
primo[contador] = posible;
printf("%i\n",posible);
contador++;
}
posible++;
} while (contador<20);
}
int main ()
{
int primo [100];
primos(primo);
getch();
}
23/02/2011 #3


Joe Unikfriend muchas gracias.

Una preguntilla lo de %i ¿para que es?

De nuevo muchas gracias
23/02/2011 #4

Avatar de Dr. Zoidberg

Not:
Hay un libro que está "disponible" en la web y que se llama "The C Programming Language" escrito por Kernighan & Ritchie (los padres del lenguaje C).
Bueno...el tema es que deberías bajarlo y leerlo antes de seguir con las preguntas que estás haciendo...
23/02/2011 #5


Tienes razón ese dato lo puedo encontrar con facilidad.

Disculparme.
23/02/2011 #6

Avatar de Unikfriend

Es para dar formato a la salida del comando printf!
23/02/2011 #7


Gracias Unikfriend
23/02/2011 #8

Avatar de Unikfriend

Hi Not, que estas estudiando?
Respuesta
¿Tienes una mejor respuesta a este tema? ¿Quieres hacerle una pregunta a nuestra comunidad y sus expertos? Registrate

Buscar más temas sobre:
Lupa Interfaces y Programación

Lenguajes de programación, gestión y manejo de puertos

Cerrar
Foros de Electrónica » Diseño digital » Interfaces y Programación

Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO ©2011, Crawlability, Inc.