Hola, con unos amigos hicimos este ejercicio y nos quedó distinto a la solución. Primero, queremos saber si lo que nosotros hicimos está bien. Y segundo, preguntar si la solución está bien, porque nos pareció que hay casos en los que se puede ir de rango con el código que hay en la solución, en la instrucción "ln.cars[i+1]" porque está dentro de un "for i:= ln.tope to columna", entonces me parece que la primera vez que se vaya a ejecutar el for, se va de rango, no? Bueno, les paso lo que hicimos nosotros para que nos puedan responder si está bien o no:
procedure InsertarCharEnLinea (c : caracter; columna : RangoColumna; VAR ln : Linea; VAR pc : PosibleCaracter);
VAR
i : Integer;
BEGIN
if ln.tope+1>MAXCOL then
begin
pc.esCaracter := true;
pc.c := ln.cars[ln.tope];
end else
begin
pc.esCaracter := false;
ln.tope := ln.tope+1;
end;
for i:= ln.tope downto (columna+1) do
ln.cars[i] := ln.cars[i-1];
ln.cars[columna] := c;
END;
En respuesta a Clementina Firpo Couselo
Re: Parcial julio 2024, ejercicio 1, parte b
Buenas, en la solucion no nos salimos de rango. Si te fijas, en la primera parte de la solucion lo que haces ver si tenes llena la linea, en caso de tener llena la linea le restas uno al tope y ya pones ese caracter en pc, en caso de no tener llena la linea ln.tope es menor estricto que MAXCOL, por lo tanto despues de este paso siempre se te da que ln.tope < MAXCOL. Esto nos lleva a que en cualquiera de los casos al acceder al ln.tope + 1 en el for no sea un problema, ya que a lo sumo ln.tope + 1 va a ser igual a MAXCOL.
Su codigo es correcto.
Saludos,
Guillermo
Su codigo es correcto.
Saludos,
Guillermo