| Ver tema anterior :: Ver siguiente tema | | Autor | Mensaje |
|---|
da1
Registrado: 29 Oct 2007 Mensajes: 3
| Publicado: 29/10/2007 4:16 am | | | Título: duda con ejercicio de clase |
| Hola q tal?estaba aciendo un ejercicio de clase que dice
Programa en el que introducimos un numero N y nos devuelve los N primeros números primos
y el codigo q tengo es este
#include<stdio.h>
void main() { int n,x,z,cont,esprimo; double div=0; char resp;
printf("*******************************************************************************************\t\n"); printf("Programa en el que introducimos un numero N y nos devuelve los N primeros números primos\n"); printf("*******************************************************************************************\t\n");
do { printf("\n");
printf("Introduce un numero:\n"); fflush(stdin); scanf("%d",&n);
while(n<0) { printf("Ese dato es erroneo\n"); printf("Introduce un numero:\n"); fflush(stdin); scanf("%d",&n); }
printf("\n");
printf("Los primeros numeros primos son\n\n");
cont=0;
while(cont<=n) {
for(x=1;x<=n;x++) { esprimo=1;
for(z=n;z>0;z--) { div=z%x; if(div==0) esprimo=0; } if(esprimo==1) cont++;
printf("%d\n",x); }
}
printf("\n");
printf("Quieres introducir otro numero:\n"); fflush(stdin); scanf("%c",&resp); } while(resp=='s' || resp=='S'); }
Entonces se que tengo que ir hasta n para sacar todos los primos pero no se como continuar con esos dos for,si alguien me pudiera ayudar...
gracias por adelantado |
| | Volver arriba | |  | spesmod
Registrado: 23 Ago 2007 Mensajes: 33
| Publicado: 29/10/2007 2:37 pm | | | Título: |
| tu codigo es un poco confuso, como consejo a eso para la proxima vez que postees un codigo utiliza la etiqueta code. volviendo al tema no se porque tu programa es tan largo si la operacion que necesitas es pequeña... aqui esta un programa similar:
| Código: | //encuentra los n primeros numeros primos
#include <stdio.h> #include <conio.h> #include <iostream.h>
main() { int i, j, p, num;
do { clrscr(); cout<<"Cuantos numeros primos deseas ver :"; cin>>num; if(num<=0) cout<<"OPERACION IMPOSIBLE, VULVE A DIGITAR"; }while(num<=0); cout<<"Los "<<num<<" primeros n£meros primos son:\n\n"; for(i=1, p=2; i<=num; p++) { for(j=2; j<=p/2; j++) if(p%j==0) goto sgt; cout<<p<<"\n"; i++; sgt: } getch();
return 0; }
|
si eres exigente puedes realizar los cambios que creas conveniente, pero basicamente es lo que has pedido. espero ayudar chiao y gracias _________________ |--A--Q--U--A--|
|
| | Volver arriba | |  | rir3760

Registrado: 01 Oct 2004 Mensajes: 3896 Ubicación: Mexico
| Publicado: 03/11/2007 10:35 am | | | Título: |
| En el caso de que el lenguaje de programacion sea C ...
Lo primero que debes hacer en el programa es colocar dentro de la funcion "main" la peticion del numero de primos a imprimir (y su validacion) junto con el proceso de imprimirlos (para esto lo mejor es utilizar una funcion), esto dentro de un bucle que tambien pregunte si se desea continua o no. Por ejemplo:
| Código: | #include <stdio.h> #include <stdlib.h>
#define MAX_NUM_PRIMOS 256
int main(void) { int num_primos; int continuar; do { do { printf("Numero de primos a imprimir: "); fflush(stdout); if (scanf("%d", &num_primos) != 1) return EXIT_FAILURE; }while (num_primos < 1 || num_primos > MAX_NUM_PRIMOS); /* Impresion de los primeros "num_primos" */ do { printf("Imprimir otra serie? (1 == Si 0 == No) "); fflush(stdout); if (scanf("%d", &continuar) != 1) return EXIT_FAILURE; }while (continuar != 0 && continuar != 1); }while (continuar == 1); return EXIT_SUCCESS; } |
El calculo e impresion de los numeros primos es mejor colocarlo dentro de una funcion cuyo unico argumento seria el numero de primos a imprimir. Agregando el prototipo de la funcion y su definicion vacia tenemos:
| Código: | #include <stdio.h> #include <stdlib.h>
#define MAX_NUM_PRIMOS 256
void imprimir(int num_primos);
int main(void) { int num_primos; int continuar; do { do { printf("Numero de primos a imprimir: "); fflush(stdout); if (scanf("%d", &num_primos) != 1) return EXIT_FAILURE; }while (num_primos < 1 || num_primos > MAX_NUM_PRIMOS); /* Impresion de los primeros "num_primos" */ do { printf("Imprimir otra serie? (1 == Si 0 == No) "); fflush(stdout); if (scanf("%d", &continuar) != 1) return EXIT_FAILURE; }while (continuar != 0 && continuar != 1); }while (continuar == 1); return EXIT_SUCCESS; }
void imprimir(int num_primos) { /* ... */ } |
Por ultimo el cuerpo de la funcion puede implementarse de varias formas la mas sencilla pero tambien la menos eficiente es mediante un bucle que solo finalize cuando se hayan impreso los numeros y dentro de este otro bucle que verifique cada uno de los numeros para verificar si este es primo (y en ese caso imprimirlo).
El programa completo es:
| Código: | #include <stdio.h> #include <stdlib.h>
#define MAX_NUM_PRIMOS 256
#define VERDADERO 1 #define FALSO 0
void imprimir(int num_primos);
int main(void) { int num_primos; int continuar; do { do { printf("Numero de primos a imprimir: "); fflush(stdout); if (scanf("%d", &num_primos) != 1) return EXIT_FAILURE; }while (num_primos < 1 || num_primos > MAX_NUM_PRIMOS); /* Impresion de los primeros "num_primos" */ imprimir(num_primos); do { printf("Imprimir otra serie? (1 == Si 0 == No) "); fflush(stdout); if (scanf("%d", &continuar) != 1) return EXIT_FAILURE; }while (continuar != 0 && continuar != 1); }while (continuar == 1); return EXIT_SUCCESS; }
void imprimir(int num_primos) { int numero; int es_primo; int i; for (numero = 1; num_primos > 0; numero++){ es_primo = VERDADERO; for (i = 2; i <= numero / 2; i++) if (numero % i == 0){ es_primo = FALSO; break; } if (es_primo){ printf("%d ", numero); num_primos--; } } putchar('\n'); } |
Ya por ultimo es recomendable evitar el uso de goto a menos que este le de mayor claridad (y brevedad) a un programa.
Un saludo _________________ The capacity to learn is a gift; The ability to learn is a skill; The willingness to learn is a choice. -- Rebec of Ginaz |
| | Volver arriba | |  | | |
| No puede crear mensajes No puede responder temas No puede editar sus mensajes No puede borrar sus mensajes No puede votar en encuestas
|
|
| |