EL LABORATORIO DE FABO
// Para saber por dónde empezar

Examen diagnóstico

Respondé las 24 preguntas sin ayuda y después tocá “Ver informe”: te dice en qué temas estás firme y qué prácticas conviene repasar primero. Abajo hay cuatro ejercicios para escribir en papel o en el editor.

0/24 respondidas

1¿Qué imprime este programa?

program q1;
var i, s: integer;
begin
  s := 0;
  for i := 1 to 4 do
    s := s + i * 2;
  writeln(s);
end.

2¿Qué imprime este programa?

program q2;
var n, c: integer;
begin
  n := 20; c := 0;
  while n > 1 do begin
    n := n div 2;
    c := c + 1;
  end;
  writeln(c, ' ', n);
end.

3¿Qué imprime este programa?

program q6;
var c: char; n: integer;
begin
  c := '7';
  n := ord(c) - ord('0');
  writeln(n * 2);
end.

4Se leen números hasta que llega un 0. ¿Cuál es la estructura correcta?

5¿Qué imprime este programa?

program q3;
var a, b: integer;
procedure cambiar(x: integer; var y: integer);
begin
  x := x + 1;
  y := y + 1;
end;
begin
  a := 5; b := 5;
  cambiar(a, b);
  writeln(a, ' ', b);
end.

6¿Qué imprime este programa?

program q4;
var x: integer;
procedure p;
var x: integer;
begin
  x := 10;
end;
begin
  x := 1;
  p;
  writeln(x);
end.

7Un módulo tiene que calcular el promedio de tres notas y devolverlo. ¿Qué conviene?

8Un procedimiento carga un registro leyendo de teclado y el programa principal tiene que quedarse con lo cargado. ¿Cómo va el parámetro?

9Con `type alumno = record nombre: string; nota: integer; end;` y `var a: alumno;`, ¿cómo se asigna la nota?

10Un registro `venta` tiene los campos `codigo`, `cantidad` y `precio`. ¿Cuál es la forma correcta de leerlo de teclado?

11¿Cuándo conviene usar un registro en vez de varias variables sueltas?

12Con `var a, b: alumno;` (el record de antes), ¿es válido `a := b;`?

13Se leen ventas ordenadas por código de sucursal y hay que informar el total de cada sucursal. ¿Qué estructura es?

14En un corte de control, ¿qué se hace justo cuando cambia el código de grupo?

15Dentro del ciclo interno de un corte de control, ¿cuál es la condición correcta?

16El corte de control anidado (sucursal → vendedor) necesita:

17¿Qué imprime este programa?

program q5;
type vec = array[1..5] of integer;
var v: vec; i, m: integer;
begin
  v[1]:=3; v[2]:=9; v[3]:=4; v[4]:=9; v[5]:=1;
  m := 1;
  for i := 2 to 5 do
    if v[i] > v[m] then m := i;
  writeln(m);
end.

18¿Qué imprime este programa?

program q8;
var i, j: integer;
begin
  for i := 1 to 3 do
    for j := i to 3 do
      write(i*j, ' ');
  writeln;
end.

19Un vector se declara `array[1..100]` pero se cargan datos hasta un centinela. ¿Para qué sirve la dimensión lógica (dimL)?

20Buscar un valor en un vector ORDENADO y cortar apenas es imposible que esté. ¿Cuál es el ciclo correcto?

21¿Qué imprime este programa?

program q7;
type lista = ^nodo;
     nodo = record dato: integer; sig: lista; end;
var l, n: lista; i: integer;
begin
  l := nil;
  for i := 1 to 3 do begin
    new(n); n^.dato := i; n^.sig := l; l := n;
  end;
  while l <> nil do begin write(l^.dato, ' '); l := l^.sig; end;
  writeln;
end.

22¿Qué pasa si se hace `l^.dato` cuando `l = nil`?

23Para insertar ordenado en una lista, ¿por qué se recorre con dos punteros (anterior y actual)?

24¿Cuál es la diferencia entre un vector y una lista para la cátedra?

Ejercicios para escribir

4 programas

1Promedio con centinela

Tipos, condiciones y ciclos · Modularización y parámetros

Leer notas (enteros de 1 a 10) hasta que llegue un -1. Informar cuántas notas se leyeron, el promedio y cuántas fueron mayores o iguales a 6. Modularizar: al menos una función.

Qué mirar al corregir
  • Usa while con lectura antes del ciclo y al final (no repeat, no procesa el -1).
  • Inicializa contadores y acumuladores en 0 antes del ciclo.
  • Evita dividir por 0 si no se leyó ninguna nota.
  • El promedio es real (no div).
  • La función retorna el valor; no imprime adentro.

2Registro y corte de control

Registros · Corte de control · Modularización y parámetros

Una empresa lee ventas (sucursal, código de producto, monto) ordenadas por sucursal; la carga termina con sucursal 0. Informar el total vendido por cada sucursal y cuál sucursal vendió más. Usar un registro para la venta y un módulo para leerla.

Qué mirar al corregir
  • Declara un record para la venta y un procedimiento leerVenta con parámetro var.
  • Ciclo externo por sucursal, interno mientras la sucursal no cambia Y no llegó el centinela.
  • Guarda la sucursal actual antes del ciclo interno y reinicia el acumulador al cambiar.
  • Actualiza el máximo al cerrar cada grupo, no dentro del ciclo interno.
  • Inicializa el máximo de forma segura (con el primer grupo o con -1).

3Vector: carga, máximo y ordenamiento

Vectores · Modularización y parámetros

Cargar en un vector de hasta 50 elementos los DNI de alumnos hasta que llegue un 0 (o se llene). Luego: (a) informar la posición del DNI más grande, (b) ordenar el vector por selección, (c) buscar un DNI leído de teclado e informar si está, cortando la búsqueda apenas sea imposible encontrarlo.

Qué mirar al corregir
  • Maneja dimL: la carga corta por centinela O por tope, y los recorridos van hasta dimL.
  • El máximo guarda la POSICIÓN y compara contra v[pos], no contra una copia vieja.
  • Selección: ciclo externo hasta dimL-1, interno desde i+1, intercambio con auxiliar.
  • La búsqueda aprovecha el orden y chequea el límite antes de acceder a v[i].
  • Cada parte es un módulo con el vector y dimL como parámetros (el vector por var solo cuando se modifica).

4Lista ordenada

Listas enlazadas · Registros · Modularización y parámetros

Leer alumnos (nombre, nota) hasta que llegue nombre 'ZZZ' e insertarlos en una lista ordenada por nota de mayor a menor. Después informar la nota más alta, el promedio de la lista y la cantidad de alumnos con nota menor a 4.

Qué mirar al corregir
  • Declara el tipo puntero antes del nodo y el nodo con un campo sig.
  • Inicializa la lista en nil y la pasa por var al insertar.
  • Inserción con dos punteros (ant y act); contempla lista vacía e inserción al principio.
  • Ningún acceso a p^ sin haber chequeado p <> nil.
  • La nota más alta sale del primer nodo (la lista ya está ordenada): reconoce que no hace falta recorrer.
¿Dudas? Escribime