quiz Programación · 23 preguntas

Fundamentos de algoritmos y programación

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

¿Cuál es la característica esencial que diferencia a una estructura de repetición "while" de una "repeat"?

2

En el algoritmo para cambiar un foco fundido, ¿qué paso debe repetirse hasta que el foco esté suelto?

3

¿Cuál de los siguientes enunciados describe mejor la diferencia entre una variable y una constante en Lazarus?

4

Si se declara "var mensaje: string[10];" y luego se asigna "mensaje := 'esto es un ejemplo';", ¿qué ocurrirá?

5

En la sentencia CASE del ejemplo de medallas, ¿qué rango de posiciones produce la salida "Medalla de LATA"?

6

¿Cuál es la función de la sentencia "INSERT" en la manipulación de strings en Lazarus?

7

En el proceso de programación, ¿qué fase sigue inmediatamente después del diseño del algoritmo?

8

¿Cuál de los siguientes operadores en Lazarus se utiliza para la concatenación de strings?

9

Si una variable "aux" es de tipo integer y se intenta asignarle "aux := 'texto';", ¿qué ocurre?

10

En la definición de un algoritmo, ¿por qué es importante que los pasos sean "simples, claros y exactos"?

11

¿Cuál es la salida de la función "pos('es', cad1)" si "cad1" contiene la cadena "hoy es jueves"?

12

En el algoritmo de cambio de foco, ¿qué capacidad elemental del robot permite que el paso "Obtener foco de repuesto" sea ejecutado sin mayor detalle?

13

¿Cuál es la diferencia principal entre una "estructura de datos" y una "operación primitiva elemental" en la composición de un programa?

14

En la sentencia IF "if (aux<>cont) AND (cont<=10) then", ¿qué ocurre si "aux" es igual a "cont" pero "cont" es 5?

15

¿Qué propiedad de un programa garantiza que pueda ejecutarse en diferentes entornos sin modificaciones significativas?

16

En el contexto de bucles, ¿qué garantiza que una estructura "repeat...until" se ejecute al menos una vez?

17

¿Cuál es la salida esperada de la función "length(cad1)" si "cad1" contiene "hoy es jueves"?

18

En la fase de "Mantenimiento del programa", ¿qué acción típica se realiza?

19

¿Qué instrucción de Lazarus permite mostrar una ventana emergente con un mensaje al usuario?

20

En la sentencia CASE, ¿qué palabra clave se utiliza para manejar valores que no coinciden con ningún selector explícito?

21

Si se desea ejecutar una acción exactamente 5 veces, ¿qué estructura de bucle es la más apropiada?

22

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

23

En el contexto de programación estructurada, ¿qué se entiende por "modularidad"?

menu_book

Fundamentos de algoritmos y programación

Repasa los conceptos clave antes del quiz

Introducción a los fundamentos de algoritmos y programación

Este curso está diseñado para reforzar los conceptos clave que aparecen en el cuestionario Fundamentos de algoritmos y programación. Cada sección aborda una pregunta del examen, ofreciendo explicaciones detalladas, ejemplos prácticos y buenas prácticas para que puedas dominar tanto la teoría como su aplicación en Lazarus y otros entornos de desarrollo.

Estructuras de repetición: while vs repeat

Una de las diferencias esenciales entre los bucles while y repeat radica en el momento en que se evalúa la condición.

  • while: la condición se verifica antes de ejecutar el bloque de instrucciones. Si la condición es falsa desde el inicio, el cuerpo del bucle nunca se ejecuta.
  • repeat (también llamado do...while en algunos lenguajes): el cuerpo se ejecuta al menos una vez y la condición se evalúa al final del ciclo.

Esta característica hace que repeat sea útil cuando necesitas garantizar una ejecución mínima, por ejemplo, al solicitar datos al usuario hasta que la entrada sea válida.

Ejemplo en Pascal:

var
  i: Integer;
begin
  i := 0;
  while i < 5 do
  begin
    WriteLn('Iteración while: ', i);
    i := i + 1;
  end;

  i := 0;
  repeat
    WriteLn('Iteración repeat: ', i);
    i := i + 1;
  until i = 5;
end.

Algoritmo para cambiar un foco fundido

Los algoritmos cotidianos, como cambiar un foco, siguen una lógica secuencial que puede representarse mediante diagramas de flujo o pseudocódigo. En el caso del foco, el paso que se repite hasta que el foco quede suelto es:

  • Girar el foco a la izquierda hasta que salga.

Este paso se repite porque, dependiendo del tipo de casquillo, puede requerir varios giros para liberarlo completamente. Un pseudocódigo sencillo sería:

REPETIR
  girar_foco_izquierda();
 HASTA que foco_suelto = VERDADERO;

En la práctica, siempre se recomienda cortar la corriente antes de manipular cualquier elemento eléctrico.

Diferencia entre variable y constante en Lazarus

En el lenguaje Pascal, y por extensión en el IDE Lazarus, la distinción entre variables y constantes es fundamental:

  • Una variable (var) puede cambiar su valor durante la ejecución del programa.
  • Una constante (const) mantiene el mismo valor a lo largo de toda la vida del programa; su valor se define en tiempo de compilación y no puede modificarse en tiempo de ejecución.

Ejemplo:

const
  PI = 3.1416;
var
  radio, area: Real;
begin
  radio := 5;
  area := PI * radio * radio; // PI no cambia
  radio := 7; // variable, se puede modificar
end.

Entender esta diferencia ayuda a escribir código más seguro y legible, evitando modificaciones accidentales de valores que deben permanecer fijos.

Gestión de cadenas con longitud limitada

Cuando declaras una cadena con una longitud máxima, como var mensaje: string[10];, el compilador reserva espacio solo para diez caracteres. Si intentas asignar una cadena más larga, el comportamiento típico es truncar la cadena a la longitud permitida.

En el ejemplo dado, la asignación mensaje := 'esto es un ejemplo'; producirá que solo se almacenen los diez primeros caracteres, es decir, "esto es un". Los caracteres restantes se pierden sin generar error de compilación, aunque algunos compiladores pueden emitir una advertencia.

Para evitar pérdidas de datos, es recomendable:

  • Utilizar string sin límite explícito cuando la longitud sea variable.
  • Validar la longitud de la entrada antes de asignarla.
  • Emplear funciones como Copy o SetLength para ajustar la cadena a la capacidad disponible.

Sentencia CASE y rangos de posiciones

La sentencia CASE permite seleccionar entre múltiples opciones basándose en el valor de una expresión. En el ejemplo de medallas, el rango que produce la salida "Medalla de LATA" corresponde a las posiciones 4 y 5.

Ejemplo simplificado:

case posicion of
  1,2: WriteLn('Medalla de ORO');
  3:   WriteLn('Medalla de PLATA');
  4,5: WriteLn('Medalla de LATA');
  else WriteLn('Sin medalla');
end;

Este tipo de estructura es útil para reemplazar largas cadenas de if...else y mejorar la legibilidad del código.

Función INSERT para manipular strings

En Lazarus, la función INSERT se utiliza para insertar una subcadena en una posición específica de otra cadena.

Su sintaxis es:

INSERT(subcadena, cadena_destino, posición);

Ejemplo práctico:

var
  texto: string;
begin
  texto := 'Hola Mundo';
  INSERT('Beautiful ', texto, 6); // Resultado: 'Hola Beautiful Mundo'
  WriteLn(texto);
end.

Conocer esta función permite construir dinámicamente mensajes, generar reportes o modificar datos de forma eficiente.

Fases del proceso de programación

Después de diseñar el algoritmo, la fase que sigue inmediatamente es la codificación del programa. En esta etapa, el algoritmo se traduce a un lenguaje de programación concreto (por ejemplo, Pascal en Lazarus) mediante la escritura de código fuente.

El flujo típico del proceso de desarrollo es:

  1. Definición del problema.
  2. Análisis y diseño del algoritmo.
  3. Codificación (escritura del código).
  4. Pruebas y depuración.
  5. Mantenimiento y evolución.

Saltarse la codificación o intentar probar sin haberla completado suele generar errores de lógica y pérdida de tiempo.

Operador de concatenación de strings en Lazarus

En Pascal, el operador que permite concatenar dos cadenas de texto es el signo +. Por ejemplo:

var
  saludo, nombre, mensaje: string;
begin
  saludo := 'Hola ';
  nombre := 'Ana';
  mensaje := saludo + nombre; // mensaje = 'Hola Ana'
  WriteLn(mensaje);
end.

Este operador es intuitivo y se utiliza en la mayoría de los lenguajes de alto nivel, facilitando la construcción de textos dinámicos.

Conclusión y buenas prácticas

Dominar los conceptos presentados en este curso te permitirá afrontar con confianza tanto preguntas de tipo test como problemas de programación reales. Recuerda aplicar las siguientes buenas prácticas:

  • Siempre verifica el momento de evaluación de condiciones en bucles (while vs repeat).
  • Utiliza constantes para valores que no deben cambiar y variables para datos dinámicos.
  • Controla la longitud de las cadenas para evitar truncamientos inesperados.
  • Prefiere CASE cuando tengas múltiples opciones basadas en un mismo valor.
  • Aprovecha funciones de manipulación de strings como INSERT y el operador + para crear textos claros y mantenibles.
  • Respeta el orden del proceso de desarrollo: análisis, diseño, codificación, pruebas y mantenimiento.

Con práctica constante y revisión de estos conceptos, estarás preparado para sobresalir en cualquier evaluación de programación y para desarrollar aplicaciones robustas en Lazarus y otros entornos.

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.