alguien sabria hacer este programa?¿?¿
Problema a resolver
Se desea realizar un programa que lea un fichero de texto y a continuaci´on realice sobre su contenido una serie
de operaciones de edici´on, como las que se har´ýan en un editor de textos interactivo. Cuando se hayan realizado
todas las operaciones, el programa debe terminar guardando los cambios en el mismo fichero o en otro fichero, o bien
descartando los cambios.
Posiciones del cursor
En todo momento el programa almacenar´a la posici´on del cursor, como se har´ýa en un editor interactivo; inicialmente,
la posici´on del cursor es la (1, 1), que corresponde a la primera l´ýnea, primera columna. El cursor puede estar
en una de las l´ýneas del texto, y adem´as en una l´ýnea virtual situada al final del texto, que no contiene nada (y por
tanto no se debe guardar en el fichero), pero en la que se puede posicionar el cursor para insertar caracteres. Por
tanto, si el fichero de entrada contiene n l´ýneas, el rango de posiciones v´alidas (antes de hacer ninguna operaci´on de
edici´on) para la primera coordenada del cursor es desde 1 hasta n + 1.
Las posiciones v´alidas en una l´ýnea van desde la posici´on 1 hasta la que contenga el ´ultimo car´acter de la l´ýnea,
y adem´as existe una posici´on virtual que denominaremos posici´on final, que se corresponde con la posici´on siguiente
a la del ´ultimo car´acter de la l´ýnea. Por ejemplo, si una l´ýnea tiene lo siguiente:
hola, mundo.
las posiciones v´alidas en esa l´ýnea van desde la 1, que corresponde a la “h”, hasta la 13, que ser´ýa la posici´on final,
ya que en la posici´on 12 estar´ýa el “.”. En ning´un caso se debe dejar el cursor en una posici´on no v´alida (p.ej. en
la columna 15), siempre se debe ajustar para que la posici´on sea v´alida. Si una l´ýnea est´a en blanco (no contiene
caracteres), la ´unica posici´on v´alida es la posici´on final. En la l´ýnea virtual situada al final del texto, la ´unica posici´on
v´alida es la 1, que corresponde a la posici´on final.
Puede haber espacios en blanco tanto al final como al principio de la l´ýnea, y no deben tratarse de forma especial,
son caracteres como los dem´as. Por simplificar, el car´acter tabulador no aparecer´a en el fichero de entrada (no es
necesario comprobarlo), ni se podr´a insertar en el editor.
Especificaci´on de la pr´actica
La pr´actica tendr´a un argumento que se le pasar´a en la l´ýnea de comandos, que ser´a el nombre del fichero de
entrada (el nombre puede tener como m´aximo 200 caracteres). Si el programa tiene m´as o menos argumentos, se
debe emitir el siguiente mensaje de error (exactamente como aparece) y terminar el programa:
E1: NUMERO DE ARGUMENTOS INCORRECTO. USO: p1 fichero
Si el programa no puede abrir el fichero de entrada, debe emitir el siguiente mensaje de error:
E2: ERROR DE APERTURA DEL FICHERO.
Lo primero que debe hacer el programa es leer el fichero de entrada y almacenarlo en un vector de cadenas de
caracteres (cada l´ýnea del fichero en un vector de caracteres), que tendr´a como m´aximo 1000 l´ýneas. Si el fichero tiene
m´as de 1000 l´ýneas, el programa debe emitir el siguiente mensaje de error y terminar:
E3: FICHERO DEMASIADO GRANDE, MAXIMO 1000 LINEAS.
Comandos de edici´on
Una vez le´ýdo el fichero de texto y almacenado en el vector de cadenas de caracteres, el programa debe ir leyendo
del teclado (la entrada est´andar) uno o m´as comandos de edici´on, que debe ir ejecutando uno a uno, seg´un los va
leyendo. Si lo que se lee de la entrada no es un comando v´alido (porque no es un nombre v´alido de comando o porque
le faltan argumentos), el mensaje de error que se debe mostrar es el siguiente:
E4: ERROR, COMANDO INCORRECTO.
Los comandos son los siguientes:
Comandos de movimiento del cursor
En algunos de estos comandos puede suceder que al cambiar la posici´on del cursor a otra l´ýnea, la columna actual
sea una posici´on no v´alida en la nueva l´ýnea, porque la nueva l´ýnea tiene menos caracteres que el valor de la columna
actual. En esos casos se debe cambiar la columna actual a la posici´on final de la nueva l´ýnea.
Comando Nombre Descripci´on
ARR Arriba Mover el cursor a la l´ýnea anterior, si la l´ýnea actual no es la 1.
ABJ Abajo Mover el cursor a la l´ýnea siguiente, si la l´ýnea actual no es la l´ýnea virtual.
IZQ Izquierda Mover el cursor a la columna anterior; si la columna actual es la 1, entonces
el cursor se debe mover a la posici´on final de la l´ýnea anterior, excepto cuando
el cursor est´a en la posici´on (1, 1), que no existe l´ýnea anterior.
DER Derecha Mover el cursor a la columna siguiente; si la columna actual es la posici´on
final de la l´ýnea actual, entonces el cursor se debe mover a la columna 1 de
la l´ýnea siguiente, excepto cuando la l´ýnea actual es la l´ýnea virtual.
PGA P´agina arriba Mover el cursor 24 l´ýneas hacia arriba, o a la l´ýnea 1 si la l´ýnea actual es
menor o igual que 24. Este comando no es equivalente a ejecutar 24 veces el
comando Arriba, puesto que en cada ejecuci´on de dicho comando es posible
que se altere la posici´on de la columna (para que se ajuste a una posici´on
v´alida); en ese sentido se podr´ýan realizar (en el peor caso) 24 ajustes de la
columna, mientras que en este comando s´olo habr´ýa que realizar un ajuste.
PGB P´agina abajo Mover el cursor 24 l´ýneas hacia abajo, o a la l´ýnea virtual si no existen
tantas l´ýneas. Como en el comando anterior, hay que ajustar la posici´on de
la columna adecuadamente, y solamente una vez.
POS l Posici´on Mover el cursor a la l´ýnea l, si es una l´ýnea v´alida; se puede suponer que l
ser´a un n´umero entero, y el rango de l´ýneas v´alidas incluye a la l´ýnea virtual.
La columna no cambia, excepto si hay que ajustarla a un valor v´alido, como
en los dem´as comandos.
Fundamentos de Programaci´on II, 2005–2006 4
Comandos generales
Comando Nombre Descripci´on
MOS Mostrar Imprimir por pantalla el contenido del vector de cadenas,
con una l´ýnea que indica el principio y otra que indica el
final (ver ejemplos).
SAL Salir Salir del programa (sin guardar los cambios, ni preguntar).
Antes de salir el programa debe emitir el siguiente mensaje:
M1: ADIOS.
SGU Salir guardando Guardar el vector de l´ýneas en el fichero de entrada (borrando
el contenido que tuviera), y salir del programa (emitiendo
antes el mensaje “M1”).
SGC "nombre" Salir guardando como Guardar el vector de l´ýneas en el fichero “nombre”, y salir
del programa (emitiendo el “M1”).
GUA Guardar Guardar el vector de l´ýneas en el fichero de entrada (borrando
el contenido que tuviera).
GCO "nombre" Guardar como Guardar el vector de l´ýneas en el fichero “nombre”.
Al abrir el fichero para escribir el vector de l´ýneas es posible que se produzca un error, y en ese caso se debe
emitir el mensaje de error “E2”. Por otro lado, tanto al leer el fichero de entrada como al escribir el fichero de salida
puede producirse un error de entrada/salida. En ese caso, el programa debe emitir el siguiente mensaje de error, y
terminar:
E5: ERROR DE LECTURA/ESCRITURA.
En la pr´actica, es un error que es dif´ýcil que aparezca (al menos en un disco duro), por lo que en la correcci´on no
se probar´a este caso, aunque puede ser que en alguna revisi´on de la pr´actica se tenga en cuenta.
Se desea realizar un programa que lea un fichero de texto y a continuaci´on realice sobre su contenido una serie
de operaciones de edici´on, como las que se har´ýan en un editor de textos interactivo. Cuando se hayan realizado
todas las operaciones, el programa debe terminar guardando los cambios en el mismo fichero o en otro fichero, o bien
descartando los cambios.
Posiciones del cursor
En todo momento el programa almacenar´a la posici´on del cursor, como se har´ýa en un editor interactivo; inicialmente,
la posici´on del cursor es la (1, 1), que corresponde a la primera l´ýnea, primera columna. El cursor puede estar
en una de las l´ýneas del texto, y adem´as en una l´ýnea virtual situada al final del texto, que no contiene nada (y por
tanto no se debe guardar en el fichero), pero en la que se puede posicionar el cursor para insertar caracteres. Por
tanto, si el fichero de entrada contiene n l´ýneas, el rango de posiciones v´alidas (antes de hacer ninguna operaci´on de
edici´on) para la primera coordenada del cursor es desde 1 hasta n + 1.
Las posiciones v´alidas en una l´ýnea van desde la posici´on 1 hasta la que contenga el ´ultimo car´acter de la l´ýnea,
y adem´as existe una posici´on virtual que denominaremos posici´on final, que se corresponde con la posici´on siguiente
a la del ´ultimo car´acter de la l´ýnea. Por ejemplo, si una l´ýnea tiene lo siguiente:
hola, mundo.
las posiciones v´alidas en esa l´ýnea van desde la 1, que corresponde a la “h”, hasta la 13, que ser´ýa la posici´on final,
ya que en la posici´on 12 estar´ýa el “.”. En ning´un caso se debe dejar el cursor en una posici´on no v´alida (p.ej. en
la columna 15), siempre se debe ajustar para que la posici´on sea v´alida. Si una l´ýnea est´a en blanco (no contiene
caracteres), la ´unica posici´on v´alida es la posici´on final. En la l´ýnea virtual situada al final del texto, la ´unica posici´on
v´alida es la 1, que corresponde a la posici´on final.
Puede haber espacios en blanco tanto al final como al principio de la l´ýnea, y no deben tratarse de forma especial,
son caracteres como los dem´as. Por simplificar, el car´acter tabulador no aparecer´a en el fichero de entrada (no es
necesario comprobarlo), ni se podr´a insertar en el editor.
Especificaci´on de la pr´actica
La pr´actica tendr´a un argumento que se le pasar´a en la l´ýnea de comandos, que ser´a el nombre del fichero de
entrada (el nombre puede tener como m´aximo 200 caracteres). Si el programa tiene m´as o menos argumentos, se
debe emitir el siguiente mensaje de error (exactamente como aparece) y terminar el programa:
E1: NUMERO DE ARGUMENTOS INCORRECTO. USO: p1 fichero
Si el programa no puede abrir el fichero de entrada, debe emitir el siguiente mensaje de error:
E2: ERROR DE APERTURA DEL FICHERO.
Lo primero que debe hacer el programa es leer el fichero de entrada y almacenarlo en un vector de cadenas de
caracteres (cada l´ýnea del fichero en un vector de caracteres), que tendr´a como m´aximo 1000 l´ýneas. Si el fichero tiene
m´as de 1000 l´ýneas, el programa debe emitir el siguiente mensaje de error y terminar:
E3: FICHERO DEMASIADO GRANDE, MAXIMO 1000 LINEAS.
Comandos de edici´on
Una vez le´ýdo el fichero de texto y almacenado en el vector de cadenas de caracteres, el programa debe ir leyendo
del teclado (la entrada est´andar) uno o m´as comandos de edici´on, que debe ir ejecutando uno a uno, seg´un los va
leyendo. Si lo que se lee de la entrada no es un comando v´alido (porque no es un nombre v´alido de comando o porque
le faltan argumentos), el mensaje de error que se debe mostrar es el siguiente:
E4: ERROR, COMANDO INCORRECTO.
Los comandos son los siguientes:
Comandos de movimiento del cursor
En algunos de estos comandos puede suceder que al cambiar la posici´on del cursor a otra l´ýnea, la columna actual
sea una posici´on no v´alida en la nueva l´ýnea, porque la nueva l´ýnea tiene menos caracteres que el valor de la columna
actual. En esos casos se debe cambiar la columna actual a la posici´on final de la nueva l´ýnea.
Comando Nombre Descripci´on
ARR Arriba Mover el cursor a la l´ýnea anterior, si la l´ýnea actual no es la 1.
ABJ Abajo Mover el cursor a la l´ýnea siguiente, si la l´ýnea actual no es la l´ýnea virtual.
IZQ Izquierda Mover el cursor a la columna anterior; si la columna actual es la 1, entonces
el cursor se debe mover a la posici´on final de la l´ýnea anterior, excepto cuando
el cursor est´a en la posici´on (1, 1), que no existe l´ýnea anterior.
DER Derecha Mover el cursor a la columna siguiente; si la columna actual es la posici´on
final de la l´ýnea actual, entonces el cursor se debe mover a la columna 1 de
la l´ýnea siguiente, excepto cuando la l´ýnea actual es la l´ýnea virtual.
PGA P´agina arriba Mover el cursor 24 l´ýneas hacia arriba, o a la l´ýnea 1 si la l´ýnea actual es
menor o igual que 24. Este comando no es equivalente a ejecutar 24 veces el
comando Arriba, puesto que en cada ejecuci´on de dicho comando es posible
que se altere la posici´on de la columna (para que se ajuste a una posici´on
v´alida); en ese sentido se podr´ýan realizar (en el peor caso) 24 ajustes de la
columna, mientras que en este comando s´olo habr´ýa que realizar un ajuste.
PGB P´agina abajo Mover el cursor 24 l´ýneas hacia abajo, o a la l´ýnea virtual si no existen
tantas l´ýneas. Como en el comando anterior, hay que ajustar la posici´on de
la columna adecuadamente, y solamente una vez.
POS l Posici´on Mover el cursor a la l´ýnea l, si es una l´ýnea v´alida; se puede suponer que l
ser´a un n´umero entero, y el rango de l´ýneas v´alidas incluye a la l´ýnea virtual.
La columna no cambia, excepto si hay que ajustarla a un valor v´alido, como
en los dem´as comandos.
Fundamentos de Programaci´on II, 2005–2006 4
Comandos generales
Comando Nombre Descripci´on
MOS Mostrar Imprimir por pantalla el contenido del vector de cadenas,
con una l´ýnea que indica el principio y otra que indica el
final (ver ejemplos).
SAL Salir Salir del programa (sin guardar los cambios, ni preguntar).
Antes de salir el programa debe emitir el siguiente mensaje:
M1: ADIOS.
SGU Salir guardando Guardar el vector de l´ýneas en el fichero de entrada (borrando
el contenido que tuviera), y salir del programa (emitiendo
antes el mensaje “M1”).
SGC "nombre" Salir guardando como Guardar el vector de l´ýneas en el fichero “nombre”, y salir
del programa (emitiendo el “M1”).
GUA Guardar Guardar el vector de l´ýneas en el fichero de entrada (borrando
el contenido que tuviera).
GCO "nombre" Guardar como Guardar el vector de l´ýneas en el fichero “nombre”.
Al abrir el fichero para escribir el vector de l´ýneas es posible que se produzca un error, y en ese caso se debe
emitir el mensaje de error “E2”. Por otro lado, tanto al leer el fichero de entrada como al escribir el fichero de salida
puede producirse un error de entrada/salida. En ese caso, el programa debe emitir el siguiente mensaje de error, y
terminar:
E5: ERROR DE LECTURA/ESCRITURA.
En la pr´actica, es un error que es dif´ýcil que aparezca (al menos en un disco duro), por lo que en la correcci´on no
se probar´a este caso, aunque puede ser que en alguna revisi´on de la pr´actica se tenga en cuenta.
