Estructuras de control, arrays y funciones

Repaso de programación: control de flujo, tipos de saltos, memoria en ejecución (stack y heap), búsqueda binaria, vectores y diseño con funciones.

Fundamentos de Programación · Universidad Politécnica de Cataluña · Grado en Ingeniería Informática · 1.º curso

14 páginas · 3 temas · 6 flashcards · 12 preguntas tipo test

Índice

  1. Estructuras y abstracción de control de flujo · p. 3-5
  2. Estructuras de datos: vectores, ordenación y cadenas · p. 5-8
  3. Funciones, abstracción funcional y memoria de ejecución · p. 8-13

Estructuras y abstracción de control de flujo

Flashcards

¿Qué registro de la máquina se actualiza para ejecutar un salto de control?
El contador de programa (PC, Program Counter).
¿En qué se distingue un salto condicional de una llamada a subrutina?
El salto condicional desvía la ejecución si se satisface una condición sin asegurar un regreso automático, mientras que la subrutina ejecuta un bloque externo y retorna obligatoriamente al punto de llamada.

Preguntas tipo test

  1. ¿Cuál es la función del contador de programa (PC) en el flujo de ejecución?
    • a) Indicar cuántas variables globales existen
    • b) Guardar la dirección de la siguiente instrucción
    • c) Almacenar el valor devuelto por funciones
    • d) Determinar la capacidad máxima de memoria RAM

    Respuesta: b) Guardar la dirección de la siguiente instrucción. El PC contiene la dirección de memoria que apunta a la siguiente instrucción a procesar.

  2. ¿Qué caracteriza a la ejecución en el paradigma de programación estructurada?
    • a) Es puramente aleatoria
    • b) Sigue un avance secuencial por defecto
    • c) Requiere siempre saltos incondicionales
    • d) Nunca permite bifurcar condiciones

    Respuesta: b) Sigue un avance secuencial por defecto. Las órdenes se procesan de forma secuencial salvo que intervenga una estructura de control.

  3. ¿Qué ventaja aporta la abstracción de control frente al código máquina?
    • a) Garantiza la portabilidad entre arquitecturas computacionales
    • b) Impide definir tipos de datos primitivos
    • c) Elimina el uso de bucles iterativos
    • d) Aumenta el consumo de memoria estática

    Respuesta: a) Garantiza la portabilidad entre arquitecturas computacionales. Permite escribir programas portables sin depender de las particularidades del procesador físico.

Estructuras de datos: vectores, ordenación y cadenas

Flashcards

¿Por qué los arrays no pueden cambiar su capacidad en ejecución?
Porque se definen con un tamaño fijo y ocupan bloques contiguos de memoria ya reservados.
¿Qué marca el final de una cadena de texto en memoria?
El carácter especial nulo backslash 0.

Preguntas tipo test

  1. ¿Cómo se almacenan físicamente los elementos de un vector en memoria?
    • a) Únicamente en el montículo dinámico
    • b) Repartidos en registros del procesador
    • c) En posiciones de memoria contiguas
    • d) En bloques dispersos y desordenados

    Respuesta: c) En posiciones de memoria contiguas. Los componentes de un vector residen obligatoriamente de forma consecutiva en la memoria.

  2. ¿Qué delimitador señala el final de una cadena de caracteres?
    • a) El carácter ' \n \n \n '
    • b) El carácter '#'
    • c) El valor numérico -1
    • d) El carácter especial '\0'

    Respuesta: d) El carácter especial '\0'. El símbolo '\0' indica la terminación de una cadena dentro de un vector de caracteres.

  3. ¿Qué paso inicial realiza el algoritmo de búsqueda binaria?
    • a) Comprobar el elemento de la mitad
    • b) Intercambiar las posiciones extremas
    • c) Recorrer secuencialmente desde el inicio
    • d) Duplicar el tamaño del array

    Respuesta: a) Comprobar el elemento de la mitad. Comienza evaluando la posición central para descartar una de las dos mitades.

Funciones, abstracción funcional y memoria de ejecución

Flashcards

¿Cuáles son las fases que debe cumplir el diseñador de una función?
La declaración y la definición.
¿Qué estructura de gestión temporal sigue la pila (Stack) de llamadas?
Sigue una organización LIFO (Last In, First Out).

Preguntas tipo test

  1. ¿Qué función actúa como punto de arranque en la ejecución del programa?
    • a) La función principal main()
    • b) La primera función declarada
    • c) Cualquier rutina que use la pila
    • d) El bloque con datos estáticos

    Respuesta: a) La función principal main(). El flujo de ejecución arranca invariablemente en la función main().

  2. ¿Qué área de memoria gestiona directamente el programador?
    • a) La memoria de variables locales
    • b) La pila (Stack)
    • c) El contador de programa
    • d) El montículo (Heap)

    Respuesta: d) El montículo (Heap). El montículo contiene la memoria dinámica que el programador gestiona.

  3. ¿Qué modelo describe una función que oculta su funcionamiento interno?
    • a) Memoria estática
    • b) Caja negra
    • c) Salto condicional
    • d) Vector multidimensional

    Respuesta: b) Caja negra. El concepto de caja negra refleja conocer las entradas y salidas sin ver el interior.

Y 0 flashcards y 3 preguntas más en el documento.

Texto del documento

APUNTES FUNDAMENTOS DE PROGRAMACIÓN Grado en Ingeniería Informática Universidad Politécnica de Cataluña AprenAI 2026-2027 Repaso de programación: control de flujo, tipos de saltos, memoria en ejecución (stack y heap), búsqueda binaria, vectores y diseño con funciones.

APREN.AI Índice 1 Estructuras y abstracción de control de flujo Abstracción de control y código máquina Mecanismos y tipos de saltos 2 Estructuras de datos: vectores, ordenación y cadenas Algoritmos de ordenación y búsqueda Vectores multidimensionales Cadenas de caracteres 3 Funciones, abstracción funcional y memoria de ejecución Abstracción funcional y ciclo de vida Flujo de ejecución del programa Organización de la memoria en tiempo de ejecución (Run-time storage) 4 Resumen para repasar Control de flujo y ejecución Arrays y cadenas Funciones y memoria Soluciones de las preguntas de repaso Estos apuntes pueden contener errores u omisiones.

Son un material de apoyo y no sustituyen al temario oficial ni al profesorado: contrasta la información importante. Estructuras de control, arrays y funciones 1 1 Estructuras y abstracción de control de flujo AL ACABAR SABRÁS Comprender la diferencia entre ejecución secuencial y alteración del flujo de control. Explicar el papel del contador de programa (PC) en la ejecución de instrucciones de salto. Diferenciar las distintas modalidades de salto en un lenguaje de programación. PIÉNSALO ANTES DE LEER 1 ¿Cómo sabe la CPU cuál es la siguiente orden a ejecutar si el programa contiene decisiones lógicas?

En el paradigma imperativo y estructurado, la ejecución de las órdenes sigue un orden secuencial. Cada sentencia se procesa una tras otra en el orden en que fue escrita en el código fuente. Las estructuras de control de flujo rompen esta linealidad. Permiten alterar el rumbo del programa y saltar entre distintas instrucciones según ciertas condiciones lógicas predeterminadas. Abstracción de control y código máquina A nivel de arquitectura de computadores, el control de flujo opera modificando directamente el contador de programa (PC). En el procesador, este registro determina la dirección de memoria de la siguiente instrucción a ejecutar.

La abstracción que proporcionan los lenguajes de alto nivel aporta dos ventajas directas: Evita que el desarrollador tenga que gestionar las instrucciones de bifurcación de la arquitectura interna (por ejemplo, los cinco tipos presentes en RISC) o sus modos de direccionamiento. Consigue que los programas resulten portables entre distintas plataformas. El propósito esencial consiste en gobernar estrictamente el recorrido de las órdenes facilitando el diseño algorítmico al programador.

Mecanismos y tipos de saltos El comportamiento dinámico del código se clasifica según la naturaleza del desvío realizado: Mecanismo de control Descripción operativa Salto incondicional Bifurcación directa hacia una instrucción determinada sin comprobar ninguna condición previa. Salto condicional Ejecución de un bloque de sentencias únicamente cuando se verifica una condición concreta. Bucle Reiteración de un grupo de instrucciones mientras se continúe cumpliendo una condición definida.

Estructuras de control, arrays y funciones 2 Mecanismo de control Descripción operativa Subrutina (llamada y retorno) Salto hacia la ejecución de un subprograma y posterior retorno al punto original de invocación. Parada del programa Finalización completa de la ejecución de las sentencias del software. ERROR FRECUENTE Asumir que el contador de programa avanza siempre de forma secuencial. Las bifurcaciones y llamadas actualizan el valor de PC hacia una dirección distinta a la contigua. COMPRUEBA 2 ¿Cómo altera una instrucción de control el flujo de cómputo en el procesador? IDEAS CLAVE La ejecución por defecto en programación estructurada e imperativa es secuencial.

A nivel de hardware, el flujo de ejecución se gestiona mediante el contador de programa (PC). Los lenguajes de alto nivel proporcionan abstracción sobre los modos de direccionamiento y las instrucciones de salto de la máquina. Existen saltos incondicionales, saltos condicionales, iteraciones mediante bucles y llamadas con retorno a subrutinas. COMPRUEBA LO QUE HAS APRENDIDO 3. ¿Qué registro de la máquina se actualiza para ejecutar un salto de control? 4. ¿En qué se distingue un salto condicional de una llamada a subrutina? Test Rodea la respuesta correcta. Las soluciones están al final. 5. ¿Cuál es la función del contador de programa (PC) en el flujo de ejecución?

Indicar cuántas variables globales existen a) Guardar la dirección de la siguiente instrucción b) Almacenar el valor devuelto por funciones c) Determinar la capacidad máxima de memoria RAM d) Estructuras de control, arrays y funciones 3 6. ¿Qué caracteriza a la ejecución en el paradigma de programación estructurada? 7. ¿Qué ventaja aporta la abstracción de control frente al código máquina? 8. ¿Cómo se define un bucle en el control de flujo? 2 Estructuras de datos: vectores, ordenación y cadenas AL ACABAR SABRÁS Definir las restricciones de memoria y dimensión de los vectores. Distinguir el funcionamiento de la búsqueda lineal frente a la búsqueda binaria.

Identificar el formato de almacenamiento de las cadenas de caracteres. PIÉNSALO ANTES DE LEER 9 ¿Por qué una búsqueda binaria es más rápida que una búsqueda lineal en un array grande? Un vector o array es una estructura de datos homogénea que reúne un conjunto fijo de elementos del mismo tipo. Se accede a cada celda de forma directa a través de un índice numérico que indica su posición relativa. En el mapa de memoria del sistema, todos los componentes del array se disponen de forma contigua. RESTRICCIÓN ESTRUCTURAL DE LOS VECTORES Poseen un tamaño fijo establecido durante su definición. Por tanto, no pueden crecer ni disminuir de dimensión durante el tiempo de ejecución.

Es puramente aleatoria a) Sigue un avance secuencial por defecto b) Requiere siempre saltos incondicionales c) Nunca permite bifurcar condiciones d) Garantiza la portabilidad entre arquitecturas computacionales a) Impide definir tipos de datos primitivos b) Elimina el uso de bucles iterativos c) Aumenta el consumo de memoria estática d) Salto definitivo que detiene la máquina a) Invocación única sin punto de retorno b) Lectura consecutiva de posiciones dispersas c) Repetición de sentencias mientras se cumpla una condición d) Estructuras de control, arrays y funciones 4 Algoritmos de ordenación y búsqueda El tratamiento sistemático de los elementos de un array requiere técnicas específicas para su localización y reordenación: Ordenación por burbuja: examina pares adyacentes comparando cada elemento con su siguiente inmediato, e intercambia sus posiciones cuando se encuentran en orden incorrecto.

Búsqueda lineal: inspecciona las posiciones de manera consecutiva; requiere mayor tiempo de ejecución al recorrer potencialmente toda la estructura. Búsqueda binaria: examina el elemento central situado en la mitad de la estructura. Según el resultado, descarta una mitad completa y reitera la partición sucesivamente. Vectores multidimensionales Los arrays admiten múltiples dimensiones para organizar datos en tablas o matrices de coordenadas: DECLARACIÓN MULTIDIMENSIONAL Una estructura multidimensional puede representarse con varias dimensiones anidadas, como en la declaración de tipo carácter: Esquema de distribución de memoria en un vector multidimensional.

char vector[2][3][4][3] Estructuras de control, arrays y funciones 5 Cadenas de caracteres Una cadena de caracteres se define técnicamente como un vector unidimensional de caracteres. Presenta como peculiaridad distintiva que su último elemento útil concluye con el delimitador de fin de cadena \0. ERROR FRECUENTE Olvidar reservar espacio para el carácter nulo terminal ( ) al dimensionar un array destinado a almacenar una cadena de caracteres. COMPRUEBA 10 ¿En qué principio se basa la búsqueda binaria sobre un array?

PROCESO Búsqueda binaria en un vector 1 Examinar punto medio Acceder al elemento central del vector 2 Descartar mitad Desechar la sección que no con tiene el valor 3 Repetir búsqueda Aplicar el procedimiento en el tramo restante IDEAS CLAVE Un vector agrupa datos del mismo tipo en posiciones continuas de memoria. El tamaño de un array es estático: no puede expandirse ni contraerse tras su creación. El método de la burbuja intercambia elementos consecutivos desordenados. La búsqueda binaria descarta mitades sucesivas a partir del elemento central. Las cadenas son arrays de caracteres cuyo final está marcado por '\0'. COMPRUEBA LO QUE HAS APRENDIDO 11.

¿Por qué los arrays no pueden cambiar su capacidad en ejecución? 12. ¿Qué marca el final de una cadena de texto en memoria? Test Rodea la respuesta correcta. Las soluciones están al final. 13. ¿Cómo se almacenan físicamente los elementos de un vector en memoria? \0 Únicamente en el montículo dinámico a) Repartidos en registros del procesador b) En posiciones de memoria contiguas c) En bloques dispersos y desordenados d) Estructuras de control, arrays y funciones 6 14. ¿Qué delimitador señala el final de una cadena de caracteres? 15. ¿Qué paso inicial realiza el algoritmo de búsqueda binaria? 16. ¿Cómo procede el método de ordenación por burbuja?

3 Funciones, abstracción funcional y memoria de ejecución AL ACABAR SABRÁS Comprender el concepto de abstracción modular mediante funciones. Identificar las tres fases de vida de una función: declarar, definir e invocar. Diferenciar las áreas de almacenamiento en tiempo de ejecución: datos estáticos, pila y montículo. PIÉNSALO ANTES DE LEER 17 ¿Por qué un programa puede pausar una función para ejecutar otra y luego recordar exactamente por dónde iba? Una función es un bloque de código con un identificador único. De manera optativa, recibe valores de entrada llamados parámetros o argumentos, y genera opcionalmente un valor de salida o retorno.

Funciona bajo la perspectiva de caja negra: se conoce el resultado que produce pero se abstrae el detalle interno de su implementación. Abstracción funcional y ciclo de vida La abstracción funcional se vincula al diseño descendente. Consiste en descomponer problemas complejos en subproblemas simples que se materializan en funciones aisladas.

Para utilizar cualquier función se requiere completar tres etapas técnicas: El carácter ' ' a) \n El carácter '#' b) El valor numérico -1 c) El carácter especial '\0' d) Comprobar el elemento de la mitad a) Intercambiar las posiciones extremas b) Recorrer secuencialmente desde el inicio c) Duplicar el tamaño del array d) Divide el array por la mitad a) Elimina valores duplicados del vector b) Intercambia cada elemento con el siguiente c) Busca siempre la posición central d) Estructuras de control, arrays y funciones 7 PARA RECORDARLO Las funciones no almacenan valores por sí mismas: su papel consiste exclusivamente en procesar, recibir o generar información.

Flujo de ejecución del programa El control del procesamiento sigue un ciclo jerárquico estricto: Organización de la memoria en tiempo de ejecución (Run-time storage) El almacenamiento propio de un programa se estructura en tres zonas especializadas: Segmento de memoria Características y propósito Datos estáticos Contiene las variables globales y aquellas definidas como static. Pila (Stack) Soporta la ejecución activa de funciones mediante una estructura LIFO (Last In, First Out), combinando elementos estáticos y dinámicos. Montículo (Heap) Espacio de memoria dinámica reservado y administrado directamente por el programador.

PROCESO Flujo de invocación de funciones 1 Inicio en main() Comienza la ejecu ción del programa 2 Invocación Llamada a la subfun ción y salto de flujo 3 Ejecución subfunción Procesamiento del bloque de código invocado 4 Retorno Regreso a la función llamadora y continuación Declaración: tarea del diseñador que expone la firma del subprograma. 1 Definición: tarea del diseñador donde se implementa el cuerpo del código. 2 Invocación (llamada): realizada por el usuario o módulo que requiere su ejecución. 3 La ejecución inicia en el punto de entrada principal: la función . 1 main() Las sentencias de control internas gobiernan el avance de las instrucciones.

2 Al invocar una subfunción, el flujo abandona la rutina actual y ejecuta la nueva. 3 Tras finalizar la llamada, el control retorna al punto original y continúa la ejecución contigua. 4 Estructuras de control, arrays y funciones 8 ERROR FRECUENTE Confundir la pila (Stack) con el montículo (Heap). La pila atiende el orden de llamadas a funciones mediante política LIFO, mientras que el montículo aloja memoria dinámica gestionada manualmente. COMPRUEBA 18 ¿En qué orden se apilan y desapilan los contextos de llamada de las funciones en el Stack? IDEAS CLAVE Una función actúa como una caja negra: define entradas y salidas sin exponer su lógica interna.

El ciclo técnico de una función comprende declaración, definición y llamada. La ejecución siempre parte de main() y suspende su contexto al saltar a subfunciones. La memoria en tiempo de ejecución se divide en datos estáticos, pila (Stack) y montículo (Heap). COMPRUEBA LO QUE HAS APRENDIDO 19. ¿Cuáles son las fases que debe cumplir el diseñador de una función? 20. ¿Qué estructura de gestión temporal sigue la pila (Stack) de llamadas? Test Rodea la respuesta correcta. Las soluciones están al final. 21. ¿Qué función actúa como punto de arranque en la ejecución del programa? 22. ¿Qué área de memoria gestiona directamente el programador? 23.

¿Qué modelo describe una función que oculta su funcionamiento interno? La función principal main() a) La primera función declarada b) Cualquier rutina que use la pila c) El bloque con datos estáticos d) La memoria de variables locales a) La pila (Stack) b) El contador de programa c) El montículo (Heap) d) Memoria estática a) Caja negra b) Salto condicional c) Vector multidimensional d) Estructuras de control, arrays y funciones 9 24. ¿Qué principio de acceso rige la pila (Stack) durante la ejecución?

4 Resumen para repasar Control de flujo y ejecución Concepto Definición Ejecución secuencial Procesamiento por defecto donde las instrucciones se ejecutan en el mismo orden en que fueron escritas. Contador de programa (PC) Registro del procesador modificado por las instrucciones de salto para determinar la siguiente instrucción a ejecutar. Salto incondicional Bifurcación directa hacia una instrucción sin evaluar ninguna condición. Salto condicional Ejecución de un bloque de sentencias supeditada a que se cumpla una condición. Bucle Reiteración de un bloque de instrucciones mientras se cumpla una condición determinada.

Llamada a subrutina Salto a la ejecución de un subprograma con retorno garantizado al punto de llamada. Arrays y cadenas Concepto Definición Vector (array) Estructura contigua en memoria de tamaño fijo que almacena elementos del mismo tipo accesibles mediante índice. Ordenación por burbuja Algoritmo que compara elementos adyacentes y los intercambia si no están ordenados. Búsqueda lineal Recorrido secuencial posición a posición con mayor coste de tiempo. Búsqueda binaria Inspección del elemento central descartando la mitad no válida de forma reiterativa. Cadena de caracteres Vector unidimensional de caracteres terminado con el delimitador especial .

Búsqueda binaria indexada a) Primero en entrar, primero en salir b) Último en entrar, primero en salir c) Acceso aleatorio d) \0 Estructuras de control, arrays y funciones 10 Funciones y memoria Concepto Definición Función Bloque de código identificado que opera como caja negra, recibiendo argumentos y devolviendo un valor de retorno de forma opcional. Declaración y definición Etapas diseñadas por el programador para fijar la cabecera y el cuerpo del subprograma antes de su invocación. Datos estáticos Segmento del espacio de memoria que almacena variables globales y estáticas. Pila (Stack) Estructura LIFO que gestiona la ejecución y contexto de las llamadas a funciones.

Montículo (Heap) Zona de memoria dinámica gestionada directamente por el programador. Estructuras de control, arrays y funciones 11 Soluciones de las preguntas de repaso 1. Mediante el contador de programa (PC), cuyo valor cambia secuencialmente o se actualiza hacia otra dirección de memoria cuando ocurre un salto. 2. Modificando el registro contador de programa (PC) para apuntar a la dirección de la siguiente instrucción que debe ejecutarse. 3. El contador de programa (PC, Program Counter). 4.

El salto condicional desvía la ejecución si se satisface una condición sin asegurar un regreso automático, mientras que la subrutina ejecuta un bloque externo y retorna obligatoriamente al punto de llamada. 5. b) Guardar la dirección de la siguiente instrucción. El PC contiene la dirección de memoria que apunta a la siguiente instrucción a procesar. 6. b) Sigue un avance secuencial por defecto. Las órdenes se procesan de forma secuencial salvo que intervenga una estructura de control. 7. a) Garantiza la portabilidad entre arquitecturas computacionales. Permite escribir programas portables sin depender de las particularidades del procesador físico. 8.

d) Repetición de sentencias mientras se cumpla una condición. Un bucle itera un conjunto de órdenes subordinado a la evaluación de una condición. 9. Porque en lugar de revisar cada celda una a una, comprueba el centro y elimina la mitad de los elementos pendientes en cada iteración. 10. En evaluar el elemento situado en la mitad y descartar la mitad sobrante en cada paso, repitiendo el proceso recursivamente o en bucle. 11. Porque se definen con un tamaño fijo y ocupan bloques contiguos de memoria ya reservados. 12. El carácter especial nulo . 13. c) En posiciones de memoria contiguas. Los componentes de un vector residen obligatoriamente de forma consecutiva en la memoria. 14.

d) El carácter especial '\0'. El símbolo '\0' indica la terminación de una cadena dentro de un vector de caracteres. 15. a) Comprobar el elemento de la mitad. Comienza evaluando la posición central para descartar una de las dos mitades. 16. c) Intercambia cada elemento con el siguiente. Compara cada celda con su sucesora directa y las intercambia si no están en orden. 17. Porque almacena el punto de retorno y el contexto local en la pila de ejecución (Stack), recuperándolos al finalizar la subfunción. 18. Mediante una disciplina LIFO (último en entrar, primero en salir), donde la última función llamada es la primera en terminar y liberarse. 19. La declaración y la definición. 20.

Sigue una organización LIFO (Last In, First Out). 21. a) La función principal main(). El flujo de ejecución arranca invariablemente en la función main(). 22. d) El montículo (Heap). El montículo contiene la memoria dinámica que el programador gestiona. \0 Estructuras de control, arrays y funciones 12 23. b) Caja negra. El concepto de caja negra refleja conocer las entradas y salidas sin ver el interior. 24. c) Último en entrar, primero en salir. La pila funciona según la regla LIFO (Last In, First Out). Estructuras de control, arrays y funciones 13

Más apuntes de Fundamentos de Programación

Exámenes, temas y apuntes de Fundamentos de Programación