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

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

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

Mensaje por m0skit0 »

<< Anterior Siguiente >>

"Es usted la mujer más bella que he visto en mi vida... lo cual no dice mucho en mi favor" (Groucho Marx)

Control de flujo de ejecución

Aquí es donde mucha gente suele atascarse (sobre todo los bucles resultan un poco complicados de entender), aunque la verdad no es que tenga mucha dificultad. Con control del flujo de ejecución nos referimos a realizar unas tareas u otras (es decir, ejecutar un código u otro) dependiendo de los valores de datos que se nos presenten en tiempo de ejecución. Esto es, no es lo mismo asignar valores estáticos, como por ejemplo

Código: Seleccionar todo

int edad = 5;

que recuperar valores dinámicos, que no podemos saber de antemano lo que valen, por ejemplo

Código: Seleccionar todo

scanf("%d", &edad);

Por lo tanto, un mecanismo que nos permita comprobar qué valores se han asignado a las variables sería muy útil para poder decidir por qué camino continuar.

Primero vamos a ver la sentencia if. If es si (condicional, como en "si haces esto te doy lo otro") en inglés. Nos permite comprobar si una expresión matemática es verdadera o falsa, y ejecutar un código u otro respectivamente. Veamos un ejemplo:

Código: Seleccionar todo

#include <stdio.h>

int main(int argc, char* argv[])
{
    int edad;

    printf("Por favor, introduzca su edad: ");
    scanf("%d", &edad);
   
    // Si la edad es mayor de 20
    if (edad > 20)
        printf("\nUn poco tarde para empezar, viejo!\n");
    // Si no (la edad es igual o menor que 20)
    else
        printf("\nAnimo, que la practica hace la perfeccion ;)\n");

    return 0;
}

Fijaos que de los dos printf del final, sólo se va a imprimir en pantalla uno de los dos. Jamás se imprimirán ambos. Esto es debido a que uno responde a una condición y el otro a la falta de dicha condición. Es como decir "si llueve coge el paraguas, si no, no lo cojas". Jamás se va a cumplir que llueva y no llueva a la vez :lol:

Ahora bien, si un if engloba más de una sentencia en su condición, debemos usar las llaves {} para englobar todo el código que deba ejecutarse en caso de que se cumpla la condición (igualmente para el else). Veamos otro ejemplo:

Código: Seleccionar todo

#include <stdio.h>

int main(int argc, char* argv[])
{
    int numero_secreto = 5;
    int numero_introducido;

    // Recordad que no hace falta poner 2 printf para este tipo de salida, aunque es mejor hacerlo porque queda mejor
    printf("Intenta adivinar el número secreto!!!\nIntroduce un número entre 0 y 9... ");
    scanf("%d", &numero_introducido);
   
    // Si el número es mayor...
    if (numero_introducido > numero_secreto)
    {
        printf("\nTe has pasado tres pueblos...\n");
        printf("Vuelve a intentarlo mas tarde.\n");
    }

    // Si no es mayor, si es menor...
    else if (numero_introducido < numero_secreto)
        printf("\nUf, no seas timido... Te has quedado corto!\n");

    // Si no es ni mayor ni menor, si es igual...
    else if (numero_introducido == numero_secreto)
    {
        printf("\nBuah, vaya crack!\n");
        printf("Le lees la mente a los ordenadores, enhorabuena!\n");
    }

    return 0;
}

Aquí también he introducido el else if como podéis ver. Es como el else, sólo que incorpora una condición. Tened en cuenta que un else no se comprueba si un if anterior es verdadero. Además los más avispados habrán notado que la condición de número igual

Código: Seleccionar todo

else if (numero_introducido == numero_secreto)

sobra. Con un else a secas habría bastado:

Código: Seleccionar todo

    // Si no es ni mayor ni menor entonces es igual
    else
    {
        printf("\nBuah, vaya crack!\n");
        printf("Le lees la mente a los ordenadores, enhorabuena!\n");
    }

Como dice el comentario, si no es mayor ni menor, entonces es forzosamente igual. Este tipo de lógica siempre hay que tenerla en cuenta para hacer que los programas no realicen cálculos innecesarios, como volver a comparar numero_introducido con numero_secreto de una manera superflua, porque ya podemos deducir que va a ser siempre verdad ;)

Para que asimiléis esto, os dejo que hagáis unos ejercicios para que practiquéis:

  1. Escribir un programa parecido al anterior ejemplo, sólo que el número secreto se debe introducir por teclado en vez de ser fijo. Sería un juego para dos jugadores: uno introduce el número secreto y otro intenta adivinarlo ;)
  2. Codificar un programa que dados dos números enteros, nos diga cuál es mayor o si son iguales.
  3. Codificar un programa que dados dos números reales, nos diga cuál de los cuadrados (potencia de 2) es más grande.
  4. Codificar un programa que dado un número entero, nos diga si es par o impar (pista: el operador de módulo o resto de una división es % ).

Con dados, me refiero a introducidos por teclado. Nos vemos en la siguiente lección y no olvidéis practicar cuanto más mejor, que si no se olvida todo :P

EL PDF de esta lección para descargar (gracias a Kracker :oki: ):
leccion VI_C.rar


<< Anterior Siguiente >>
No tiene los permisos requeridos para ver los archivos adjuntos a este mensaje.
Imagen

Avatar de Usuario
Razvy14
Experto
Experto
Mensajes: 604
Registrado: 03 Sep 2009, 16:14
PSN ID: Razvy35
Contactar:

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

Mensaje por Razvy14 »

Bueno pos me rindo xD esto es demasiado complicado para un niño de 12 años xD
NEOBARON escribió:wooo!!! que bien estar por aqui para tan magno momento, las pelotillas del culo se me han puesto como alcachofas de la felicidad :mrgreen:

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 (VI)

Mensaje por m0skit0 »

Joer qué rápido te rindes. Normal que seas del Madrid :lol: No veo que hayas hecho los ejercicios de las partes anteriores... leyendo y haciendo copiar-pegar no se aprende... practicando sí.
Imagen

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

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

Mensaje por arisma »

Razvy14 escribió:Bueno pos me rindo xD esto es demasiado complicado para un niño de 12 años xD


Intenta las que creas que son más fáciles y ya está.

Pongo la primera que es hora de comer, jeje.

Spoiler:

Código: Seleccionar todo

#include <stdio.h>

int main()
{
   int nSecreto, nLeido;

   printf("Introduce el número secreto: ");
   scanf("%d", &nSecreto);
   //Queda mejor con for, pero no se ha llegado a ello
   printf("\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n");
   printf("Ahora introduce el número que crees que es secreto: ");
   scanf("%d", &nLeido);
   //
   if ( nLeido == nSecreto) printf("Eres una maquina, a la primera xD\n");
   else if ( nLeido < nSecreto) printf("Te has quedado corto...\n");
   else printf("Te has pasado...\n");
   //
   return 0;
}


Incluyendo el segundo
Spoiler:

Código: Seleccionar todo

#include <stdio.h>

int main()
{
   int nPri, nSeg;

   printf("Introduce el primer número: ");
   scanf("%d", &nPri);
   printf("Ahora introduce el segundo número: ");
   scanf("%d", &nSeg);
   //== cateto ==
   if ( nPri == nSeg) printf("Son iguales xD\n");
   else if ( nPri < nSeg) printf("El segundo número es mayor que el primero...\n");
   else printf("El primer número es mayor que el segundo...\n");

   return 0;
}


Pues sí, el tercero

Spoiler:

Código: Seleccionar todo

#include <stdio.h>

int main()
{
   float nPri, nSeg;
   double potPri, potSeg;

   printf("Introduce el primer número: ");
   scanf("%f", &nPri);
   printf("Ahora introduce el segundo número: ");
   scanf("%f", &nSeg);
   //
   potPri = nPri * nPri;
   potSeg = nSeg * nSeg;
   //
   if ( potPri == potSeg) printf("Los cuadrados son iguales, ambos números son iguales xD\n");
   else if ( potPri < potSeg) printf("El cuadrado de %f es mayor que el de %f...\n", nSeg, nPri);
   else printf("El cuadrado de %f es mayor que el de %f...\n", nPri, nSeg);

   return 0;
}


Y el cuarto.

Spoiler:

Código: Seleccionar todo

#include <stdio.h>

int main()
{
   int nPri;
   
   printf("Introduce un número entero: ");
   scanf("%d", &nPri);
   
   if ( nPri % 2 == 0) printf("Marchando un número PAR\n");
   else printf("Marchando un número IMPAR\n");

   return 0;
}
Última edición por arisma el 18 Oct 2009, 12:10, editado 6 veces 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 (VI)

Mensaje por m0skit0 »

arisma escribió://Queda mejor con for, pero no se ha llegado a ello

No cuentes el final de la peli, hombre :juasjuas:

Código: Seleccionar todo

   if ( nLeido = nSecreto) printf("Eres una maquina, a la primera xD\n");
   else if ( nLeido < nSecreto) printf("Te has quedado corto...\n");
   else printf("Te has pasado...\n");

Está mal. Prueba a correrlo... Has cometido un error bastante común, sobre todo por gente que conoce varios lenguajes :ugeek:

Personalmente no me gusta que las sentencias del if vayan pegadas al final, pero sobre gustos colores :mrgreen:
Imagen

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

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

Mensaje por arisma »

Cierto, sin excusas. Totalmente como si fuera n00b.

Fck FOP.

Avatar de Usuario
Razvy14
Experto
Experto
Mensajes: 604
Registrado: 03 Sep 2009, 16:14
PSN ID: Razvy35
Contactar:

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

Mensaje por Razvy14 »

m0skit0 escribió:Joer qué rápido te rindes. Normal que seas del Madrid :lol: No veo que hayas hecho los ejercicios de las partes anteriores... leyendo y haciendo copiar-pegar no se aprende... practicando sí.


Soy de Cornella de Llobregat, Riera.
Donde se pone mi ciudad?

Por otra parte, tendre en cuenta el copiar/pegar :juasjuas:
NEOBARON escribió:wooo!!! que bien estar por aqui para tan magno momento, las pelotillas del culo se me han puesto como alcachofas de la felicidad :mrgreen:

Avatar de Usuario
alejandro50082
Habitual
Habitual
Mensajes: 467
Registrado: 03 Sep 2009, 03:24
Ubicación: Guatemala

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

Mensaje por alejandro50082 »

estan muy buenos pero mira no tengo como hacer mi tarea XD... esq los anteriores los habia echo en la compu de mi colegio..... donde puedo conseguir c..... :oki:
EDITO:
osea si se donde pero cual de los tres es
1.Dev-C++ 5.0 beta 9.2 (4.9.9.2) (9.0 MB) with Mingw/GCC 3.4.2
2.Dev-C++ 5.0 beta 9.2 (4.9.9.2), executable only (2.4 MB)
3.Dev-C++ 5.0 beta 9.2 (4.9.9.2), source code (1.6 MB)
edito2:ya lo encontre esq no habia terminado de ler el primer curso.... xD
Perdon...
Alejandro50082

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 (VI)

Mensaje por m0skit0 »

Razvy14 escribió:Soy de Cornella de Llobregat, Riera.

Me refería al equipo de fútbol :lol:
Imagen

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

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

Mensaje por arisma »

alejandro50082 escribió:estan muy buenos pero mira no tengo como hacer mi tarea XD... esq los anteriores los habia echo en la compu de mi colegio..... donde puedo conseguir c..... :oki:
EDITO:
osea si se donde pero cual de los tres es
1.Dev-C++ 5.0 beta 9.2 (4.9.9.2) (9.0 MB) with Mingw/GCC 3.4.2
2.Dev-C++ 5.0 beta 9.2 (4.9.9.2), executable only (2.4 MB)
3.Dev-C++ 5.0 beta 9.2 (4.9.9.2), source code (1.6 MB)
edito2:ya lo encontre esq no habia terminado de ler el primer curso.... xD
Perdon...

1.Dev-C++ 5.0 beta 9.2 (4.9.9.2) (9.0 MB) with Mingw/GCC 3.4.2

Responder