Ejercicios resueltos en C if then else condicionales. Par o impar. Ecuación cuadrática. Paradojas. (CU00530F)

Resumen: Entrega nº30 del tutorial "Curso básico de programación en lenguaje C desde cero".
Codificación aprenderaprogramar.com: CU00530F

 

 

EJERCICIO NÚMERO 1: ENUNCIADO

Para practicar el uso de condicional if … else en C vamos a desarrollar una serie de ejercicios resueltos. El primer ejercicio plantea lo siguiente:

Transformar en código el siguiente pseudocódigo, relativo a determinar la naturaleza par o impar de un número. Nota: El procedimiento a emplear será basado en el uso del operador módulo, %.

logo lenguaje programacion C

 

Pseudocódigo aludido:

1.  Inicio [Pseudocódigo aprenderaprogramar.com]

2.  Mostrar “Introduzca un número” : Pedir Num

3.  Res = Num mod 2

4.  Si Res = 0 Entonces

Mostrar “El número es par”

SiNo

Mostrar “El número es impar”

     FinSi

5.  Fin

 

 

SOLUCIÓN

Todas las instrucciones y operadores necesarios las hemos visto en apartados anteriores. Pueden utilizarse los nombres de variable que se estimen oportunos (no tienen por qué coincidir con lo que ponemos aquí).

#include <stdio.h>
#include <stdlib.h>

// Ejercicios resueltos aprenderaprogramar.com
int main() {
    int Num; int Res;
    printf("Programa para determinar naturaleza par o impar de un numero\n\n");
    printf ("Introduzca un numero entero: ");
    scanf ("%d", &Num);
    Res = Num%2;
    if (Res==0) {
        printf ("El numero es par\n");
    } else {
        printf ("El numero es impar\n");
    }
    return 0;
}

 

 

Un resultado de ejecución puede ser similar a este:

consola c codeblocks windows

 

 

Hemos escrito el if ...  – else como un bloque (usando llaves) en vez de en línea. El motivo para ello es que aporta mayor claridad y facilidad de interpretación.

Recomendamos que los nombres de variables comiencen con una letra minúscula, pero como podemos comprobar no es obligatorio. Normalmente los programadores siguen ciertas pautas o normas a la hora de poner nombres a las variables. Una de ellas es la llamada norma “camelCase” basada en comenzar con una minúscula e introducir una mayúscula con cada cambio de palabra. Por ejemplo: numeroDeCoches ó diasDeFiestaLocal.

 

 

EJERCICIO NÚMERO 2: ENUNCIADO

Se quiere crear un programaque resuelva la ecuación cuadrática tipo ax2 + bx + c. Para ello se ha estudiado el problema, que se ha planteado en pseudocódigo. Transformar el pseudocódigo que se muestra a continuación en código C y comprobar que el programa obtiene los resultados esperados para una serie de casos de prueba.

1.  Inicio [Pseudocódigo aprenderaprogramar.com]

2.  [Resolución de ecuación cuadrática ax2 + bx + c = 0]

3.  Mostrar “Introduzca los valores de parámetros”

4.  Pedir a, b, c

5.  d = b ^ 2 -4 * a * c : e = 2 * a

6.  Si d = 0 Entonces

Mostrar “x1 = x2 =”, -b / e

SiNo

Si d > 0 Entonces

Mostrar “x1 =”, (-b + SQR(d)) / e

Mostrar “x2 =”, (-b -SQR(d)) / e

SiNo

Mostrar “x1 =”, -b / e, “+”, SQR(-d) / e, “i”

Mostrar “x2 =”, -b / e, “-”, SQR(-d) / e, “i”

FinSi

FinSi

7.  Fin

 

 

EJERCICIO NÚMERO 2: SOLUCIÓN

#include <stdio.h>
#include <stdlib.h>
#include <math.h>

// Ejercicios resueltos aprenderaprogramar.com
int main() {
    //Declaración de variables
    double a, b, c, d, e;
    printf("Programa para calcular ecuacion cuadratica tipo a*x^2 + b*x + c = 0\n\n");
    //Obtención de datos
    printf ("Introduzca valor parametro a: ");     scanf ("%lf", &a);
    printf ("Introduzca valor parametro b: ");     scanf ("%lf", &b);
    printf ("Introduzca valor parametro c: ");     scanf ("%lf", &c);
    //Cálculo y muestra de resultados
    d = pow (b,2) - 4 * a * c;     e = 2 * a;
    if (d == 0) { printf ("El resultado es x1 = x2 =%lf", - b / e);
    } else {
        if (d > 0) {
            printf ("El resultado es:\n");
            printf ("x1 = %lf \n", (-b + sqrt(d)) / e);
            printf ("x2 = %lf \n", (-b - sqrt(d)) / e);
        } else {
            printf ("El resultado es: \n");
            printf ("x1 = %lf + %lf * i \n", -b / e, sqrt(-d)/e);
            printf ("x2 = %lf - %lf * i \n", -b / e, sqrt(-d)/e);
        }
    }
    return 0;
}

 

 

El programa "funciona", si bien tiene sus limitaciones. Prueba a introducir los siguientes datos:   a = 0,   b = 3 y c = 1 . Te aparecerá un error o resultado erróneo similar a: "El resultado es: x1 = -1.#IND00 x2 = -1.#INF00". Efectivamente, a = 0 implica que e = 0 y al encontrarnos con una operación del tipo  (-b + sqrt(d)) / edonde el denominador vale cero... ¡error y se acabó! Mejor dicho, "se acabó" mientras no preparemos el programa para detectar este tipo de situaciones, cosa que como veremos más adelante se puede hacer, o diríamos más, sería aconsejable hacer.

Estamos construyendo programas sencillos que en líneas generales responden bien cuando se dan las circunstancias previstas pero que pueden fallar ante situaciones extrañas. Esto no debe preocuparnos por el momento, ya que nos estamos centrando en la lógica y algoritmia básica de la programación. A medida que progresemos como programadores deberíamos ser capaces de mejorar nuestros planteamientos. Igualmente, deberemos complementar nuestra formación en áreas como el tratamiento  y gestión de errores (excepciones o circunstancias no controladas).

Un ejemplo de ejecución del programa sería el siguiente:

Programa para calcular ecuacion cuadratica tipo a*x^2 + b*x + c = 0

Introduzca valor parametro a: -3

Introduzca valor parametro b: 1

Introduzca valor parametro c: 2

El resultado es: x1 = -0.666667 x2 = 1.000000

 

 

PARADOJA DEL SI BURLADO POR UN INTERVALO

Prueba los siguientes códigos a los que denominaremos versión 1 y versión 2:

Versión 1:

#include <stdio.h>
#include <stdlib.h>
int main() {
    int A; A=160;
    if (50<A<75 ) {
        printf ("Arabia\n");
    } else {
        printf ("Eusebio\n");
    }
    return 0;
}

 

Versión 2:

#include <stdio.h>
#include <stdlib.h>
int main() {
    int A; A=160;
    if (A>50 && A<75 ) {
        printf ("Arabia\n");
    } else {
        printf ("Eusebio\n");
    }
    return 0;
}

 

 

Si bien podría esperarse “con sentido matemático” obtener el mismo resultado con ambos códigos, al ejecutar la versión 1 obtenemos un error del tipo “aviso: las comparaciones como 'X<=Y<=Z' no tienen su significado matemático [-Wparentheses]”, mientras que en la versión 2 se muestra "Eusebio". La razón: C no admite comparaciones dobles del tipo x < y < z. Ante este tipo de escritura, obtendremos un error. Por tanto debemos recordar que aunque existen similitudes no todas las expresiones matemáticas son directamente trasladables a un lenguaje de programación.

 

 

EJERCICIO

Un else puede ir seguido de un if dando lugar a lo que se conoce como una estructura else if. Un if seguido de if else equivale a decir “Si ocurre esto … haz esto … y si no comprueba si ocurre esto otro … Se pueden añadir tantos else if como se desee (y finalmente puede haber un else para contemplar el caso de que no se cumpla ninguna de las condiciones). Estudia este código y responde a las cuestiones indicadas más abajo:

#include <stdio.h>
// Ejercicios aprenderaprogramar.com
int main () {
   /* local variable definition */
   int a = 100;
   if( a == 10 ) {
      printf("Value of a is 10\n" );
   }
   else if( a == 20 ) {
      printf("Value of a is 20\n" );
   }
   else if( a == 30 ) {
      printf("Value of a is 30\n" );
   }
   else {
      printf("None of the values is matching\n" );
   }
   printf("Exact value of a is: %d\n", a );
   return 0;
}

 

 

a) Describe qué es lo que hace este programa detalladamente.

b) ¿Cuál es el resultado si definimos a con valor 20? ¿Cuál es el resultado si definimos a con valor 30? ¿Cuál es el resultado si definimos a con valor 40?

c) Elimina el último else que aparece en el código. ¿Cuál es el resultado ahora si definimos a con valor 20? ¿Cuál es el resultado ahora si definimos a con valor 30? ¿Cuál es el resultado ahora si definimos a con valor 40? ¿Por qué obtenemos ahora estos resultados?

Para comprobar si tus respuestas son correctas puedes consultar en los foros aprenderaprogramar.com.

 

 

 

 

 

 

Para acceder a la información general sobre este curso y al listado completo de entregas pulsa en este link:  Ver curso completo.

Para  hacer un comentario o consulta utiliza los foros aprenderaprogramar.com, abiertos a cualquier persona independientemente de su nivel de conocimiento.

Donar o colaborar

Este sitio se mantiene abierto gracias al apoyo de muchas personas. Si crees que merece la pena apoyar económicamente este sitio web puedes realizar una donación o colaborar. Contacta con nosotros.

¿Puedo yo aprender?

Seas o no del área informática, si quieres aprender a programar te ofrecemos una solución guiada y personalizada: realizar un curso tutorizado on-line. Con este tipo de curso, podrás aprender a programar de forma ágil y amena.

Acceder a detalles y precios de los cursos tutorizados on-line

Política sobre cookies

Utilizamos cookies propias y de terceros para ofrecerte una mejor experiencia y servicio, de acuerdo a tus hábitos de navegación.

Si continúas navegando, consideramos que aceptas su uso. Puedes obtener más información en nuestra Política de Cookies.

En Facebook!

Ahora puedes seguirnos en Facebook. Noticias, novedades y mucho más ¡Te esperamos!

RANKING APR2+

Ranking de lenguajes y entornos de programación aprenderaprogramar.com
 

SEPTIEMBRE - OCTUBRE 2017

1. Java / J2EE
2. Entornos Oracle
3. Entornos SQL Server
4. .NET, C#
5. JavaScript, jQuery
6. HTML, CSS
7. Php, MySql
8. Android, iOS


Acceder a detalles sobre el ranking de programación aprenderaprogramar.com

FOROS APR2+

Pregunta, responde, consulta, lee, intercambia...

Participa!!! Entra en los foros aprenderaprogramar.com.

             Copyright 2006-2017 aprenderaprogramar.com                La web abierta a cualquier persona interesada en la programación