quiz Informática · 21 preguntas

Fundamentos de algoritmos y estructuras de control

help_outline 21 preguntas
timer ~11 min
auto_awesome Generado por IA
0 / 21
Puntuación : 0%
1

¿Cuál es la diferencia fundamental entre la estructura repetitiva WHILE y la estructura REPEAT en cuanto al momento de evaluación de la condición?

2

En el algoritmo de cambio de foco fundido, ¿qué capacidad elemental del robot permite que el paso 5 "Obtener foco de repuesto" sea ejecutado sin necesidad de buscar manualmente el foco adecuado?

3

Si se declara una variable en Lazarus como "var mensaje: string[10];" y luego se asigna "mensaje := 'programación';", ¿qué ocurrirá?

4

En la sentencia CASE del ejemplo de medallas, ¿qué ocurre si la variable "puesto" tiene el valor 7?

5

¿Cuál es la característica esencial que distingue a una constante de una variable en Lazarus?

6

En el algoritmo "CAMBIAR FOCO FUNDIDO", ¿por qué el paso 3 "Repe­rir Subir un peldaño hasta alcanzar el foco" se repite antes de girar el foco a la izquierda?

7

¿Qué operador lógico se utiliza en Lazarus para combinar dos condiciones en una sentencia IF?

8

Al usar la función "pos" en una cadena, ¿qué valor se devuelve si la subcadena buscada no se encuentra?

9

En la sentencia FOR "for i := 1 to 10 do", ¿qué ocurre si dentro del bucle se modifica la variable de control "i"?

10

¿Cuál es la consecuencia de declarar una variable sin inicializar en Lazarus antes de usarla en una operación aritmética?

11

En la estructura de selección IF…THEN…ELSE, ¿qué ocurre si la condición es falsa y no se incluye la cláusula ELSE?

12

¿Qué operador aritmético se utiliza en Lazarus para obtener el resto de una división entera?

13

Al usar la función "copy(cad1, 9,5)" ¿qué parte de la cadena original se extrae?

14

En el contexto de algoritmos, ¿qué se entiende por "ciclo repetitivo"?

15

¿Cuál es la diferencia entre la longitud física y la longitud lógica de una cadena en Lazarus?

16

En la sentencia "while cont <= 10 do if aux <> cont then", ¿qué tipo de operador relacional se usa para comparar "cont" con 10?

17

Si se declara "var aux: integer;" y luego se intenta asignar "aux := 'texto';", ¿qué error se producirá?

18

En la definición de una variable tipo STRING sin especificar longitud, ¿cuál es el tamaño máximo que se reserva por defecto?

19

¿Qué ocurre si se llama a la función "delete(cad1, 3, 2)" cuando la cadena "cad1" tiene solo dos caracteres?

20

En el proceso de diseño de un algoritmo, ¿qué paso se describe como "identificar los datos erróneos"?

21

¿Cuál es la ventaja principal de la modularidad en la programación según el texto?

menu_book

Fundamentos de algoritmos y estructuras de control

Repasa los conceptos clave antes del quiz

Fundamentos de algoritmos y estructuras de control

En el mundo de la programación y el desarrollo de algoritmos, comprender las estructuras de control es esencial para crear soluciones eficientes y mantenibles. Este curso aborda los conceptos clave que aparecen en el cuestionario, ofreciendo explicaciones detalladas, ejemplos prácticos y buenas prácticas para programadores que utilizan Lazarus (Pascal) y para quienes diseñan algoritmos para robots.

Estructuras repetitivas: WHILE vs REPEAT

Los bucles permiten ejecutar un bloque de código varias veces. En Pascal existen dos construcciones principales: while y repeat…until. La diferencia fundamental radica en el momento de evaluación de la condición:

  • WHILE: la condición se evalúa antes de entrar al cuerpo del bucle. Si la condición es falsa desde el inicio, el cuerpo nunca se ejecuta.
  • REPEAT…UNTIL: el cuerpo se ejecuta al menos una vez y la condición se verifica después de cada iteración. El bucle termina cuando la condición se vuelve verdadera.

Ejemplo práctico:

var i: integer;
begin
  i := 0;
  while i < 5 do
  begin
    writeln('while i = ', i);
    i := i + 1;
  end;

  i := 0;
  repeat
    writeln('repeat i = ', i);
    i := i + 1;
  until i = 5;
end.

En el primer bucle, si i fuera mayor o igual a 5 al inicio, no se imprimiría nada. En el segundo, siempre se imprimirá al menos una línea.

Algoritmo de cambio de foco fundido en robots

El algoritmo "CAMBIAR FOCO FUNDIDO" ilustra cómo un robot puede realizar una tarea compleja mediante pasos secuenciados. Uno de los puntos críticos es el paso 5: "Obtener foco de repuesto". La capacidad elemental que permite ejecutar este paso sin búsqueda manual es la conocimiento previo de la ubicación del foco de repuesto. El robot está programado con la información exacta de dónde se encuentra la caja que contiene focos idénticos al que lleva en su brazo, por lo que puede ir directamente a esa posición y tomar un foco nuevo.

Este tipo de memoria estática o mapa interno es común en sistemas robóticos industriales, donde la eficiencia depende de minimizar la interacción humana.

Razón del paso 3: subir un peldaño antes de girar el foco

El paso 3 se repite hasta que el robot alcanza la altura del foco. Solo cuando está a la misma altura puede girar el foco a la izquierda sin riesgo de colisión o de perder el agarre. Subir un peldaño garantiza que la fuerza de torque se aplique correctamente y que el robot mantenga el equilibrio.

Manejo de cadenas en Lazarus: string[10]

En Pascal, la declaración var mensaje: string[10]; crea una cadena corta con capacidad máxima de 10 caracteres. Cuando se asigna mensaje := 'programación';, la cadena tiene 12 caracteres. El compilador no genera un error; en su lugar, trunca la cadena a los primeros 10 caracteres, quedando mensaje = 'programaci'. Esta característica permite ahorrar memoria, pero requiere que el programador controle la longitud de los textos.

Para evitar pérdidas de datos, se pueden usar String (cadena larga) o validar la longitud antes de la asignación:

if Length('programación') <= 10 then
  mensaje := 'programación'
else
  mensaje := Copy('programación', 1, 10);

Sentencia CASE y rangos en Pascal

La sentencia CASE permite seleccionar entre múltiples ramas según el valor de una variable. En el ejemplo de medallas, se define un rango 6..200. Si la variable puesto vale 7, la ejecución entra en esa rama y muestra "Medalla de FINISHER". Los rangos simplifican el código y evitan enumerar cada valor individualmente.

Si el valor no coincide con ningún rango ni con la cláusula else, el compilador genera un error de rango. Por eso es buena práctica incluir siempre una rama else que maneje casos inesperados.

Diferencias entre constantes y variables en Lazarus

Una constante se declara con la palabra reservada const y su valor es inmutable después de la compilación. En cambio, una variable se declara con var y su contenido puede modificarse en tiempo de ejecución. Esta distinción es crucial para:

  • Garantizar la integridad de datos que no deben cambiar (por ejemplo, valores de configuración).
  • Optimizar el uso de memoria, ya que las constantes pueden ser almacenadas en la sección de código.

Ejemplo:

const PI = 3.1416;
var radio, area: real;
begin
  radio := 5;
  area := PI * Sqr(radio);
end.

Intentar asignar un nuevo valor a PI provocará un error de compilación.

Operadores lógicos en sentencias IF

En Pascal, el operador lógico que combina dos condiciones en una sentencia IF es AND. Este operador devuelve true solo cuando ambas expresiones son verdaderas. Otros operadores lógicos incluyen OR y NOT, pero para la combinación estricta de dos condiciones se utiliza AND.

Ejemplo:

if (edad >= 18) AND (ciudad = 'Madrid') then
  writeln('Acceso permitido');

Función pos en manejo de cadenas

La función pos(subcadena, cadena) devuelve la posición (1‑based) donde aparece la subcadena dentro de la cadena. Si la subcadena no se encuentra, la función devuelve 0. Este comportamiento permite escribir condicionales simples:

if pos('error', mensaje) > 0 then
  writeln('Se detectó la palabra "error"');

El valor 0 indica ausencia total, mientras que cualquier número positivo indica la posición del primer carácter encontrado.

Conclusión y buenas prácticas

Dominar las estructuras de control y los conceptos básicos de Lazarus es fundamental para cualquier programador que aspire a desarrollar algoritmos robustos y eficientes. Recuerda:

  • Elegir el bucle adecuado (while vs repeat) según si necesitas una ejecución garantizada al menos una vez.
  • Utilizar rangos en CASE para simplificar la lógica y evitar errores de rango.
  • Ser consciente de la longitud de las string[n] y aplicar truncamiento o validación cuando sea necesario.
  • Declarar constantes con const para proteger valores críticos y mejorar la legibilidad.
  • Combinar condiciones con AND para mayor precisión en decisiones lógicas.
  • Interpretar el valor de retorno de pos correctamente para detectar la presencia o ausencia de subcadenas.

Aplicando estos principios, podrás diseñar algoritmos claros, optimizados para SEO y fáciles de mantener, tanto en entornos de desarrollo de software como en la programación de robots industriales.

Deja de subrayar.
Empieza a aprender.

Únete a los estudiantes que ya han generado más de 50.000 quizzes en Quizly. Es gratis para empezar.