Lunes 22 de Marzo

La asignación

Objetivos: Temas:


Solución de la ecuación de 2do. grado

    // Lectura de a, b y c (todos double)
    ...
    // Cálculo de las raíces
    double b24ac= b*b - 4*a*c;
    if (b24ac>=0) {
      print("Las raíces son ");
      print( (-b+sqrt(b24ac))/(2*a) );
      print( (-b-sqrt(b24ac))/(2*a) );
    } 
    else
      println("La ecuación tiene soluciones imaginarias");
Obs.: también se puede escribir:

      print( (-b+sqrt(b24ac))/2/a );
pero no:

      print( (-b+sqrt(b24ac))/2*a ); // Malo
      print( -b+sqrt(b24ac)/2/a );   // Malo

La instrucción de asignación

Motivación: desplegar el máximo entre a, b y c, sin usar max.

    print("El máximo es ");
    if (a>b)
      if (a>c)
        print(a);
      else
        print(c);
    else
      if (b>c)
        print(b);
      else
        print(c);
No es necesario colocar las { }, porque un if es una instrucción compuesta (que se construye a partir de una o más instrucciones).

Problema: El programa que entrega el máximo de 4 o 5 números, podría ser demasiado grande.

La asignación

Una variable se llama así porque se puede cambiar su valor, de la misma forma que se puede cambiar el valor de una memoria en una calculadora. Por ejemplo:

    double x= 2*radio;
    println(x);
    x= radio*radio;
    println(x);
Cuando el valor de radio es 4.0, este programa despliega:

    8.0
    16.0
En el programa se usa una sola variable x. La variable toma dos valores distintos durante la ejecución del programa (primero 8. y luego 16.).

Sintaxis de la asignación:

``variable'' = ``expresión'';

Se diferencia de una declaración en que ``variable'' ha sido declarada previamente y en que no se indica nuevamente su tipo.

Semántica:

Primero se evalúa la ``expresión'', y luego, su resultado se asigna a ``variable'', es decir se almacena en la variable.

Obs.: no se puede declarar dos veces la misma variable:

    double x= 2*radio;
    double x= radio*radio; // ¡error!

Declaración sin inicialización

Al declarar una variable no es necesario darle un valor inicial. El programa anterior se puede reescribir como:

    double x;
    x= 2*radio;
    println(x);
    ...
Obs.: en general no se puede usar una variable a la cual no se le ha dado todavía un valor.

Ejercicio: calcular el máximo entre a y b y dejarlo en max, sin usar la función max(..)

    // Las variables a y b han sido declaradas previamente
    int max;
    if (a>b)
      max= a;
    else
      max= b;
    println(max);
Al desplegar max, es seguro que tiene algún valor.

Obs.: el siguiente programa es inválido porque se declara dos veces la variable max:

    if (a>b)
      int max= a;
    else
      int max= b;
    println(max);

Ejecución condicional sin else

En ocasiones, no hay nada que poner en la parte else. Entonces se puede suprimir. El problema anterior se puede reescribir como:

    int max= b;
    if (a>max)
      max= a;
    println(max);
(Si lo que sobra es la parte verdadera, se da vuelta la condición.)

Ejercicio: calcular el máximo entre a, b y c.

    int max= a;
    if (b>max)
      max= b;
    if (c>max)
      max= c;
    println(max);
Propuesto: el máximo entre a, b, c, d y e.


Ejercicio: El programa confuso

(en clases)

Indique qué despliega el siguiente programa:

    int a = 4;
    int b = 10;
    int d = 7;

    d = b - 2;              println(d);
    a = d - (3 + b);        println(a);
    b = 1 + a*2-1;          println(b);
    a = d - b;              println(a);
    d= b - a;               println(d);
    int e = a+(d-b);        println(e);