Academia.eduAcademia.edu

Programación I - Clase 11 - Ciclo Lectivo 2023

2023, Programación I - Clase 11 - Ciclo Lectivo 2023

Presentación utilizada para el dictado de clases de la materia "Programación I" de la "Tecnicatura Superior en Programación". UTN Facultad Regional San Nicolás. Extensión áulica Chivilcoy.

Programación I Lucas Mesas Tabares CLASE 11 Lucas Mesas Tabares - http://utn.academia.edu/LucasMesasTabares - [email protected] 303 Temas del programa Temas de esta clase: ➢ Control del Programa ○ goto ○ break ○ continue ➢ Manejo de Variables ○ Conversiones de Tipos ○ Clases de Almacenamiento Lucas Mesas Tabares - http://utn.academia.edu/LucasMesasTabares - [email protected] 304 Programación I - Clase 11 Manejo de variables: (21 palabras) Lenguaje “C” Resumen con lo visto hasta ahora Reglas: Signos: ➢ ➢ ➢ ➢ Palabras claves / reservadas Operadores Delimitadores Puntuación ➢ ➢ ➢ ➢ ➢ ➢ ➢ ➢ Sintaxis Control de flujo Estructuración Precedencia Asociatividad Alcance Estilo Promoción Control de programa: (11 palabras) Selección Simple: if / else Especificadores de Tipo: char double float int Modificadores de Tipo: long short signed unsigned “Tipos” Especiales: void enum Calificadores de Tipo: const volatile Selección Múltiple: switch / case / default Clases de Almacenamiento: auto extern register static Repetición: for while / do Tipos de Datos Derivados: struct typedef union Enunciados Modificadores: break continue goto Operadores: return Lucas Mesas Tabares - http://utn.academia.edu/LucasMesasTabares - [email protected] sizeof 305 Programación I - Control del Programa Enunciado modificador goto ➢ El resultado del enunciado goto es una modificación en el flujo de control del programa. ➢ Es una “bifurcación” incondicional: permite al programador especificar una transferencia de control a cualquier punto posible, dentro de un programa. ➢ La ejecución del programa continúa en el primer enunciado inmediatamente después de la etiqueta especificada en el enunciado goto. ➢ Una etiqueta es un identificador seguido por dos puntos. ➢ Debe de aparecer una etiqueta en la misma función que en el enunciado goto que se refiere a ella. Lucas Mesas Tabares - http://utn.academia.edu/LucasMesasTabares - [email protected] 306 Programación I - Control del Programa Enunciado modificador goto ✓ La noción de lo que se conoce como programación estructurada se convirtió prácticamente en sinónimo de "eliminación de goto". ➢ Las etiquetas son los únicos identificadores con alcance de función. ➢ Las etiquetas pueden ser utilizadas en cualquier parte dentro de la función en la cual aparecen, pero no pueden ser referenciadas fuera del cuerpo de la función. Lucas Mesas Tabares - http://utn.academia.edu/LucasMesasTabares - [email protected] 307 Programación I - Control del Programa Enunciado modificador break ➢ La sentencia break termina la ejecución de un bucle, de una sentencia switch, y en general de cualquier sentencia. Lucas Mesas Tabares - http://utn.academia.edu/LucasMesasTabares - [email protected] 308 Programación I - Control del Programa Enunciado modificador continue ➢ La sentencia continue hace que la ejecución de un bucle, vuelva a la cabecera del bucle. ➢ La sentencia continue hace que cuando se ejecuta, se salten todas las sentencias que vienen a continuación, y comienza una nueva iteración si se cumple la condición del bucle. Lucas Mesas Tabares - http://utn.academia.edu/LucasMesasTabares - [email protected] 309 Programación I - Control del Programa Comparación entre break y continue Lucas Mesas Tabares - http://utn.academia.edu/LucasMesasTabares - [email protected] 310 Programación I - Manejo de Variables Conversiones de Tipos ➢ Con frecuencia, se necesita convertir un valor de un tipo a otro sin cambiar el valor que representa. ➢ Las conversiones de tipos pueden ser implícitas (ejecutadas automáticamente) o explícitas (solicitadas específicamente por el programador). ➢ C hace muchas conversiones de tipos automáticamente: ✓ Cuando se asigna un valor de un tipo a una variable de otro tipo. ✓ Cuando se combinan tipos mixtos en expresiones. ✓ Cuando se pasan argumentos a funciones. Lucas Mesas Tabares - http://utn.academia.edu/LucasMesasTabares - [email protected] 311 Programación I - Manejo de Variables Conversión Implícita ➢ Los tipos fundamentales (básicos) pueden ser mezclados libremente en asignaciones y expresiones. ➢ Las conversiones se ejecutan automáticamente: los operandos de tipo más bajo se convierten en los de tipo más alto. Lucas Mesas Tabares - http://utn.academia.edu/LucasMesasTabares - [email protected] 312 Programación I - Manejo de Variables Reglas de Conversión Implícita ➢ Si cualquier operando es de tipo char, short o enum se convierte en tipo int. ➢ Si los operandos tienen diferentes tipos, la siguiente lista determina a qué operación convertirá: int unsigned int long unsigned long float double ➢ El tipo que viene primero en esta lista se convierte en el que viene segundo. ➢ Esta operación se llama promoción integral. Lucas Mesas Tabares - http://utn.academia.edu/LucasMesasTabares - [email protected] 313 Programación I - Manejo de Variables Conversión Explícita ➢ C fuerza la conversión explícita de tipos mediante el operador de molde (cast). ➢ El operador molde tiene el formato: (nombretipo) valor; (float) i; (int) 3.4; (int*) malloc(2*16); ➢ Con lo cual el valor se convierte en un dato de tipo nombretipo. ➢ El operador molde (tipo, cast) tiene la misma prioridad que otros operadores unitarios tales como +, - y !. precios = (int)19.99 + (int)11.99; Lucas Mesas Tabares - http://utn.academia.edu/LucasMesasTabares - [email protected] 314 BREAK ✓ 10 minutos Lucas Mesas Tabares - http://utn.academia.edu/LucasMesasTabares - [email protected] 315 Programación I - Manejo de Variables Calificador de tipo volatile ➢ El calificador de tipo volatile se aplica a una definición de una variable que se puede alterar desde el exterior del programa (es decir, la variable no está completamente bajo el control del programa). ➢ El compilador no puede realizar optimizaciones (como agilizar la ejecución del programa, o reducir el consumo de memoria, por ejemplo) que dependan en “saber que el comportamiento de una variable está influenciado sólo por las actividades del programa que el compilador puede observar”. ➢ Debido a que el valor puede cambiar inesperadamente, el compilador recargará el valor cada vez desde la memoria. ✓ Un entero volatile puede ser declarado de estas dos maneras: int volatile x; volatile int x; Lucas Mesas Tabares - http://utn.academia.edu/LucasMesasTabares - [email protected] 316 Programación I - Manejo de Variables Calificador de tipo volatile Las variables volatile no son optimizadas, lo cual puede ser muy útil. A primera vista, el código anterior parece ser un bucle infinito. El compilador puede intentar optimizarlo dejándolo de esta manera: Para evitar que el compilador lleve a cabo esa optimización, podemos indicarle que esperamos que esa variable pueda ser modificada por algún otro elemento del sistema. Para esto utilizamos el calificador volatile del siguiente modo: Pero con ese cambio el código se convierte, efectivamente, en un bucle infinito. Sin embargo, podría ser que alguna operación externa escribiese un 0 en la posición de memoria de la variable Opcion y de esa manera se podría salir del bucle. Lucas Mesas Tabares - http://utn.academia.edu/LucasMesasTabares - [email protected] 317 Programación I - Manejo de Variables Clases de Almacenamiento ➢ El ámbito o alcance de una variable determina cuáles son las funciones que reconocen ciertas variables. ➢ Si una función reconoce una variable, la variable es visible en esa función. ➢ El ámbito es la zona de un programa en la que es visible una variable. ➢ Existen cuatro tipos de ámbitos: programa, archivo fuente, función y bloque. ➢ Se puede designar una variable para que esté asociada a uno de estos ámbitos. ➢ Tal variable es invisible fuera de su ámbito y sólo se puede acceder a ella en su ámbito. ➢ Normalmente la posición de la sentencia en el programa determina el ámbito. ➢ Los especificadores de clases de almacenamiento, auto, extern, register, static, permiten modificar el ámbito de una variable. Lucas Mesas Tabares - http://utn.academia.edu/LucasMesasTabares - [email protected] 318 Programación I - Manejo de Variables Variables Automáticas ➢ Las variables locales de las funciones no existen en memoria hasta que se ejecuta la función. ➢ Esta propiedad permite ahorrar memoria, ya que permite que varias funciones compartan la misma memoria para sus variables locales (pero no a la vez). ➢ Las variables que se declaran dentro de una función se dice que son automáticas (auto), significando que se les asigna espacio en memoria automáticamente a la entrada de la función y se les libera el espacio tan pronto se sale de dicha función. ➢ La palabra reservada auto es opcional. ➢ Normalmente no se especifica la palabra auto. Lucas Mesas Tabares - http://utn.academia.edu/LucasMesasTabares - [email protected] 319 Programación I - Manejo de Variables Variables Externas ➢ A veces se presenta el problema de que una función necesita utilizar una variable que otra función inicializa. ➢ Como las variables locales sólo existen temporalmente mientras se está ejecutando su función, no pueden resolver el problema. ➢ Se soluciona haciendo que una función de un archivo de código fuente utilice una variable definida en otro archivo. ➢ Una solución es declarar la variable local con la palabra reservada extern. ➢ Cuando una variable se declara extern, se indica al compilador que el espacio de la variable está definida en otro lugar. ➢ En el archivo extern2.c la declaración externa de Opcion indica al compilador que Opcion se ha definido en otra parte (archivo). ➢ Posteriormente, cuando estos archivos se enlacen, las declaraciones se combinan de modo que se referirán a las mismas posiciones de memoria. Lucas Mesas Tabares - http://utn.academia.edu/LucasMesasTabares - [email protected] extern.c extern2.c 320 Programación I - Manejo de Variables extern2.c Variables Externas ➢ Al contrario que las variables, las funciones son externas por defecto. ➢ Es preciso considerar la diferencia entre definición de una función y declaración. ➢ Si una declaración de variable comienza con la palabra reservada extern, no se considera definición de variable. ➢ Sin esta palabra reservada es una definición. ➢ Cada definición de variable es al mismo tiempo una declaración de variable. extern.c Lucas Mesas Tabares - http://utn.academia.edu/LucasMesasTabares - [email protected] 321 Programación I - Manejo de Variables Variables Registro ➢ Precediendo a la declaración de una variable con la palabra reservada register, se sugiere al compilador que la variable se almacene en uno de los registros hardware del microprocesador. ➢ La familia de microprocesadores 80x86 no tiene muchos registros hardware de reserva, por lo que el compilador puede decidir ignorar sus sugerencias. ➢ Una variable register debe ser local a una función, nunca puede ser global al programa completo. ➢ El uso de la variable register no garantiza que un valor se almacene en un registro. Esto sólo sucederá si existe un registro disponible. ➢ Si no existen registros suficientes, C ignora la palabra reservada register y crea la variable localmente como ya se conoce. La palabra register es una sugerencia al compilador y no una orden. Una aplicación típica de una variable registro es como variable de control de un bucle. Guardando la variable de control de un bucle en un registro, se reduce el tiempo que la CPU requiere para buscar el valor de la variable de la memoria. Lucas Mesas Tabares - http://utn.academia.edu/LucasMesasTabares - [email protected] 322 Programación I - Manejo de Variables Variables Registro ➢ La familia de microprocesadores 80x86 no tiene muchos registros hardware de reserva, por lo que el compilador puede decidir ignorar sus sugerencias. ➢ Si no existen registros suficientes, C ignora la palabra reservada register y crea la variable localmente como ya se conoce. BUS DE DATOS VONSIM CPU MEMORIA UNIDAD DE ENTRADA / SALIDA Simulador de microprocesador BUS DE DIRECCIONES BUS DE CONTROL Lucas Mesas Tabares - http://utn.academia.edu/LucasMesasTabares - [email protected] 323 Programación I - Manejo de Variables Variables Estáticas ➢ Las variables estáticas son opuestas, en su significado, a las variables automáticas. ➢ Las variables estáticas no se borran (no se pierde su valor) cuando la función termina y, en consecuencia, retienen sus valores entre llamadas a una función. ➢ Al contrario que las variables locales normales, una variable static se inicializa sólo una vez. ➢ Se declaran precediendo a la declaración de la variable con la palabra reservada static. Lucas Mesas Tabares - http://utn.academia.edu/LucasMesasTabares - [email protected] 324 Programación I - Clase 11 Manejo de variables: (21 palabras) Lenguaje “C” Resumen con lo visto hoy Reglas: Signos: ➢ ➢ ➢ ➢ Palabras claves / reservadas Operadores Delimitadores Puntuación ➢ ➢ ➢ ➢ ➢ ➢ ➢ ➢ Sintaxis Control de flujo Estructuración Precedencia Asociatividad Alcance Estilo Promoción Control de programa: (11 palabras) Selección Simple: if / else Especificadores de Tipo: char double float int Modificadores de Tipo: long short signed unsigned “Tipos” Especiales: void enum Calificadores de Tipo: const volatile Selección Múltiple: switch / case / default Clases de Almacenamiento: auto extern register static Repetición: for while / do Tipos de Datos Derivados: struct typedef union Enunciados Modificadores: break continue goto Operadores: return Lucas Mesas Tabares - http://utn.academia.edu/LucasMesasTabares - [email protected] sizeof 325 Bibliografía Programación en C Metodología, algoritmos y estructura de datos Luis Joyanes Aguilar - Ignacio Zahonero Martinez SEGUNDA EDICIÓN Editorial Mc Graw Hill Cracking the Coding Interview 189 Programming Questions & Solutions Gayle Laakmann McDowell SIXTH EDITION CareerCup, LLC, Palo Alto, CA Lucas Mesas Tabares - http://utn.academia.edu/LucasMesasTabares - [email protected] 326 Programación I - Ejercicio de Práctica ¿Cuáles de las siguientes afirmaciones son verdaderas y cuáles son falsas? 1) Las variables locales se llaman también automáticas o auto. A. Todas son verdaderas. B. Solo las afirmaciones 5) y 3) son verdaderas. C. Solo las afirmaciones 5) y 2) son falsas. D. Solo las afirmaciones 5), 3) y 6) son falsas. E. 5) Una variable auto es aquella que tiene una duración automática. Solo las afirmaciones 3), 4) y 6) son verdaderas. F. 6) Una variable global no puede ser una variable auto. Solo las afirmaciones 1) y 5) son verdaderas. G. Todas son falsas. 2) Las variables locales se crean automáticamente en la entrada a la función. 3) Las variables locales se liberan automáticamente cuando se termina la ejecución de la función. 4) Los especificadores de clases de almacenamiento static, extern, auto y register, pueden afectar al ámbito. Lucas Mesas Tabares - http://utn.academia.edu/LucasMesasTabares - [email protected] 327 Presentaciones de las clases Disponibles en ACADEMIA http://utn.academia.edu/LucasMesasTabares Lucas Mesas Tabares - http://utn.academia.edu/LucasMesasTabares - [email protected] 328 Y eso es todo… ¡por ahora! Gracias Lucas Mesas Tabares http://utn.academia.edu/LucasMesasTabares [email protected] Lucas Mesas Tabares - http://utn.academia.edu/LucasMesasTabares - [email protected] 329