Criterios de corrección
Perfilado de sección
-
Programación 1
-
Por consultas sobre tareas, compilador y sistema operativo, dirigirse a los foros del módulo Laboratorio.
Criterios de corrección
A continuación se enumeran los criterios que se utilizaron para la corrección del parcial. Estos se basan en la identificación de posibles errores que se pueden cometer al resolver los ejercicios, clasificados por su gravedad. Se trata de un conjunto de criterios generales, pueden haber errores puntuales no cubiertos directamente por estos criterios que se analizan caso a caso.
El código presentado (en rojo) para cada error es un ejemplo posible, podrían haber otros errores en la implementación que estén contemplados dentro del mismo criterio.
Criterios Parte A
Graves
Asigna los dos resultados a la misma variable y por lo tanto pierde información
procedure siguienteDigito(var num: Natural; var digito: Integer);
begin
digito := num mod 10;
digito := num div 10
end;
En lugar de tomar el valor del parámetro `num` lo toma de la entrada estandar
procedure siguienteDigito(var num: Natural; var digito: Integer);
var aux: Natural;
begin
read(aux);
digito := aux mod 10;
num := aux div 10
end;
En lugar de asignar los valores a los parámetros los despliega en la salida
procedure siguienteDigito(var num: Natural; var digito: Integer);
begin
writeln(num mod 10);
writeln(num div 10)
end;
Usa división real en lugar de entera (aunque la intente corregir con trunc)
procedure siguienteDigito(var num: Natural; var digito: Integer);
begin
digito := num mod 10;
num := trunc(num / 10);
end;
Actualiza solamente uno de los parámetros de entrada (num, pero no digito o digito, pero no num)
procedure siguienteDigito(var num: Natural; var digito: Integer);
begin
digito := num mod 10;
end;
Itera
procedure siguienteDigito(var num: Natural; var digito: Integer);
var original: Integer;
begin
original:=num;
while (num > 10) do num := num div 10;
digito := num;
num := original
end;
Algoritmo incorrecto
Medios
Retorna algún resultado como si fuera una función
procedure siguienteDigito (var num: Natural; var digito: Integer);
begin
digito := num mod 10;
siguienteDigito := num div 10
end;
Asigna algún resultado a una variable local y no al parámetro adecuado
procedure siguienteDigito (var num: Natural; var digito: Integer);
var digitoLocal, numLocal: Integer;
begin
digitoLocal := num mod 10;
numLocal := num div 10
end;
Retorna en digito el resultado de div 10 y en num el resultado de mod 10
procedure siguienteDigito (var num: Natural; var digito: Integer);
begin
num := num mod 10;
digito := num div 10
end;
Escribe algo en la salida (no acumula con el grave de salida)
procedure siguienteDigito (var num: Natural; var digito: Integer);
begin
digito := num mod 10;
num := num div 10;
writeln(num)
end;
Invierten las dos instrucciones (primero el div y luego el mod), por lo que pierde el dígito que en realidad se quiere obtener
procedure siguienteDigito (var num: Natural; var digito: Integer);
begin
num := num div 10;
digito := num mod 10;
end;
Considera a digito como un parámetro de entrada
Leves
Controla `num > 0` o algún caso de borde innecesario
procedure siguienteDigito (var num: Natural; var digito: Integer);
begin
if num >= 10 then begin
digito := num mod 10;
num := num div 10
end else begin
digito := num;
num := 0
end
end;
Actualiza num restando digito
procedure siguienteDigito (var num: Natural; var digito: Integer);
begin
digito := num mod 10;
num := (num-digito) div 10;
end;
Criterios Parte B
Graves
Utiliza diez variables, hace un case para distinguir el dígito ingresado y resuelve mal o resuelve bien pero no corta la iteración cuando la cantidad de ocurrencias supera a `cant`
function esCantidadDe (cant : integer; dig : integer; num : Natural) : boolean;
var digito, c0, c1, c2, c3, c4, c5, c6, c7, c8, c9 : integer;
begin
c0:=0;c1:=0;c2:=0;c3:=0;c4:=0;c5:=0;c6:=0;c7:=0;c8:=0;c9:=0;
while (num <> 0) and (cant >= 0) do
begin
siguienteDigito(num, digito);
case digito of
0: c0:=c0+1;
1: c1:=c1+1;
2: c2:=c2+1;
3: c3:=c3+1;
4: c4:=c4+1;
5: c5:=c5+1;
6: c6:=c6+1;
7: c7:=c7+1;
8: c8:=c8+1;
9: c9:=c9+1;
end;
end;
esCantidadDe := <CONDICION INCORRECTA>
end;
Ignora dig (no acumula con el anterior)
function esCantidadDe (cant : integer; dig : integer; num : Natural) : boolean;
var digito : integer;
begin
while (num <> 0) and (cant >= 0) do
begin
siguienteDigito(num, digito);
cant := cant - 1
end;
esCantidadDe := cant = 0
end;
Invoca un procedimiento como si fuera una función
function esCantidadDe (cant : integer; dig : integer; num : Natural) : boolean;
var digito : integer;
begin
while (num <> 0) and (cant >= 0) do
begin
digito := siguienteDigito(num, digito);
if digito = dig then cant := cant - 1
end;
esCantidadDe := cant = 0
end;