Mi primer trabajo practico de la facultad

Iniciado por clodan, 1 Septiembre 2010, 15:29 PM

0 Miembros y 1 Visitante están viendo este tema.

clodan

Bueno, queria ver que les parecia el codigo antes de que lo entregue la semana que viene...
El programa debia calcular los primeros 100 numeros primos, y de ellos, clasificarlos en:
* menores a 100,
* mayores a 100 y menores a 500,
* mayores a 500 y menores a 1000,
Aparte, cada numero primo debia ser colocado en un arreglo, uno atras del otro (no se puede usar string.h)

HE AQUI EL CODIGO... MARAVILLAOS MORTALES!!! ;-) ;-) ;-) ;-) ;-)

#include <stdio.h>
#include <stdlib.h>

int func1(int x);

int main(int argc, char *argv[]){
 int primos[100];
 int x=2, y, pos=0, cont=1;
 while (cont<=100){
       y=func1(x);
       switch (y){
              case 1:{
                   primos[pos]=x;
                   pos=pos+1;
                   if (x<100){
                              printf("%d)El numero %d es primo menor a 100\n", cont, x);
                              x=x+1;
                              cont=cont+1;
                              }
                   else if ((x>100) && (x<500)){
                              printf("%d)El numero %d es primo menor a 500 y mayor a 100\n", cont, x);
                              x=x+1;
                              cont=cont+1;
                              }
                   else if ((x>500) && (x<1000)){
                              printf("%d)El numero %d es primo menor a 1000 y mayor a 500\n", cont, x);
                              x=x+1;
                              cont=cont+1;
                              }
                   else {
                              printf("%d)El numero %d es mayor a 1000", cont, x);
                              x=x+1;
                              cont=cont+1;
                              }
                   break;
              }
              case 0:{
                   x=x+1;
                   break;
              }              
              default: {
                   printf("Opcion erronea");
                   break;
              }
       } //end switch
 } //end while
 
 printf("\n\nPresione ENTER para finalizar la operacion\n");
 while (getchar()!='\n'){}
 return 0;
}

int func1(int x){
   int y=2;
   while (x!=y){
         if ((x%y)>0){
               y=y+1;
         }
         else {
              return 0;
         }
   }
return 1;
}

Novlucker

Sugerencias:
Cambiar los códigos de tipo ... a=a+1, por a++
Que acaso no estas repitiendo código innecesariamente? :rolleyes:
x=x+1;
cont=cont+1;

Eso lo tienes en todos los IF, si lo vas a hacer en cualquier caso entonces sacalo de los IF, que el IF solo contenga el mensaje.
En la función func1, yo en tu lugar utilizaría un FOR, e igualaría a 0, en lugar de hacer mayor a 0

Saludos
Contribuye con la limpieza del foro, reporta los "casos perdidos" a un MOD XD

"Hay dos cosas infinitas: el Universo y la estupidez  humana. Y de la primera no estoy muy seguro."
Albert Einstein

Horricreu

#2
Algunas cosas a mejorar:


  • Deberías usar asignaciones. Es una buena costumbre utilizarlas.
  • En las instrucciones sin sentencias no hace falta poner las llaves. Con un punto y coma basta.

Saludos :P

Advertencia - mientras estabas escribiendo, una nueva respuesta fue publicada. Probablemente desees revisar tu mensaje.

clodan

Cita de: Novlucker en  1 Septiembre 2010, 15:47 PM
Sugerencias:
Cambiar los códigos de tipo ... a=a+1, por a++
Que acaso no estas repitiendo código innecesariamente? :rolleyes:
x=x+1;
cont=cont+1;

Eso lo tienes en todos los IF, si lo vas a hacer en cualquier caso entonces sacalo de los IF, que el IF solo contenga el mensaje.
En la función func1, yo en tu lugar utilizaría un FOR, e igualaría a 0, en lugar de hacer mayor a 0

Saludos


la cosa es que si en la func1, en la parte de if ((x%y)>0)  si esa parte da mayor a 0, quiere decir qe es primo, o que esta todavia en camino de ser primo...
si da = a 0 quiere decir qe no es primo, porqe es divisible por otro numero... entonces lo que vos propones seria, cambiar eso por un igual y que mientras sea = 0 siga haciendo la cuenta??

Novlucker

Lo que ocurre es que junto a eso recomendaba usar FOR, para hacerlo más legible y compacto :rolleyes:, puedes dejarlo así si quieres, puedo pegarte un code pero creo que no es la "gracia" verdad :P

Saludos
Contribuye con la limpieza del foro, reporta los "casos perdidos" a un MOD XD

"Hay dos cosas infinitas: el Universo y la estupidez  humana. Y de la primera no estoy muy seguro."
Albert Einstein

clodan

Cita de: Novlucker en  1 Septiembre 2010, 16:09 PM
Lo que ocurre es que junto a eso recomendaba usar FOR, para hacerlo más legible y compacto :rolleyes:, puedes dejarlo así si quieres, puedo pegarte un code pero creo que no es la "gracia" verdad :P

Saludos

es que en esto de los codes soy ultra principiante, y por ahi vos me tiras FOR o cosas asi y yo pienso que son algo, pero nada qe ver jajaja

Novlucker

Eso es lo principal, que soluciones tus problemas con los temas que ya has visto en la facultad, sería raro que aprendas sobre el bucle WHILE, te envíen un ejercicio al respecto, y lo entregues con un FOR :xD

Saludos
Contribuye con la limpieza del foro, reporta los "casos perdidos" a un MOD XD

"Hay dos cosas infinitas: el Universo y la estupidez  humana. Y de la primera no estoy muy seguro."
Albert Einstein