Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: clodan en 1 Septiembre 2010, 15:29 pm



Título: Mi primer trabajo practico de la facultad
Publicado por: clodan en 1 Septiembre 2010, 15:29 pm
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!!! ;-) ;-) ;-) ;-) ;-)

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. int func1(int x);
  5.  
  6. int main(int argc, char *argv[]){
  7.  int primos[100];
  8.  int x=2, y, pos=0, cont=1;
  9.  while (cont<=100){
  10.        y=func1(x);
  11.        switch (y){
  12.               case 1:{
  13.                    primos[pos]=x;
  14.                    pos=pos+1;
  15.                    if (x<100){
  16.                               printf("%d)El numero %d es primo menor a 100\n", cont, x);
  17.                               x=x+1;
  18.                               cont=cont+1;
  19.                               }
  20.                    else if ((x>100) && (x<500)){
  21.                               printf("%d)El numero %d es primo menor a 500 y mayor a 100\n", cont, x);
  22.                               x=x+1;
  23.                               cont=cont+1;
  24.                               }
  25.                    else if ((x>500) && (x<1000)){
  26.                               printf("%d)El numero %d es primo menor a 1000 y mayor a 500\n", cont, x);
  27.                               x=x+1;
  28.                               cont=cont+1;
  29.                               }
  30.                    else {
  31.                               printf("%d)El numero %d es mayor a 1000", cont, x);
  32.                               x=x+1;
  33.                               cont=cont+1;
  34.                               }
  35.                    break;
  36.               }
  37.               case 0:{
  38.                    x=x+1;
  39.                    break;
  40.               }              
  41.               default: {
  42.                    printf("Opcion erronea");
  43.                    break;
  44.               }
  45.        } //end switch
  46.  } //end while
  47.  
  48.  printf("\n\nPresione ENTER para finalizar la operacion\n");
  49.  while (getchar()!='\n'){}
  50.  return 0;
  51. }
  52.  
  53. int func1(int x){
  54.    int y=2;
  55.    while (x!=y){
  56.          if ((x%y)>0){
  57.                y=y+1;
  58.          }
  59.          else {
  60.               return 0;
  61.          }
  62.    }
  63. return 1;
  64. }


Título: Re: Mi primer trabajo practico de la facultad
Publicado por: 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:
Código
  1. x=x+1;
  2. 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


Título: Re: Mi primer trabajo practico de la facultad
Publicado por: Horricreu en 1 Septiembre 2010, 15:48 pm
Algunas cosas a mejorar:

  • Deberías usar asignaciones (http://es.wikipedia.org/wiki/Operadores_de_C_y_C%2B%2B). 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.


Título: Re: Mi primer trabajo practico de la facultad
Publicado por: clodan en 1 Septiembre 2010, 16:04 pm
Sugerencias:
Cambiar los códigos de tipo ... a=a+1, por a++
Que acaso no estas repitiendo código innecesariamente? :rolleyes:
Código
  1. x=x+1;
  2. 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??


Título: Re: Mi primer trabajo practico de la facultad
Publicado por: 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


Título: Re: Mi primer trabajo practico de la facultad
Publicado por: clodan en 1 Septiembre 2010, 17:19 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


Título: Re: Mi primer trabajo practico de la facultad
Publicado por: Novlucker en 1 Septiembre 2010, 17:22 pm
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