/
Inicio :: Foros

 F.A.Q.F.A.Q.                  Conéctese para revisar sus mensajesConéctese para revisar sus mensajes   

duda con ejercicio de clase

 
      Índice del Foro elrincondelc.com -> C/C++ en General
Ver tema anterior :: Ver siguiente tema  
AutorMensaje
da1



Registrado: 29 Oct 2007
Mensajes: 3

MensajePublicado: 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

MensajePublicado: 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

MensajePublicado: 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
      Índice del Foro elrincondelc.com -> C/C++ en General
Página 1 de 1Todas las horas están en GMT - 8 Horas

 
No puede crear mensajes
No puede responder temas
No puede editar sus mensajes
No puede borrar sus mensajes
No puede votar en encuestas

(c) ElRincondelC.com

Un proyecto de UrlanHeat.com