Clase 05

Clase 05

Inicio de la Clase y Tareas

Introducción a las tareas

  • El instructor menciona que se ha enviado una tarea y sugiere que los estudiantes se unan en parejas para realizarla, ya que habrá más tareas cada dos semanas.
  • Se da inicio a la clase número cinco, donde se publicará una tarea en el aula virtual y se discutirán dudas sobre esta.

Objetivos de la clase

  • La meta del día es completar un ejercicio de algoritmo utilizando instrucciones de asignación e introducir condicionales de selección.
  • Se presentan variables involucradas: x, y, z. Se explica cómo deben interactuar estas variables según las especificaciones dadas.

Ejemplo Práctico con Algoritmos

Asignaciones y orden

  • Se discute la importancia del orden en las asignaciones; si no se sigue el correcto, los resultados pueden ser incorrectos.
  • El instructor enfatiza que el tiempo juega un papel crucial en el proceso de asignación; el orden debe garantizar que los valores iniciales sean utilizados correctamente.

Evaluación de expresiones

  • Se plantea cómo calcular efectivamente los valores iniciales antes de realizar nuevas asignaciones para asegurar la validez del algoritmo.
  • Se introduce una expresión para calcular el valor final basado en condiciones previas, destacando la necesidad de mantener un seguimiento del tiempo durante las operaciones.

Ejecución del Algoritmo

Proceso paso a paso

  • El instructor describe cómo ejecutar el algoritmo con valores iniciales simples (1, 2 y 3), observando qué sucede en cada instante temporal.
  • A medida que avanza la ejecución, se observa cómo cambian los valores y cómo afectan al resultado final del algoritmo.

Resultados finales

  • Al finalizar la ejecución, se verifica si las afirmaciones sobre los valores finales son correctas. Los resultados muestran consistencia con lo esperado según las especificaciones iniciales.
  • Se discuten variantes del algoritmo y cómo simplificarlo mediante instrucciones paralelas para mejorar su eficiencia.

Evaluación y Asignación en Algoritmos

Conceptos de Sustitución y Evaluación

  • Se discute cómo las sustituciones en expresiones pueden realizarse en paralelo, permitiendo concentrar varias operaciones en una sola. Esto es posible porque la expresión no depende del valor de y, lo que permite calcularla independientemente.
  • Se presenta una variante del algoritmo donde primero se evalúan todas las expresiones para obtener sus valores antes de hacer la sustitución en memoria.

Proceso de Asignación

  • Es importante entender que los valores asignados a las variables deben ser los iniciales, no los resultados de evaluaciones previas. Por ejemplo, al evaluar 2 * z con z = 3, el resultado debe reflejar el estado original.
  • La lógica detrás de la asignación se basa en que ambas operaciones ocurren simultáneamente, manteniendo el orden correcto entre las variables involucradas.

Ejemplos Prácticos

  • Al evaluar expresiones como x + y con valores iniciales (por ejemplo, 1 + 2), se concluye que x termina valiendo 6 y y vale 3 tras la evaluación correcta.
  • Se enfatiza que siempre se deben usar los valores iniciales para escribir en memoria después de evaluar todas las expresiones. Esto asegura consistencia en el estado final del algoritmo.

Especificaciones y Constantes

  • Se menciona un ejemplo sencillo donde se especifica que el valor final debe cumplir con ciertas condiciones matemáticas. Las constantes no pueden cambiar durante este proceso.
  • La imposibilidad de asignar nuevos valores a constantes es discutida; si algo está declarado como constante, no tiene sentido intentar modificarlo mediante asignaciones.

Sintaxis y Tipos de Variables

  • Para definir una instrucción de asignación correctamente, es necesario identificar los componentes: variables (no constantes), expresiones válidas y su tipo correspondiente.
  • La importancia del tipo de datos es crucial; por ejemplo, si una variable está declarada como entera, cualquier expresión asociada también debe ser del mismo tipo para evitar errores semánticos.

No Determinismo en Expresiones

  • Se aborda el concepto de no determinismo dentro del contexto algorítmico; algunas expresiones pueden llevar a múltiples estados posibles. Sin embargo, este curso prohibirá tales enfoques fuera del uso controlado mediante instrucciones condicionales e iterativas.
  • Finalmente, se establece un marco para declarar variables dentro de un algoritmo junto con sus tipos correspondientes, asegurando claridad sobre qué tipos son aceptables para cada operación o expresión utilizada.

Instrucciones de Asignación y Semántica

Definición de Variables y Expresiones

  • Se utilizan dos variables, lo que implica tener n expresiones. Cada expresión se denota como I, donde I varía desde 1 hasta n.
  • Las variables declaradas son las que se utilizarán para la asignación, diferenciándose de aquellas que solo están declaradas.

Sintaxis de Instrucción de Asignación

  • La instrucción de asignación es una frase del lenguaje SL con un formato específico. Se menciona la indexación doble (I1, I2,... IN).
  • Es importante que las variables sean distintas; no pueden ser iguales en este contexto.

Tipos y Evaluaciones

  • La expresión debe ser del mismo tipo que la variable a la cual se le está asignando el valor.
  • Al evaluar una expresión, su tipo debe coincidir con el tipo de la variable correspondiente. Esto asegura consistencia en las operaciones.

Interpretación Semántica

  • La ejecución de una instrucción produce un estado inicial determinado; cada operación es determinística.
  • Se interpreta como una función que transforma un vector en otro vector, representando un cambio de estado.

Estructura del Algoritmo

  • Un algoritmo comienza con constantes y tipos definidos, seguido por la lista de variables.
  • Las constantes son invariables durante cualquier instrucción; los estados deben reflejar los valores iniciales establecidos.

Cambios en Nombres y Posiciones

  • Se propone cambiar nombres para mayor claridad; por ejemplo, renombrar x a y para simplificar referencias.
  • La posición I1 corresponde a la primera variable evaluada dentro del contexto dado.

Dominio y Espacio de Estados

  • El dominio debe considerarse al establecer funciones; si x es cero, se transita al estado "aborto".
  • Es crucial filtrar expresiones según su dominio para evitar problemas durante la evaluación.

Manejo del Dominio Fuera del Espacio Válido

  • Una expresión siempre actúa como función con un dominio específico; el espacio debe incluir todos los estados válidos.
  • Cuando se sale del dominio permitido, se utiliza una función auxiliar para manejar situaciones fuera del rango esperado.

Dominio y Semántica de Funciones

Conceptos Iniciales sobre Dominio

  • Se introduce el concepto de dominio de una función, que se obtiene al restar su complemento. Esto permite identificar todos los estados posibles en la función.
  • Se explica que la función tiene pares ordenados donde un estado inicial está fuera del dominio definido, lo que implica que hay elementos a considerar en el conjunto.

Ejemplos y Semántica

  • La semántica de la instrucción se presenta como una función de varias variables, donde cualquier elemento fuera del dominio resulta en un aborto. Esto establece las bases para entender cómo funcionan estas instrucciones.
  • Se menciona que el espacio de estado es tridimensional (real por real por real), y se discute cómo las variables cambian dentro de esta estructura.

Interpretación del Dominio

  • El valor cero en la última coordenada (Z) no puede estar presente, lo cual define el dominio como R * R * R sin incluir ese cero.
  • Si se introduce una tupla con un valor cero, esto provocará un aborto. Se enfatiza la importancia de definir correctamente los valores permitidos dentro del dominio.

Análisis Detallado del Espacio de Estados

  • Al eliminar ciertas restricciones, se redefine el dominio para incluir todos los estados posibles, incluyendo aquellos que llevan al aborto. Esto resalta cómo las definiciones pueden variar según el contexto.
  • La discusión gira en torno a cómo las instrucciones son funciones totales dentro del espacio de estados, permitiendo iniciar desde cualquier punto aunque algunos lleven al aborto.

Ejemplos Adicionales y Visualización

  • Se compara la semántica con funciones matemáticas complejas para ilustrar cómo estas instrucciones operan bajo principios similares a los vistos en matemáticas avanzadas.
  • Un ejemplo específico muestra cómo una función puede mapear valores enteros a sus negativos, destacando nuevamente qué valores están excluidos del dominio general.
  • Finalmente, se visualizan puntos específicos dentro del espacio definido por X e Y y se analiza cómo estos interactúan bajo diferentes condiciones post-instrucción.

Ejercicio de Programación: Triángulo Equilátero

Introducción a la Función de Varias Variables

  • Se presenta una función de dos variables, destacando que no hay restricciones en la expresión unida con el abort. Se menciona el espacio estado extendido como contexto para la discusión.

Planteamiento del Ejercicio

  • El ejercicio consiste en programar un algoritmo que calcule las coordenadas de un tercer punto en el plano, formando así un triángulo equilátero junto con dos puntos dados.
  • Se aclara que los puntos iniciales pueden estar dispuestos de tal manera que el tercer punto tenga dos posibles ubicaciones.

Especificaciones del Algoritmo

  • La especificación del algoritmo es ambigua, permitiendo tanto soluciones deterministas como no deterministas. Esto significa que se puede elegir entre las dos posiciones posibles para el tercer punto.
  • Se identifican cuatro variables necesarias: x1, y1 (primer punto), y x2, y2 (segundo punto). Estas representan las coordenadas iniciales.

Cálculo de Distancias

  • Para determinar si los puntos son válidos, se debe asegurar que no estén superpuestos. Esto implica calcular la distancia entre ellos.
  • La fórmula utilizada para calcular la distancia entre dos puntos es mencionada, sugiriendo que debe ser diferente de cero para validar su posición.

Condiciones Post-Ejercicio

  • La condición post-ejercicio establece que todas las distancias entre los tres puntos deben ser iguales para formar un triángulo equilátero.
  • Se discute cómo utilizar variables en lugar de constantes para especificar correctamente las condiciones del triángulo.

Refinamiento y Validación

  • A medida que se avanza en la programación, se enfatiza la necesidad de verificar todas las combinaciones posibles de distancias entre los puntos.
  • Finalmente, se revisa cómo programar estas condiciones y asegurar que todas sean correctas antes de proceder con la implementación final del algoritmo.

¿Cómo calcular el punto medio y la altura de un triángulo?

Introducción a los conceptos básicos

  • Se inicia la explicación sobre el cálculo del punto medio entre dos puntos utilizando conocimientos previos de matemáticas, específicamente de vectores.
  • La fórmula para calcular el punto medio se recuerda: sumar las coordenadas y dividir entre dos.

Cálculo del vector ortogonal

  • Se menciona la necesidad de obtener un vector perpendicular al segmento que forman los dos puntos iniciales.
  • Se explica cómo realizar una traslación del punto medio en una dirección específica para encontrar el vértice del triángulo.

Suma de vectores y su ambigüedad

  • Se discute la ambigüedad en la notación de vectores y puntos, donde ambos pueden representarse con las mismas coordenadas.
  • La suma de vectores se presenta como un método para trasladar un punto en función de otro, enfatizando que esto puede hacerse mediante instrucciones simples.

Cálculo de distancias y alturas

  • Para calcular la altura del triángulo, se establece que es necesario determinar primero la distancia entre los puntos.
  • Se introduce una variable adicional (H) para almacenar esta distancia antes de proceder a cálculos más complejos.

Aplicación del teorema de Pitágoras

  • El teorema de Pitágoras se utiliza para relacionar las distancias entre los catetos y la hipotenusa en el contexto del triángulo equilátero.
  • Se aclara que uno de los catetos es igual a H/2, lo cual es fundamental para resolver el problema geométrico planteado.

Simplificación de la Altura en un Triángulo

Proceso de Despeje y Simplificación

  • Se inicia el proceso despejando una variable, simplificando la expresión a 1 - 1/4, que se convierte en 3/4.
  • La raíz cuadrada se extrae para obtener H, pero se cuestiona si es necesario hacerlo ahora o más tarde.
  • Se discute que al quitar la raíz, el resultado será equivalente a lo que se tenía antes, pero al cuadrado.

Replanteamiento de Variables

  • Se aclara que H representa la altura total y su relación con las variables computacionales.
  • Al replantear, se establece que H^2 en el contexto computacional es simplemente h.
  • El despeje finaliza con solo dejar H, facilitando el algoritmo al evitar múltiples raíces.

Aplicación del Teorema de Pitágoras

  • Se menciona cómo aplicar el teorema para encontrar la hipotenusa y los catetos relacionados con las alturas.
  • La distancia entre dos puntos se relaciona directamente con las variables utilizadas en cálculos previos.

Cálculo del Punto Medio

  • Para calcular el punto medio, se utiliza la fórmula (X_1 + X_2)/2.
  • Se considera si ciertas variables serán necesarias más adelante en los cálculos.

Definición y Cálculo de Vectores

  • Se introduce la necesidad de un vector director perpendicular a una longitud dada.
  • La resta de vectores geométricamente define cómo obtener un vector entre dos puntos.

Determinación de Ortogonalidad

  • Para verificar si dos vectores son ortogonales, se utiliza el producto punto; debe ser igual a cero.
  • Un ejemplo práctico muestra cómo asignar valores a coordenadas para cumplir con esta condición ortogonal.

Cálculo de un Vector Ortogonal y su Traslación

Proceso de Cálculo del Vector

  • Se inicia el cálculo de la diferencia entre dos puntos en el plano, donde se requiere calcular x_1 - x_2 y y_1 - y_2 para establecer las coordenadas del vector.
  • Se menciona la necesidad de almacenar valores en memoria para utilizar posteriormente, especificando que las coordenadas se asignan a X3 y Y3.
  • El proceso implica restar los valores correspondientes para obtener las coordenadas del vector ortogonal, destacando que este vector debe ser ajustado correctamente.
  • Se establece que el nuevo vector tiene que tener una relación ortogonal con respecto al original, lo cual es crucial para el cálculo posterior.
  • La traslación del vector debe ser proporcional a su tamaño real; se enfatiza la importancia de multiplicar por un valor específico para mantener la norma adecuada.

Normalización y Ajuste del Vector

  • Para ajustar el tamaño del vector a una longitud específica h, es necesario normalizarlo primero. Esto implica dividir cada componente por su norma.
  • Se aclara que este algoritmo solo funciona bajo ciertas condiciones (por ejemplo, cuando y_1 neq y_2), sugiriendo la implementación de instrucciones condicionales si no se cumple esta precondición.
  • La modificación necesaria en el algoritmo incluye agregar condiciones adicionales para manejar casos especiales donde los valores son iguales o cero.
  • Se propone simplificar cálculos ajustando el valor de h, facilitando así la normalización del vector resultante.
  • El cálculo de la norma se realiza utilizando la raíz cuadrada de la suma de los cuadrados de sus componentes, asegurando que sea igual a uno antes de escalarlo por h.

Traslado Final y Resultados

  • Al multiplicar cada componente normalizado por h, se obtiene un vector con las dimensiones deseadas. Este paso es esencial para asegurar que el resultado final cumpla con los requisitos geométricos establecidos.
  • Una vez obtenido el nuevo vector, se procede a calcular el punto medio entre dos puntos iniciales sumando sus coordenadas adecuadamente.
  • El resultado final consiste en trasladar un punto hasta una nueva posición utilizando las coordenadas calculadas previamente, formando así un triángulo equilátero con los puntos dados.
  • Es importante destacar cómo visualmente se representa este proceso: aunque parece que los vectores están desplazados, realmente comienzan desde el origen en términos matemáticos.
  • Finalmente, se discuten limitaciones adicionales sobre qué hacer si ciertos valores son iguales o cero durante los cálculos, sugiriendo ajustes necesarios en las instrucciones condicionales.

Solución Empírica y Vectores Ortogonales

Derivación de la Solución

  • El orador menciona que si un vector es cero, implica que los puntos y_1 y y_2 son iguales, lo que significa que están en la misma línea.
  • Se discute cómo obtener un vector ortogonal de norma uno cuando los puntos son iguales. Se pregunta sobre las coordenadas de un vector con estas características.

Instrucciones Condicionales

  • Se introduce una instrucción condicional: si y_1 es distinto de y_2, se aplica un procedimiento específico; en caso contrario, se presentan las coordenadas para el vector ortogonal.

Optimización del Algoritmo

  • El orador sugiere que algunos pasos previos son innecesarios si se puede simplificar el proceso a un solo paso para lograr la norma uno del vector.
  • Se menciona la importancia de incluir condiciones previas (guardias) en el algoritmo para asegurar su correcto funcionamiento. Además, se anticipa que mañana trabajarán con instrucciones de texto en el laboratorio.
Video description

Ejemplos de programas usando la instrucción de asignación y noción intuitiva de secuenciación Definición formal de la semántica de la instrucción de asignación Ejemplos complementarios sobre la semántica de la instrucción de asignación Programa para calcular el tercer vértice de un triángulo equilátero dado dos vértices Introducción a la instrucción de selección