Autor
|
Tema: Criba de Eratostenes en C con funciones. (Leído 3,913 veces)
|
estudiante_1
Desconectado
Mensajes: 47
|
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: #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
Mensajes: 3.412
ASMático
|
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
Mensajes: 47
|
Aquí trato de tachar los múltiplos, pero no me funciona. #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: 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
Mensajes: 206
|
#include<stdio.h> #include<stdlib.h> void criba(int *v, int n){ int i,j; for(i=2;i<n;i++){ for(j=2;i*j<n;j++){ v[i*j]=0; } } } int main(void){ int n; int v[n],i,j; for(i=0;i<n;i++){ v[i]=i; } criba(v, n); for(i=2;i<n;i++){ if(v [i ]!=0) printf("%10d\n",v [i ]); } return(0); }
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
Mensajes: 47
|
Gracias por tu respuesta.
|
|
|
En línea
|
|
|
|
joecarl
Desconectado
Mensajes: 24
|
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. int n; scanf("%d",&n); int v[n];//esto no puede hacerse en C estándar
Lo correcto sería: int n; scanf("%d",&n); int *v = (int*) malloc(n*sizeof(int)); //... hacer tareas free(v);//al final del programa hay que liberar la memoria, si esto no se hace, quizá no pase nada ya //que el sistema operativo se encargará de liberarla, pero lo mas adecuado es liberarla aquí.
|
|
« Última modificación: 30 Julio 2015, 13:10 pm por joecarl »
|
En línea
|
|
|
|
furciorifa
Desconectado
Mensajes: 94
|
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. int n; scanf("%d",&n); int v[n];//esto no puede hacerse en C estándar
Lo correcto sería: int n; scanf("%d",&n); int *v = (int*) malloc(n*sizeof(int)); //... hacer tareas free(v);//al final del programa hay que liberar la memoria, si esto no se hace, quizá no pase nada ya //que el sistema operativo se encargará de liberarla, pero lo mas adecuado es liberarla aquí.
En Linux corre a la perfección con ansi c
|
|
|
En línea
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
[C#] Criba de Eratóstenes
.NET (C#, VB.NET, ASP)
|
Hendrix
|
1
|
10,108
|
30 Septiembre 2007, 12:49 pm
por Meta
|
|
|
Criba de Eratostenes[C]
Programación C/C++
|
HRSLASH
|
1
|
9,272
|
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,570
|
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,303
|
15 Noviembre 2013, 14:05 pm
por wolfbcn
|
|
|
Criba de eratóstenes en C.
Programación C/C++
|
estudiante_1
|
8
|
8,802
|
19 Agosto 2015, 22:59 pm
por furciorifa
|
|