Pascal/Turbo Pascal - Hacer planilla de calculo en pascal

 
Vista:

Hacer planilla de calculo en pascal

Publicado por Damian (1 intervención) el 14/07/2010 22:12:14
Program Calculo;
uses crt,Grilla,InterfazGrilla,PersistenciaGrilla; {Utilización de Módulos y Librerías}

var S:char;

{*************** Declaración de Acciones y Funciones Utilizadas por el programa ***************}

{Accion que inicializa la planilla}
procedure MenuInicializar; forward;{accion a completar}

{Accion que Imprime el menu}
procedure MenuDibujarMenu; forward;{accion a completar}

{Accion que solicita los un valor y lo guarda en la celda actual}
procedure MenuInsertarValor; forward;{accion a completar}

{Accion que solicita una submatriz determinado por la celda sup iqz e inf dere y traspone dicha submatriz (cuadrada!!)}
procedure MenuTransponerSubPlanilla; forward;{accion a completar}

{Accion que solicita una submatriz determinado por la celda sup iqz e inf dere y retorna si dicha submatriz (cuadrada!!) es simétrica}
procedure MenuSimetricaSubPlanilla; forward;{accion a completar}
{Accion que solicita un nuevo ancho de Columna y modifica el aspecto visual de la planilla con el nuevo ancho}
procedure MenuCambiarAnchoColumnas; forward;{accion a completar}


{Accion que solicita el nombre de archivo y guarda la planilla actual en el mismo}
procedure MenuGuardarAArchivo; forward;

{Accion que solicita el nombre de archivo y, en caso de existir, lee la planilla guardada }
procedure MenuLeerDesdeArchivo; forward;

{*************** Declaración de Acciones y Funciones Auxiliares ***************}

{Accion que controla si 4 puntos x1,y1 (sup izq) , x2,y2,(inf der) dentermina un cuadrado }
function ControlSubMatrizCuadrada(x1,y1,x2,y2:integer): Boolean; forward;

{*************** Implementación de Acciones y Funciones Utilizadas por el programa ***************}

procedure MenuInicializar;
begin
GrillaInicializar;
InterfazModificarCols(GrillaCantCols);
InterfazModificarFils(GrillaCantFils);
InterfazModificarAncho(10); //ancho visual por defecto
InterfazModificarPosXY(1,1);
InterfazDibujarPlanilla;
InterfazDibujarDatos;
end;

procedure MenuDibujarMenu;
begin
{Avanza la posición para dialogo y lo imprimo}
InterfazMoverCursorADialogo;
Writeln('');
Writeln('--------------------------------Menu-----------------------------------');
Writeln('esc : Inicialización Total | t: Transponer SubMatriz Cuadrada');
Writeln('flecha Izq: Mueve Izq | s: Simetría SubMatriz Cuadrada ');
Writeln('flecha Der: Mueve Der | m: Mostrar este Menu ');
Writeln('flecha Arr: Mueve Arr | q: Salir ');
Writeln('flecha Abj: Mueve Abj | ');
Writeln('i : Insertar Valor Pos Actual| ');
Writeln('a : Cambiar Ancho Columnas | ');
Writeln('g : Guardar a Archivo | ');
Writeln('l : Leer desde Archivo | ');
Writeln('-----------------------------------------------------------------------');
InterfazMoverCursorADialogo;
end;

procedure MenuInsertarValor;
var valor:integer;
begin
InterfazMoverCursorADialogo;
Write('Ingrese el valor :');
Read(valor);
GrillaModificarValor(InterfazPosX,InterfazPosY,valor);
InterfazDibujarDatos;
end;

procedure MenuTransponerSubPlanilla;
var x1,x2,y1,y2:integer;
begin
{/*/*/*/*/ Implementar /*/*/*/*/*/}
end;

procedure MenuSimetricaSubPlanilla;
var x1,x2,y1,y2:integer;
begin
InterfazMoverCursorADialogo;
Write('Ingrese el Numero de Columna del cuadrante superior izq:');
Readln(x1);
InterfazMoverCursorADialogo;
Write('Ingrese el Numero de Fila del cuadrante superior izq:');
Readln(y1);
InterfazMoverCursorADialogo;
Write('Ingrese el Numero de Columna del cuadrante inferior der:');
Readln(x2);
InterfazMoverCursorADialogo;
Write('Ingrese el Numero de Fila del cuadrante inferior der:');
Readln(y2);
InterfazMoverCursorADialogo;
if ControlSubMatrizCuadrada(x1,y1,x2,y2) then begin {Control de submatriz cuadrada}
if false {GrillaSimetrica(x1,y1,x2,y2) /*/*/ Implementar */*/} then
Write('La submatriz SI es simétrica')
else
Write('La submatriz No es simétrica');
end
else begin
Writeln('La SubMatriz ingresada es inválida')
end;
readkey;
InterfazMoverCursorADialogo;
end;

procedure MenuCambiarAnchoColumnas;
var nuevoAncho:integer;
begin
InterfazMoverCursorADialogo; {Muevo la interfaz a lugar de dialogo}
Write('Ingrese el nuevo ancho de columna:');
Readln(nuevoAncho); {Solicito nuevo ancho}
InterfazModificarAncho(nuevoAncho); {Modifico el ancho de la Interfaz}
InterfazDibujarPlanilla;{Redibujo la interfaz}
InterfazDibujarDatos;{Redibujo la interfaz}
end;

procedure MenuGuardarAArchivo;
var NombreArchivo:String; Estado:integer;
begin
InterfazMoverCursorADialogo;
Write('Ingrese el Nombre del Archivo a Guardar (sin camino ni extension):');
Readln(NombreArchivo);
PersistenciaGuardarPlanilla(NombreArchivo,estado);
InterfazMoverCursorADialogo;
Write(PersistenciaEstado(estado));
readkey;
InterfazMoverCursorADialogo;
end;

procedure MenuLeerDesdeArchivo;
var NombreArchivo:String; Estado:integer;
begin
InterfazMoverCursorADialogo;
Write('Ingrese el Nombre del Archivo a Leer (sin camino ni extension):');
Readln(NombreArchivo);
PersistenciaCargarPlanilla(NombreArchivo,estado);
InterfazMoverCursorADialogo;
InterfazDibujarDatos;
Write(PersistenciaEstado(estado));
readkey;
InterfazMoverCursorADialogo;
end;

{*************** Implementacion de Acciones y Funciones Auxiliares ***************}
{pre: x1=x1_0 y x2=x2_0 y y1=y1_0 y y2=y2_0}
function ControlSubMatrizCuadrada(x1,y1,x2,y2:integer): Boolean;
begin
{/*/*/*/*/ Implementar (borrar código actual "ControlSubMatrizCuadrada:=false") /*/*/*/*/}
ControlSubMatrizCuadrada:=false;
end;
{Def: (resultado= Verdadero y (x1_0<=x2_0) y (y1_0<=y2_0) y (x2_0-x1_0 = y2_0-y1_0) y (x2_0<=CantCols) y (y2_0<=CantFils)) or
(resultado= Falso y not((x1_0<=x2_0) y (y1_0<=y2_0) y (x2_0-x1_0 = y2_0-y1_0) y (x2_0<=CantCols) y (y2_0<=CantFils))) }

{================================== Programa Principal ================================}
Begin
MenuInicializar;
MenuDibujarMenu;
Repeat
S:= readkey;
case S of
'm' : MenuDibujarMenu;
#27 : MenuInicializar; {escape}
#75 : InterfazMoverPosicion(Left); {<-}
#77 : InterfazMoverPosicion(Right);{->}
#72 : InterfazMoverPosicion(Up);{arriba}
#80 : InterfazMoverPosicion(Down);{abajo}
'i' : MenuInsertarValor;{Insertar Valor}
'f' : ;{MenuSumarFila;}
'c' : ;{MenuSumarColumna;}
'p' : ;{MenuPromFila;}
'o' : ;{MenuPromColumna;}
't' : MenuTransponerSubPlanilla;
's' : MenuSimetricaSubPlanilla;
'a' : MenuCambiarAnchoColumnas;
'g' : MenuGuardarAArchivo;
'l' : MenuLeerDesdeArchivo;
end;
Until S='q';
Clrscr;
End.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder