[Curso] Introducción a la programación en C (VIII)

Moderadores: Kravenbcn, largeroliker, fidelcastro, cerealkiller, pspCaracas, m0skit0, LnD, ka69, zacky06

Avatar de Usuario
hiddenotebook
Experto
Experto
Mensajes: 634
Registrado: 28 Dic 2009, 14:56
Ubicación: En un lugar de la mancha...

Re: [Curso] Introducción a la programación en C (VIII)

Mensaje por hiddenotebook »

profe no quiero ser toca pelotas pero creo que tu ejercicio tiene un error si introduzco 23 pasa esto:

Código: Seleccionar todo

Introduce un numero: 23


No es un nueve
Es mayor o igual que 10
Es múltiplo de 5 O es menor o igual que 100
No es par ni mayor que 10  // a esto me refiero si que es mayor
23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
Última edición por hiddenotebook el 24 Feb 2010, 12:05, editado 1 vez en total.

Avatar de Usuario
m0skit0
Administrador
Administrador
Mensajes: 5585
Registrado: 03 Sep 2009, 09:35
Ubicación: 0xdeadbeef

Re: [Curso] Introducción a la programación en C (VIII)

Mensaje por m0skit0 »

Yo me refiero a que debe cumplir ambas condiciones: ser par Y mayor que diez.
Imagen

Avatar de Usuario
hiddenotebook
Experto
Experto
Mensajes: 634
Registrado: 28 Dic 2009, 14:56
Ubicación: En un lugar de la mancha...

Re: [Curso] Introducción a la programación en C (VIII)

Mensaje por hiddenotebook »

Vale ya me di cuenta que si cambio el cero tampoco funciona es una tontería como una casa, pero moskito en tu ejemplo no se cumplen o yo lo entiendo mal porque dice que
printf("No es par ni mayor que 10\n"); dice 'ni' mayor... no 'y' mayor, puedes verlo en el ejemplo que puse arriba.

Si cambio el printf a printf("No es par y es mayor que 10\n");
sigue estando mal porque con un 3 me diria que es mayor que 10.
espero que me entiendas.

Avatar de Usuario
m0skit0
Administrador
Administrador
Mensajes: 5585
Registrado: 03 Sep 2009, 09:35
Ubicación: 0xdeadbeef

Re: [Curso] Introducción a la programación en C (VIII)

Mensaje por m0skit0 »

Bueno, entonces tómalo como NO es par Y NO es mayor de diez, que viene a ser lo contrario de:

m0skit0 escribió:Yo me refiero a que debe cumplir ambas condiciones: ser par Y mayor que diez.
Imagen

Avatar de Usuario
hiddenotebook
Experto
Experto
Mensajes: 634
Registrado: 28 Dic 2009, 14:56
Ubicación: En un lugar de la mancha...

Re: [Curso] Introducción a la programación en C (VIII)

Mensaje por hiddenotebook »

Claaro...entonces si el numero es 23 me dirá que no es mayor que 10, o te refieres a que si no es par, ¿que sea mayor que 10 o no, no importa?

Avatar de Usuario
m0skit0
Administrador
Administrador
Mensajes: 5585
Registrado: 03 Sep 2009, 09:35
Ubicación: 0xdeadbeef

Re: [Curso] Introducción a la programación en C (VIII)

Mensaje por m0skit0 »

23 es ambas cosas: mayor que 10 e impar. Por tanto 23 no es par y mayor que 10 (no cumple las 2 condiciones). 24 sería mayor que 10, pero par. 2 sería par, pero menor que 10.

Para que me entiendas mejor, esto no es un Y coloquial, que usamos cuando hablamos, es un Y lógico: dadas 2 expresiones lógicas A y B (que pueden ser verdaderas o falsas), A && B sólo es verdad en el caso en que ambos A y B sean verdad, siendo falso en cualquier otro caso. Con los ejemplos arriba citados:

(23 > 10) && (23 % 2 == 0) -> V && F -> F
(24 > 10) && (24 % 2 == 0) -> V && V -> V
(2 > 10) && (2 % 2 == 0) -> F && V -> F

Saludos!
Imagen

arisma
Habitual
Habitual
Mensajes: 497
Registrado: 18 Sep 2009, 08:41

Re: [Curso] Introducción a la programación en C (VIII)

Mensaje por arisma »

A titulo de curiosidad se evalua de izquierda a derecha y se deja de evaluar una vez que ya se sabe el resultado, es decir, si evaluando la primera condición ya se sabe el resultado no se evalua el segundo.

En el ejemplo del Y lógico, si la primera condición es falsa(como ha de complirse ambas como verdadera para ser verdadera la evaluación) ya no se evalua la segunda.

Avatar de Usuario
m0skit0
Administrador
Administrador
Mensajes: 5585
Registrado: 03 Sep 2009, 09:35
Ubicación: 0xdeadbeef

Re: [Curso] Introducción a la programación en C (VIII)

Mensaje por m0skit0 »

C sí se tiene evaluación inteligente, pero muchos otros lenguajes no la tienen.
Imagen

Avatar de Usuario
hiddenotebook
Experto
Experto
Mensajes: 634
Registrado: 28 Dic 2009, 14:56
Ubicación: En un lugar de la mancha...

Re: [Curso] Introducción a la programación en C (VIII)

Mensaje por hiddenotebook »

Hasta aquí quería llegar yo señor profe, si yo pongo en una frase:

No es par ni mayor que 10
o
No es par y mayor que 10

usando este ejemplo que pusiste:

Código: Seleccionar todo

    if (!( (numero % 2 == 0) && (numero > 10)))
        printf("No es par ni mayor que 10\n");


Si no se cumple alguna de las 2 el programa deveria no imprimir el mensaje no? lo que pasa es que si pongo un 23 si lo imprime mira:

Código: Seleccionar todo

Introduce un número: 23
No es un nueve
Es mayor o igual que 10
Es multiplo de 5 ó es menor o igual a 100
No es par ni mayor que 10
/* vale par no es, pero si que es mayor que 10 si cambio la frase da igual porque si pongo, no es par Y mayor que 10 me pasa lo mismo pero al contrario si pongo un 1 me dice que es mayor que 10 en vez de ignorar ese printf*/


Pero al contrario si pongo un 26 ignora este printf mira:

Código: Seleccionar todo

Introduce un número: 26
No es un nueve
Es mayor o igual que 10
Es multiplo de 5 ó es menor o igual a 100
26 25 24 23 22 21 20 19 18 17 16 15 14 13


23 es ambas cosas: mayor que 10 e impar. Por tanto 23 no es par y mayor que 10 (no cumple las 2 condiciones). 24 sería mayor que 10, pero par. 2 sería par, pero menor que 10.

Para que me entiendas mejor, esto no es un Y coloquial, que usamos cuando hablamos, es un Y lógico: dadas 2 expresiones lógicas A y B (que pueden ser verdaderas o falsas), A && B sólo es verdad en el caso en que ambos A y B sean verdad, siendo falso en cualquier otro caso. Con los ejemplos arriba citados:

(23 > 10) && (23 % 2 == 0) -> V && F -> F
(24 > 10) && (24 % 2 == 0) -> V && V -> V
(2 > 10) && (2 % 2 == 0) -> F && V -> F


Todo lo que me cuentas aquí lo entiendo perfectamente, lo que no entiendo es que si una de las dos es Falsa porque imprime el mensaje en pantalla, porque que me diga que 23 no es mayor que 10 no puede ser.

PD: y ya de paso mi primer ejercicio.

Código: Seleccionar todo

#include <stdio.h>

int main (int argc, char *argv[])

   {
   int numero;

      system("clear");
      printf("Introduce un número entre 0 y 20... ");
      scanf("%d", &numero);

   if (numero % 2 == 0 & numero < 20)
           printf("Es par menor que 20\n ");

   if (numero % 2 == 0 & numero == 20)
      printf("Es par igual que 20\n");

   if (numero % 2 == 1 &numero <= 20)
      printf("es impar\n");

   if (numero > 20)
      printf("entre tú y yo ¿sabes leer?\n");

   return 0;

   }   

arisma
Habitual
Habitual
Mensajes: 497
Registrado: 18 Sep 2009, 08:41

Re: [Curso] Introducción a la programación en C (VIII)

Mensaje por arisma »

Estoy intentando ver en qué pagina has colgado el codigo o cual es el ultimo codigo que estás usando pero mientras tanto->

Código: Seleccionar todo

  if (!( (numero % 2 == 0) && (numero > 10)))
        printf("No es par ni mayor que 10\n");

(23 > 10) && (23 % 2 == 0) -> V && F -> F
(24 > 10) && (24 % 2 == 0) -> V && V -> V
(2 > 10) && (2 % 2 == 0) -> F && V -> F


A ver chicos, que nos hemos de fijar en la negación. Si el resultado es false, y le pones la negación...

El problema es, que cualquiera de las 2 condiciones puede hacer falsa el resultado.

Responder