Hack x Crack - Comunidad de Seguridad informática

Programación => C / C++ => Mensaje iniciado por: hackman en Octubre 19, 2014, 04:48:33 am

Título: Alguien que me explique este codigo en C...
Publicado por: hackman en Octubre 19, 2014, 04:48:33 am
Hola amigos de HxC veran ando entendiendo el uso de arrays y bucles y encontre este ejercicio resuelto en C pero hay algunas partes que no entiendo para que sirven, espero me puedan aclarar esas dudas... Gracias

Ejercicio: Un programa que rellene un array con los números primos comprendidos entre 1 y 100 y los muestre en pantalla en orden ascendente.

Código: C
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. int main(void)
  5. {
  6.             int x,cont,z,i,tabla[100];          /*
  7.                                                                   Declaracion de variables
  8.             i=0;                                           */        
  9.            
  10.         for (x=1;x<=100;x++)                 //Bucle FOR que genera los numeros del 1 al 100
  11.             {
  12.         cont=0;                                        //Esta variable no se para que es :S
  13.         for (z=1;z<=x;z++)                    //Bucle FOR que divide los numeros generados por el bucle anterior entre 2 para saber si es  numero primo                                          
  14.         {
  15.             if (x%z==0)
  16.             {
  17.                cont++;                                 //Tampoco se para que sirve esta variable
  18.             }
  19.         }
  20.        
  21.         if (cont==2 || z==1 || z==0)       // Tampoco entiendo para que sirven estos || ni para que son esas variables
  22.         {
  23.          tabla[i]=x;
  24.          i++;
  25.         }
  26.        
  27.     }
  28.            
  29.             for (x=0;x<i;x++)
  30.             {
  31.         printf("%d\n",tabla[x]);
  32.     }
  33.            
  34.     system("PAUSE");    
  35.     return 0;
  36. }
  37.  
  38.  
Título: Re:Alguien que me explique este codigo en C...
Publicado por: stakewinner00 en Octubre 19, 2014, 11:05:43 am
Primero que no tienes que comentar el i=0 porque sino el programa no funcionara.

Luego,
Código: [Seleccionar]
cont++;                                 //Tampoco se para que sirve esta variable la variable cont lo que hace es acumular el número de divisores que tiene un número, luego
Código: [Seleccionar]
if (cont==2 || z==1 || z==0) si el número de divisores que tiene un número es 2 entonces es por definición un número primo.

Los || (comparación or) hará que si se cumple cualquier condición de esas entre en el bucle en este caso la comparación dice que si un número es primo o z==1 o z==0 se añadirá el número a la lista de primos que luego se imprimirá.  Z es la variable que se usa como divisor y que nunca será 1 o 0 ya que se inicializa en 1 y entonces z nunca será 0, para la parte de || z==1 tampoco hace falta ya que "z=1;z<=x" como x se inicializa a 1 z hará como mínimo un ciclo y z incrementara a 2  así que el condicional de
Código: [Seleccionar]
if (cont==2 || z==1 || z==0) puede quedar
Código: [Seleccionar]
if (cont==2) y funciona igual.

Saludos
Título: Re:Alguien que me explique este codigo en C...
Publicado por: hackman en Octubre 19, 2014, 09:25:29 pm
Primero que no tienes que comentar el i=0 porque sino el programa no funcionara.

Luego,
Código: [Seleccionar]
cont++;                                 //Tampoco se para que sirve esta variable la variable cont lo que hace es acumular el número de divisores que tiene un número, luego
Código: [Seleccionar]
if (cont==2 || z==1 || z==0) si el número de divisores que tiene un número es 2 entonces es por definición un número primo.

Los || (comparación or) hará que si se cumple cualquier condición de esas entre en el bucle en este caso la comparación dice que si un número es primo o z==1 o z==0 se añadirá el número a la lista de primos que luego se imprimirá.  Z es la variable que se usa como divisor y que nunca será 1 o 0 ya que se inicializa en 1 y entonces z nunca será 0, para la parte de || z==1 tampoco hace falta ya que "z=1;z<=x" como x se inicializa a 1 z hará como mínimo un ciclo y z incrementara a 2  así que el condicional de
Código: [Seleccionar]
if (cont==2 || z==1 || z==0) puede quedar
Código: [Seleccionar]
if (cont==2) y funciona igual.

Saludos

Muchas gracias por contestar stakewinner00, lo explicaste perfecto amigo, ya me queda mucho mas claro pero sigo practicando con los bucles para lograr hacer el programa que les comente en la otra duda... gracias