Problema de C, mostrar pares URGENTE!!

Alguien me echa un cable?

Mostrar pares del 6 al 20?

Usando el while supongo, pero no hay manera

GRACIAS!
Varox escribió:Alguien me echa un cable?

Mostrar pares del 6 al 20?

Usando el while supongo, pero no hay manera

GRACIAS!


un condicional con if i%2==0 te muestra los divisibles entre 2 XD
Fácil:

for (int i=6; i<=20; i++) {

if ((i%2)==0)
printf("El número %d es par\n",i,i%2);
else
printf("El número %d es impar\n",i,i%2);
}

;)
contador = 6; /* Inicialización del contador */

while ( contador <= 20 ) /* Condición */
{
printf( "%d ", contador ); /* Salida */
contador=contador+2; /* Incremento del contador */
}



Por ejemplo. Pero hay millones de maneras distintas de hacerlo...
for(int i=6;i<21;i++) {
     if(i%2 == 0) {
        cout << i  << " ";
     }
}
Dejad de hacer los deberes a la gente. Flaco favor nos hacemos, porque luego dicen que saben programar.
printf("%d %d %d %d %d %d %d %d",6,8,10,12,14,16,18,20);
Dex89 escribió:
for(int i=6;i<21;i++) {
     if(i%2 == 0) {
        cout << i  << " ";
     }
}


Esto sería C++, mejor usa otras soluciones.
Gurlukovich escribió:printf("%d %d %d %d %d %d %d %d",6,8,10,12,14,16,18,20);


La solución mas simple, no hay duda [sonrisa]

Fin del hilo. [360º]
Oveja_Dolly está baneado por "Saltarse el baneo con otro nick"
Gurlukovich escribió:printf("%d %d %d %d %d %d %d %d",6,8,10,12,14,16,18,20);


spanish style :p
Gurlukovich escribió:printf("%d %d %d %d %d %d %d %d",6,8,10,12,14,16,18,20);


OMFG xDDDDDD
Gurlukovich escribió:printf("%d %d %d %d %d %d %d %d",6,8,10,12,14,16,18,20);


Creo que esta solución es la que más me ha gustado,
pero ya puestos se puede hacer directamente:
printf("6 8 10 12 14 16 18 20");
[sonrisa]

Pero lo más ortodoxo creo que seria lo de Hausdorff
bien con un while o con un for pero contando de 2 en 2 en lugar de usar un condicional.
Gurlukovich escribió:printf("%d %d %d %d %d %d %d %d",6,8,10,12,14,16,18,20);


EPIC WIN! xDDDD
for(i=6,i<=20;i=i+2)
{
printf("%d",i);
}
Si estás estudiando algo relacionado con la informática en algún sitio, universidad o algún FP, si no sabes hacer eso tan sencillo tendrías que esforzarte más o pensar en estudiar otra cosa. Si eres autodidácta, ánimo que poco a poco se llega!
Aun así usar la operación módulo no sería la mejor opción (obviando el printf, claro :p), sino incrementar de dos en dos la variable.
Harl escribió:
Gurlukovich escribió:printf("%d %d %d %d %d %d %d %d",6,8,10,12,14,16,18,20);


Creo que esta solución es la que más me ha gustado,
pero ya puestos se puede hacer directamente:
printf("6 8 10 12 14 16 18 20");
[sonrisa]

Pero lo más ortodoxo creo que seria lo de Hausdorff
bien con un while o con un for pero contando de 2 en 2 en lugar de usar un condicional.


Si, pero para eso tendría que haberme parado a pensar medio segundo, y como decía que lo quería urgente... XD
Pakiyopgd escribió:
Varox escribió:Alguien me echa un cable?

Mostrar pares del 6 al 20?

Usando el while supongo, pero no hay manera

GRACIAS!


un condicional con if i%2==0 te muestra los divisibles entre 2 XD


Lo que aqui dice mi amigo es lo más correcto.

for(i=6;i<=20;i++)
    {
        if(i%2==0)
        {
            printf("%d",i);
        }
    }
Sethiiiiii escribió:
Gurlukovich escribió:printf("%d %d %d %d %d %d %d %d",6,8,10,12,14,16,18,20);


EPIC WIN! xDDDD


I agree!
solo he leido a uno que dice i+2...

para mi es lo mas facil y limpio

for (int i=6;i<=20;i=i+2)
printf(i);
wolf_ou escribió:solo he leido a uno que dice i+2...


Es que meter condicionales ya jode, pero es que encima hacemos módulos que es el resto de una división, una operación con muchos más costes computacionales que una suma.
Pero.... Yo tengo un ejercicio más sencillo

Se trata de imprimir los numeros primos desde 1 al 10^11. Es muy sencillo. Sólo hay que usar dos bucles anidados!

Premio al que me entregue el programa hecho. La condicion es que se ejecute en un tiempo razonable :P
Moki_X escribió:Se trata de imprimir los numeros primos desde 1 al 10^11


El 1 no es un número primo, pero vamos, sacamos el dos fuera y hacemos lo siguiente:


for (i = 3; i < exp(10, 11); i = i + 2)
   if (esPrimo(i))
          printf("%d ", i);


// Ahora la función esPrimo

int esPrimo (int num) {

int logico = 1;
int i=3;

if (num % 2 == 0)
     logico = 0;

while (logico && i < sqrt(num)) {

if (num % i == 0)
     logico = 0;

i = i + 2;

}

return logico;
}


Más o menos así.
(mensaje borrado)
Carlos A. escribió:
Moki_X escribió:Se trata de imprimir los numeros primos desde 1 al 10^11


El 1 no es un número primo, pero vamos, sacamos el dos fuera y hacemos lo siguiente:


for (i = 3; i < exp(10, 11); i = i + 2)
   if (esPrimo(i))
          printf("%d ", i);


// Ahora la función esPrimo

int esPrimo (int num) {

int logico = 1;
int i=3;

if (num % 2 == 0)
     logico = 0;

while (logico && i < sqrt(num)) {

if (num % i == 0)
     logico = 0;

i = i + 2;

}

return logico;
}


Más o menos así.


Como no uses long long en lugar de int, ese programa no termina nunca xD. Esa función exp creo que tampoco se usa así. Para probar la primalidad de un número de manera eficiente se podría usar la criba de Atkin. Teniendo todo eso en cuenta, se lleva el 10 en el ejercicio xD.
La virgen.... Yo que me esperaba una gilipollez como un piano, y me salís con cosas molonas. Gracias EOL xD
Elelegido escribió:Como no uses long long en lugar de int, ese programa no termina nunca xD.


Bueno, es que mi compilador es muy bueno y lo autosustituye [qmparto] [qmparto]. Y sí, probablemente no se use así la función exp, pero vamos, me refiero a elevar a 11 el 10 :).
Carlos A. escribió:
wolf_ou escribió:solo he leido a uno que dice i+2...


Es que meter condicionales ya jode, pero es que encima hacemos módulos que es el resto de una división, una operación con muchos más costes computacionales que una suma.


La mayoría de los informáticos no saben utilizar un AND que a la velocidad del rayo, te hace lo mismo que ese torpe módulo: (v & 1) == 0 es par. Eso si, luego son ingenieros y cosas así XD
Bueno, lo primero gracias a todos por la ayuda, me habeis pegao un empujón en el examen xD
Estwald escribió:
Carlos A. escribió:
wolf_ou escribió:solo he leido a uno que dice i+2...


Es que meter condicionales ya jode, pero es que encima hacemos módulos que es el resto de una división, una operación con muchos más costes computacionales que una suma.


La mayoría de los informáticos no saben utilizar un AND que a la velocidad del rayo, te hace lo mismo que ese torpe módulo: (v & 1) == 0 es par. Eso si, luego son ingenieros y cosas así XD


Pero eso no creo que funcione muy bien con coma flotante..., y un compilador decente es capaz de optimizar cosas simples como operaciones aritmeticas con constantes.
Gurlukovich escribió:printf("%d %d %d %d %d %d %d %d",6,8,10,12,14,16,18,20);


Epic win.

Al autor del hilo: si no sabes programar algo tan sencillo como eso mal vas.
Alpo escribió:
Gurlukovich escribió:printf("%d %d %d %d %d %d %d %d",6,8,10,12,14,16,18,20);


Epic win.

Al autor del hilo: si no sabes programar algo tan sencillo como eso mal vas.


Bueno, pese a no ser de tu incunvencia, te lo voy a decir igualmente. Ni estudio para programación, ni pretendo ser programador, y tampoco me gusta ni creo que lo vaya a usar más veces en la vida. Simplemente en la parte final de la asignatura, nos tocaba dar algo de C, y sin haber programado nunca, y llevando poco tiempo con ello... pues es lo que hay
Estwald escribió:
Carlos A. escribió:
wolf_ou escribió:solo he leido a uno que dice i+2...


Es que meter condicionales ya jode, pero es que encima hacemos módulos que es el resto de una división, una operación con muchos más costes computacionales que una suma.


La mayoría de los informáticos no saben utilizar un AND que a la velocidad del rayo, te hace lo mismo que ese torpe módulo: (v & 1) == 0 es par. Eso si, luego son ingenieros y cosas así XD


Esa afirmación tuya es cierta únicamente para los enteros positivos. Y dependiendo del hardware si la representación de los enteros es en complemento a dos.

Rojos saludos.
paliyoes escribió:
Estwald escribió:
La mayoría de los informáticos no saben utilizar un AND que a la velocidad del rayo, te hace lo mismo que ese torpe módulo: (v & 1) == 0 es par. Eso si, luego son ingenieros y cosas así XD


Esa afirmación tuya es cierta únicamente para los enteros positivos. Y dependiendo del hardware si la representación de los enteros es en complemento a dos.

Rojos saludos.


Toda regla tiene sus excepciones y está bien señalarlas, pero eso no exime de su cumplimiento cuando toca, jeje. También tengo entendido que hay compiladores que ciertas operaciones las optimizan (al menos yo recuerdo uno que una operación de módulo, acaba traducida de ésta forma al mirar el ensamblador (por algo será XD) , pero vamos, a mi me importa un rábano ya el asunto: que programe otro, que yo bastante programé en mi... otra vida :p )

Saludos
kaneFC escribió:Fácil:

for (int i=6; i<=20; i++) {

if ((i%2)==0)
printf("El número %d es par\n",i,i%2);
else
printf("El número %d es impar\n",i,i%2);
}

;)

Esta estupendo tu ejemplo, pero como solo ha preguntado por pares lo retoco...

for (int i=6; i<=20; i++) {

if (i%2){
printf("El número %d es par\n",i+1,i%2);
}
}
a los que usais modulos para hacer esto
¿no sabeis que se puede sumar de dos en dos?
highfredo escribió:a los que usais modulos para hacer esto
¿no sabeis que se puede sumar de dos en dos?


creo que suspendieron las asignaturas de costes también xd
Hace tiempo yo realice el mismo ejercicio de practicas en la universidad y opte por la solucion de ir sumando de dos en dos y me comento que a pesar de estar bien no era la mejor opcion, porque si, te empieza preguntando por un par, pero que pasaria si en realidad pidiera un rango?
Por ejemplo, el usuario le dice que empiece en 3 y acabe en 200 y me diga todos los pares, si empiezas a sumar de 2 en dos sacarias los impares
Denbrough escribió:Hace tiempo yo realice el mismo ejercicio de practicas en la universidad y opte por la solucion de ir sumando de dos en dos y me comento que a pesar de estar bien no era la mejor opcion, porque si, te empieza preguntando por un par, pero que pasaria si en realidad pidiera un rango?
Por ejemplo, el usuario le dice que empiece en 3 y acabe en 200 y me diga todos los pares, si empiezas a sumar de 2 en dos sacarias los impares


Sólo había que comprobar si el primer número es par. O algo así:

for (i = start + start % 2; i <= end; i += 2)
   printf("%d ", i);
(mensaje borrado)
39 respuestas