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

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

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 »

Repásalo tranquilamente y ya hablamos mañana. A veces hay que dejar reposar las cosas y echarles un vistazo más tarde, con la mente más relajada ;)
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 »

He leído unas cuantas veces todo y esto es lo que entiendo

Código: Seleccionar todo

   if (!((numero % 2 == 0) && (numero <= 20)))
       printf("%d es un numero impar o mayor que 20\n", numero);


(numero <=20) al estar la negación ! al principio cambia el significado de todo,
(numero menor <=20) lo pasa a (numero mayor >=20)
Si esto no es así ruego que me respondan a esto primero para desechar la idea.
yo mientras voy a seguir a ver si salta la :idea:

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 »

hiddenotebook escribió:(numero menor <=20) lo pasa a (numero mayor >=20)

Bueno, eso de lo pasa... Supongo que te refieres a la regla de De Morgan, en cuyo caso no cambia a (numero mayor >=20), sino a (numero mayor >20). Y no olvides que && pasa a ser || (o en caso de || -> &&)

En todo caso, fíjate BIEN en tu código:

Código: Seleccionar todo

   //Defino el impar, menor a 20
   if (!((numero % 2 == 0) && (numero >= 20)))
        printf("%d Es un número impar o menor que 20\n", numero);

hiddenotebook escribió:a ver jajaja viste la peli de la historia interminable? por lo visto hoy la vemos :lol: fijo.

:lol: no te preocupes, si no te quedan las cosas claras, pregunta sin temor. Eso sí, intenta hacer un esfuerzo por ti mismo antes de preguntar, que siempre viene bien calentar las :idea:
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 »

hiddenotebook escribió:He leído unas cuantas veces todo y esto es lo que entiendo

Código: Seleccionar todo

   if (!((numero % 2 == 0) && (numero <= 20)))
       printf("%d es un numero impar o mayor que 20\n", numero);


(numero <=20) al estar la negación ! al principio cambia el significado de todo,
(numero menor <=20) lo pasa a (numero mayor >=20)
Si esto no es así ruego que me respondan a esto primero para desechar la idea.
yo mientras voy a seguir a ver si salta la :idea:



NO. Lo que cambia es el resultado no la negación. En el ejemplo que has puesto además no pasaría a numero mayor >=20, sino si acaso a numero mayor > 20

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 »

Entonces si pasa a mayor ya esta bien este ultimo ejemplo porque en el printf pone O mayor!!

Código: Seleccionar todo

   //Defino el impar
   if (!((numero % 2 == 0) && (numero <= 20)))
       printf("%d es un numero impar o mayor que 20\n", numero);


voy a intentar aprender mas de la regla de Morgan porque me estanque aquí y no puede ser me lo tengo que aprender si o si, gracias por la paciencia que tienen conmigo.

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 »

Sí, este último está bien :oki:

Para que practiques, utiliza la regla de De Morgan sobre las siguientes expresiones (de menor a mayor dificultad):

  • !(a || b)
  • !a && !b
  • !(a || !b)
  • !(!(!a && !b) || !a)
  • a && !b

PD: recomiendo a todos realizar estas operaciones y saberse De Morgan ;)
Imagen

Avatar de Usuario
dRoLl3R
Habitual
Habitual
Mensajes: 315
Registrado: 29 Sep 2009, 21:30
Ubicación: [ † ] Asturias

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

Mensaje por dRoLl3R »

Bueno profe corrigeme lo que tenga mal. xD
Es la primera vez que posteo los ejercicios pero estos ya tienen su dificultad y varias maneras de hacerse.
Bueno ahí van:

1º:
Spoiler:

Código: Seleccionar todo

#include <stdio.h>

int main(int argc, char *argv[])
{
  int numero;
 
  printf("Introduce un numero: ");
  scanf("%d", &numero);
 
  if ((numero < 20) && (numero % 2 == 0))
     printf("\nEl numero es menor que 20 y par.");
     
  else if (numero >= 20)
     printf("\nEl numero es mayor o igual que 20.");
  else
     printf("\nEl numero es impar.");
     
  return 0;
}

Spoiler:

Código: Seleccionar todo

#include <stdio.h>

int main(int argc, char *argv[])
{
    float numero1;
    float numero2;
     
    printf("Introduce un numero: ");
    scanf("%f", &numero1);
    printf("\nIntroduce otro numero: ");
    scanf("%f", &numero2);
   
    if ((numero1 + numero2) / 2 > 20)
       printf("\nLa media de ambos numeros es mayor que 20.\n");
    else   
       printf("\nLa media de ambos numeros es menor que 20.\n");
    if ((numero1 + numero2) > 20)
       printf("La suma de ambos numeros es mayor que 20.\n");
    else
       printf("La suma de ambos numeros es menor que 20.\n");
    if ((numero1 * numero2) > 20)
       printf("El producto de ambos numeros es mayor que 20.");
    else
       printf("El producto de ambos numeros es menor que 20.");
   
  return 0;
}

Spoiler:

Código: Seleccionar todo

#include <stdio.h>

int main(int argc, char* argv[])
{
    int numero1;
    int numero2;
    int n = 0;
    int suma;
   
    printf("Introduce un numero entero: ");
    scanf("%d", &numero1);
    printf("\nIntroducie otro numero entero: ");
    scanf("%d", &numero2);
   
    suma = numero1 + numero2;
   
    if (suma % 2 == 0)
        printf("\nLa suma de los numero es par.\n");
    else
        printf("\nLa suma de los numero es impar.\n");
   
    while ((n <= suma) && (suma % 2 == 0))
    {
          printf("%d ", n);
          n = n + 2;
    }
    while ((n <= suma) && (!(suma % 2 == 0)))
    {
          printf("%d ", n + 1);
          n = n + 2;
    }
   
    return 0;
}

Spoiler:

Código: Seleccionar todo

#include <stdio.h>

int main(int argc, char* argv[])
{
    int numero;
    int n = 2;
   
    printf("Introduce un numero entero: ");
    scanf("%d", &numero);
   
    while (!(numero % n == 0)) n = n + 1;
   
    if (numero == n)
       printf("El numero es primo");
    else
       printf("El numero no es primo");
   
    return 0;
}

Spoiler:

Código: Seleccionar todo

#include <stdio.h>

int main(int argc, char* argv[])
{
    int num1;
    int num2;
    int n = 4;
   
    printf("El juego se trata de acertar el numero que ha introducido tu amigo.\n");
    printf("Jugador 2 no mires, Jugador 1 introduce tu numero ente 0 y 10: ");
    scanf("%d", &num1);
    system("cls");
    printf("Jugador 2 tienes 5 intentos para acertar el numero. Comenzemos.\n");
    printf("\nIntroduce un numero entre 0 y 10, tienes 5 intentos: ");
    scanf("%d", &num2);
   
    while ((num1 != num2) && (n != 0))
    {
          if (n != 1)
             printf("\nNo has acertado. Te quedan %d intentos.\n", n);
          else
              printf("\nNo has acertado. Ultimo intento.\n");
             
          printf("Intentalo de nuevo. Introduce otro numero: ");
          scanf("%d", &num2);
          n = n - 1;
    }
   
    if (num1 == num2)
    {
       printf("\nEnhorabuena, has acertado el numero");
       printf("\nEl Jugador 2 gana la partida.");
    }
    else
    {
       printf("\nSe han acabado las oportunidades.\n");
       printf("El Jugador 1 gana la partida.\n");
       printf("El numero era: %d", num1);
    }

    return 0;
}
PSP3ooo: 4.21 -> 5.00 -> 5.03 -> 5.03 GEN-A -> 5.03 M33 -> 5.03 MHU -> 5.03 GEN-C -> 5.03 MHU -> 6.20 PRO-B4

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 »

Bienvenido, Droller :oki:

Droller escribió:

m0skit0 escribió:Dados dos números enteros, si la suma de ambos es par, imprimir todos los valores pares hasta el mayor de ellos. Si la suma no es par, imprimir los valores impares hasta la suma de ambos.


Droller escribió:

Funciona, pero se puede mejorar como mínimo al doble de la velocidad.

En general, muy bien :oki:
Imagen

Avatar de Usuario
dRoLl3R
Habitual
Habitual
Mensajes: 315
Registrado: 29 Sep 2009, 21:30
Ubicación: [ † ] Asturias

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

Mensaje por dRoLl3R »

Bueno haber ahora.
Aquí está el 3º corregido:
Spoiler:

Código: Seleccionar todo

#include <stdio.h>

int main(int argc, char* argv[])
{
    int numero1;
    int numero2;
    int n = 0;
    int suma;
    int mayor;
   
    printf("Introduce un numero entero: ");
    scanf("%d", &numero1);
    printf("\nIntroducie otro numero entero: ");
    scanf("%d", &numero2);
   
    suma = numero1 + numero2;
   
    if (numero1 > numero2)
        mayor = numero1;
    else
        mayor = numero2;
   
    if (suma % 2 == 0)
        printf("\nLa suma de los numero es par.\n");
    else
        printf("\nLa suma de los numero es impar.\n");
   
    while ((n <= mayor) && (suma % 2 == 0))
    {
          printf("%d ", n);
          n = n + 2;
    }
    while ((n <= suma) && (!(suma % 2 == 0)))
    {
          printf("%d ", n + 1);
          n = n + 2;
    }
   
    return 0;
}


Pero no se me ocurre como bajar la velocidad al 4º. Alguna pista?

EDITO: He encotrado un fallo en mi ejercicio 4. No sirve para 1.
Aquí esta corregido. También he modificado lo de la negacion del while para ver si es eso a lo que te referias.
Spoiler:

Código: Seleccionar todo

#include <stdio.h>

int main(int argc, char* argv[])
{
    int numero;
    int n = 2;
   
    printf("Introduce un numero entero: ");
    scanf("%d", &numero);
   
    while ((numero % n != 0) && (numero != 1)) n = n + 1;
   
    if ((numero == n)||(numero == 1))
       printf("El numero es primo");
    else
       printf("El numero no es primo");
   
    return 0;
}
PSP3ooo: 4.21 -> 5.00 -> 5.03 -> 5.03 GEN-A -> 5.03 M33 -> 5.03 MHU -> 5.03 GEN-C -> 5.03 MHU -> 6.20 PRO-B4

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 »

Droller escribió:Bueno haber ahora.

Ya no puedo aguantarlo más :lol:
Spoiler:
NO ES HABER, ES A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER, A VER


Droller escribió:Aquí está el 3º corregido:

:oki:

Droller escribió:He encotrado un fallo en mi ejercicio 4. No sirve para 1.

Eso no es un fallo. El 1 no cuenta, y el programa en realidad debería devolver "número no válido".

Droller escribió:Alguna pista?

Léete unos pocos posts anteriores en los que se discute sobre el tema

Muy buen curro, Droller :oki:
Imagen

Responder