elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Curso de javascript por TickTack


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Criba de Eratostenes en C con funciones.
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Criba de Eratostenes en C con funciones.  (Leído 3,907 veces)
estudiante_1

Desconectado Desconectado

Mensajes: 47


Ver Perfil
Criba de Eratostenes en C con funciones.
« en: 30 Julio 2015, 01:04 am »

Hola, ya he conseguido resolver el problema de la criba, ahora mi problema es que no sé cómo poner funciones para que sea mucho mejor el programa. Una ayuda por favor, para las funciones que se me dan horrible. Este es el programa en el main:
Código:
#include<stdio.h>
#include<stdlib.h>






     int main(void){
     int n;
     scanf("%d",&n);
     int v[n];
     int i,j,p;
     for(i=0;i<n;i++){
     v[i]=i;
     printf("%d\n",v[i]);
     }
for(i=2;i<n;i++){
for(j=2;i*j<n;j++){
v[i*j]=0;
}
      printf(" Tachando los multiplos con un 0: %10d\n",v[i]);
}     for(i=2;i<n;i++){
if(v[i]!=0) printf("Los numeros primos son: %4d\n",v[i]);

     }

     system("pause");
     return(0);

     }
Muchas gracias


« Última modificación: 30 Julio 2015, 01:15 am por estudiante_1 » En línea

ivancea96


Desconectado Desconectado

Mensajes: 3.412


ASMático


Ver Perfil WWW
Re: Criba de Eratostenes en C con funciones.
« Respuesta #1 en: 30 Julio 2015, 01:10 am »

Trata de tabular bien el código, así es complicado de leer .__.

Las funciones se ponen cuando se necesitan, no por obligación.
La mejor forma de colocar una función ahí es pasarle un array a una función y que la función te rellene la criba. Luego, el algoritmod e la criba en sí, es bastante corto como para ponerse a dividirlo.


En línea

estudiante_1

Desconectado Desconectado

Mensajes: 47


Ver Perfil
Re: Criba de Eratostenes en C con funciones.
« Respuesta #2 en: 30 Julio 2015, 01:24 am »

Aquí trato de tachar los múltiplos, pero no me funciona.
Código:
#include<stdio.h>
#include<stdlib.h>

      void criba(int v[],int i,int n, int j){
       for(i=2;i<n;i++){
for(j=2;i*j<n;j++){
v[i*j]=0;
}
}


       }


     int main(void){
     int n;
     scanf("%d",&n);
     int v[n],i,j;
     for(i=2;i<n;i++){
        v[i]=i;
     printf("%d\n",v[i]);
     }
     printf("%d\n",criba(v,i,n,j));



     system("pause");
     return(0);

     }



Ya lo he hecho como me dijsites, pero no me funciona y creo que es por un pequeño error, aquí te dejo el programa:
Código:
include<stdio.h>
#include<stdlib.h>

      void criba(int v[]){
          int i,n,j;
       for(i=2;i<n;i++){
       for(j=2;i*j<n;j++){
      v[i*j]=0;
     }
   }


       }


        int main(void){
        int n;
        scanf("%d",&n);
        int v[n],i,j;
     for(i=2;i<n;i++){
          v[i]=i;
     printf("%d\n",v[i]);
     }
      criba(v);
      for(i=2;i<n;i++){

      if(v[i]!=0) printf("%10d\n",v[i]);

}

     system("pause");
     return(0);

     }
« Última modificación: 30 Julio 2015, 08:50 am por Eternal Idol » En línea

T. Collins

Desconectado Desconectado

Mensajes: 206


Ver Perfil
Re: Criba de Eratostenes en C con funciones.
« Respuesta #3 en: 30 Julio 2015, 02:03 am »

Código
  1. #include<stdio.h>
  2. #include<stdlib.h>
  3.  
  4. void criba(int *v, int n){
  5. int i,j;
  6. for(i=2;i<n;i++){
  7. for(j=2;i*j<n;j++){
  8. v[i*j]=0;
  9. }
  10. }
  11. }
  12.  
  13.  
  14. int main(void){
  15.    int n;
  16.    scanf("%d",&n);
  17.    int v[n],i,j;
  18.    for(i=0;i<n;i++){
  19. v[i]=i;
  20. printf("%d\n",v[i]);
  21.    }
  22.    criba(v, n);
  23.    for(i=2;i<n;i++){
  24. if(v[i]!=0) printf("%10d\n",v[i]);
  25.    }
  26.  
  27.    system("pause");
  28.    return(0);
  29.  
  30. }

Te faltaba pasarle a la función criba la variable n. Por cierto, creo que declarar un array de tamaño variable de esa forma no es muy adecuado, deberías usar malloc.
« Última modificación: 30 Julio 2015, 02:05 am por T. Collins » En línea

estudiante_1

Desconectado Desconectado

Mensajes: 47


Ver Perfil
Re: Criba de Eratostenes en C con funciones.
« Respuesta #4 en: 30 Julio 2015, 12:26 pm »

Gracias por tu respuesta.
En línea

joecarl

Desconectado Desconectado

Mensajes: 24



Ver Perfil
Re: Criba de Eratostenes en C con funciones.
« Respuesta #5 en: 30 Julio 2015, 13:06 pm »

Por cierto, creo que declarar un array de tamaño variable de esa forma no es muy adecuado, deberías usar malloc.

De hecho es que no se puede hacer. Si ese programa compila es que no es C, quiza es alguna versión rara de C, pero en C estándar ese código no puede compilar.

Código
  1. int n;
  2. scanf("%d",&n);
  3. int v[n];//esto no puede hacerse en C estándar
  4.  

Lo correcto sería:

Código
  1. int n;
  2. scanf("%d",&n);
  3. int *v = (int*) malloc(n*sizeof(int));
  4. //... hacer tareas
  5. free(v);//al final del programa hay que liberar la memoria, si esto no se hace, quizá no pase nada ya
  6. //que el sistema operativo se encargará de liberarla, pero lo mas adecuado es liberarla aquí.
  7.  
« Última modificación: 30 Julio 2015, 13:10 pm por joecarl » En línea

furciorifa

Desconectado Desconectado

Mensajes: 94


Ver Perfil
Re: Criba de Eratostenes en C con funciones.
« Respuesta #6 en: 20 Agosto 2015, 03:16 am »

De hecho es que no se puede hacer. Si ese programa compila es que no es C, quiza es alguna versión rara de C, pero en C estándar ese código no puede compilar.

Código
  1. int n;
  2. scanf("%d",&n);
  3. int v[n];//esto no puede hacerse en C estándar
  4.  

Lo correcto sería:

Código
  1. int n;
  2. scanf("%d",&n);
  3. int *v = (int*) malloc(n*sizeof(int));
  4. //... hacer tareas
  5. free(v);//al final del programa hay que liberar la memoria, si esto no se hace, quizá no pase nada ya
  6. //que el sistema operativo se encargará de liberarla, pero lo mas adecuado es liberarla aquí.
  7.  
En Linux corre a la perfección con ansi c
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
[C#] Criba de Eratóstenes
.NET (C#, VB.NET, ASP)
Hendrix 1 10,104 Último mensaje 30 Septiembre 2007, 12:49 pm
por Meta
Criba de Eratostenes[C]
Programación C/C++
HRSLASH 1 9,270 Último mensaje 30 Diciembre 2010, 02:46 am
por N0body
[C] Problema con Struct en funciones que llaman a otras funciones
Programación C/C++
‭lipman 9 23,562 Último mensaje 19 Mayo 2011, 23:39 pm
por Littlehorse
La criba de Operadores Móviles Virtuales continúa. Ortel Mobile es el ...
Noticias
wolfbcn 0 1,299 Último mensaje 15 Noviembre 2013, 14:05 pm
por wolfbcn
Criba de eratóstenes en C.
Programación C/C++
estudiante_1 8 8,793 Último mensaje 19 Agosto 2015, 22:59 pm
por furciorifa
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines