isosiper 1.0 para windows. manual del …148.206.53.84/tesiuami/reportesok/uamr0280.pdf ·...

32

Upload: vanduong

Post on 30-Sep-2018

213 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: ISOSIPER 1.0 PARA WINDOWS. MANUAL DEL …148.206.53.84/tesiuami/reportesok/uamr0280.pdf · importante el centro de cómputo donde se desarrolla, y en este caso la Ing. Eva Isabel
Page 2: ISOSIPER 1.0 PARA WINDOWS. MANUAL DEL …148.206.53.84/tesiuami/reportesok/uamr0280.pdf · importante el centro de cómputo donde se desarrolla, y en este caso la Ing. Eva Isabel

, -. -. - - = - - - . . .

ISOSIPER 1.0 PARA WINDOWS. MANUAL DEL USUARIO M. en C. Ana Lilia Laureano Cruces

Alumno Francisco Javier Villanueva Coronado Alumno J. Alberto Rodriguez Chávez

1i9R UNIVERSIDAD AUTONOMA METROPOLITANA casaabertadtaipo

UNIDAD AZCAPORALCO. División de Ciencias Básicas e ingenieria Departamento de Sistemas .

Page 3: ISOSIPER 1.0 PARA WINDOWS. MANUAL DEL …148.206.53.84/tesiuami/reportesok/uamr0280.pdf · importante el centro de cómputo donde se desarrolla, y en este caso la Ing. Eva Isabel

CONTENIDO

REPORTE TECNICO

INTRODUCCION ....................................................... 7

WINDOWS ...................................................... 8

ISOSIPER ...................................................... 10

BIBLIOGRAFIA ...................................................... 31

APENDICE DE FIGURAS

MANUAL DEL USUARIO

EJEMPLOS

OBJETOS DE INTERFASE ...................................... 10

VENTANA DE DISEÑO ...................... 10

VENTANA DE SOLUCION ................. 1 1

OBJETO REUSABLE

TAD ARREGLO .................................... 12

TAD MATRIZ ..................................... 1 3

ANALISIS MATRICIAL ...................... 20

OBJETO CREADO

TAD ARMADURA ............................... 24

3

Page 4: ISOSIPER 1.0 PARA WINDOWS. MANUAL DEL …148.206.53.84/tesiuami/reportesok/uamr0280.pdf · importante el centro de cómputo donde se desarrolla, y en este caso la Ing. Eva Isabel

AGRADECIMIENTOS

El desarrollo de ISOSIPER 1.0, no hubiera sido posible sin el apoyo, brindado por el Jefe del Departamento de Sistemas de la Universidad Autónoma Metropolitana - Azcapotzalco, J a v i e r R a m í r e z R o d r i g u e z , quien siempre solucionó los obstáculos y me alento.

Dentro del desarrollo de un Sistema siempre juega un papel importante el centro de cómputo donde se desarrolla, y en este caso la Ing. Eva Isabel C e r v m t e s P a l a c i o s , y sus muchachos como ella los llama, cooperaron ampliamente durante el desarrollo.

Finalmente, no hubiera necesitado, apoyo de ‘Javier, ni de Isabel si no hubiera dado clases y me hubiera topado con dos excelentes prospectos de Ingenieros Electrónicos, con tantas ganas de aprender y de conocer cosas nuevas.

Gracias a FCO. Javier V i l l a n u e v a Coronado y a Jesik A l b e r t o Rodríguez Chávez .

Hubo dos personas cuya asesoría podría pasar desapercibida sin embargo representa una parte importante en el desarrollo multidisciplinario de cualquier sistema, ellas a pesar de sus ocupaciones , la una como Jefe del Departamento de Estructuras de la Facultad de Ingeniería-UNAM y la otra con sus clases, elaboración y coordinación de series de ejercicios para los alumnos, siempre estuvieron dispuestas a ayudarnos, en las dudas que surgieron a lo largo de la codificación del análisis matricial de armaduras.

Gracias al In3. M i g u e l Angel R o d r í g u e z Vega y a la Ing. Ana A u r o r a Aburto G l l c r r a .

M . en C. Ana L i l i a Laureano C . m c e s

~ g o s t o de 1994

5

Page 5: ISOSIPER 1.0 PARA WINDOWS. MANUAL DEL …148.206.53.84/tesiuami/reportesok/uamr0280.pdf · importante el centro de cómputo donde se desarrolla, y en este caso la Ing. Eva Isabel

Como sabemos en el area de computación se dan cambios constantemente, el paquete predecesor a este llamado MICRARMS fue creado utilizando la técnica de Programación Basada en Objetos, en este nuevo sistema después de haber introducido a la UEA de Programación Avanzada, el concepto de Tipos Abstractos de Datos, como objetos reutilizables y haber impartido un curso de Programación Orientada a Objetos y C++, aprendiendo junto a mis alumnos las extensiones de C a C++, y las ventajas de sus herramientas en la utilización de est.a técnica, es que decidí realizar el nuevo sistema utilizando Programación Orientada a Objetos y C++.

En MICRARMS el manejo gráfico y de animación, e s decir toda la interfase fue realizada desde Dos (a pie), en el momento de realizar el nuevo sistema teniamos WINDOWS, una herramienta poderosa y atractiva para la interfase del sistema.

Esta interfase de trabajo prometía mucho y al mismo tiempo significaba un reto, ya que no sabíamos como utilizarla.

Al llegar a este punto quiero reconocer el entusiasmo de dos exalumnos F e o . Javier Villanueva Coronado y Jésus Alberto Rodrfguez Chávez , de Programación Orientada a Objetos y de Programación Avanzada respectivamente, quienes de una u otra forma tomaron el reto, Javier aprendiendo WINDWOS y cdmo casarlo con C++ y Alberto aprendiendo C++ y análisis matricial con los ingenieros del Departamento de Estructuras de la Facultad de Ingeniería-UNAM, para poder colaborar con Javier en la parte de solución de armaduras del sistema.

De esta forma se pudo llevar la teoría a un sistema real, que tal vez carece de experiencia en cuanto al. uso de la nuevas herramientas con la nueva tecnología, pero que tiene un final feliz.

Desde un principio se tuvo claro que en ISOSIPER, el aspecto visual era muy importante, dado que este sistema esta dirigido principalmente a los alumnos, el usuario tenía que ver la armadura cobre la que estaba trabajando, tenia que ver apoyos y fuerzas actuando sobre ella, y era deseable que soportara el ratón (mouse), debido a que este dispositivo simplifica el manejo de la entrada por parte del usuario.

Casi cualquier lenguaje ba jo el sistema operativo DOS, cuenta con poderosas librerías para manejar gráficas, sin embargo, el manejo de ratón es muy difícil, en WINDOWS el manejo d e l ratón es un dispositivo integrado al propio sistema operat.ivo.

ISOSIPER, se desarrolló en su totalidad con el cumpilador de C++ 3.1, utilizando la herramienta de programación Object Windows Library 1.0 (OWL).

7

Page 6: ISOSIPER 1.0 PARA WINDOWS. MANUAL DEL …148.206.53.84/tesiuami/reportesok/uamr0280.pdf · importante el centro de cómputo donde se desarrolla, y en este caso la Ing. Eva Isabel

. -

I

OWL se conoce como Application Framework, una librería de clases orientada a objetos para el desarrollo de programas en WINDOWS.

WINDOWS

WINDOWS es una interfase gráfica entre el usuario y la PC, que se conoce como GUI (Grafic User Interfase), representa todo un sistema operativo con las funciones necesarias para correr programas, emplear dispositivos (impresora, ratón, teclado etc.), crear copiar y borrar archivos, en fin ofrece un ambiente gráfico poderoso y productivo que aprovecha todas las ventajas de las PC' s actuales, además ofrece ventajas al usuario que DOS no puede proporcionar.

1.- Operación estándar y predecible, esto es aprendiendo a

2, - No se necesita configurar los dispositivos y manejadores

usar una aplicación se aprende cómo usar todas.

(drivers) para cada aplicación, WINDOWS proprciona manejadores que soportan automáticamente los periféricos.

3.- Comunicación entre procesos.

4.- Taskswitch, que es la habilidad de correr varias aplicaciones al mismo tiempo.

5. - Acceso a más memoria, esto es, WINDOWS soporta los modos protegidos del 80286, 80386 y 80486, además de soportar memoria virtual en el 386 y en el 486.

Trabajando con Windows

Lo primero que aparece al iniciar una sesión es el administrador de programas (program Manager), su funcián es ayudar a organizar las aplicaciones de tal forma que simplifique las tareas del usuario, dentro de este administrador se encuentran uno o mas grupos de programas, cada uno de estos grupos tiene su propia ventana que a su vez contiene las aplicaciones de este grupo, estas aplicaciones tienen asociadas a ellas ideogramas, esto es pequeños dibujos a través de los cuales se corre la aplicación, de aquí que correr una aplicación se convierta en algo tan simple como presionar dos veces el ratón sobre el ideograma correspondiente.

Programación WIPiJDoWS Vs. Programación DOS

Para el usuario WINDOWS es sencillo de manejar, sin embargo desde el punto de vista de un programador novato es todo lo contrario ya que se cuenta con casi 600 funciones que integran el Application Programmer Interfase (API), por otro lado la bibliografía es difícil de seleccionar al ser tan abundante.

8

Page 7: ISOSIPER 1.0 PARA WINDOWS. MANUAL DEL …148.206.53.84/tesiuami/reportesok/uamr0280.pdf · importante el centro de cómputo donde se desarrolla, y en este caso la Ing. Eva Isabel

Internamente los programas en WINDOWS tienen muy poco en común con los programas en D O S , la programación en WINDOWS utiliza un paradigma manejada por eventos (event-driven), prácticamente todo lo que se ve en la pantalla es una ventana.

El primer paso para correr un programa es cargarlo a memoria de un archivo .EXE, además del código y de los datos, el archivo ejecutable contiene recursos (resources).

Los recursos son objetos tales como menús, ideogramas, mapas de bits y cajas de diálogos, que se integran al archivo .EXE por medio de una herramienta denominada compilador de recursos (resource compiler) .

A diferencia de DOS que copia el programa entero a memoria, WINDOWS solo carga parte del mismo, esto es, los recursos son cargados s01.0 si estos van a usarse, si el código está dividido en dos o mas segmentos, WINDOWS solo carga inicialmente los segmentos necesarios, y los otros conforme se utilicen, por ejemplo, el procesador de palabras WRITE, que tiene un total de 200K, esta dividido en 83 segmentos de código separados, el segmento más grande consta de 9K, permitiendo de esta forma correr a Write con apenas 9K de memoria.

Todos los programas en WINDOWS contienen un mínimo de dos funciones, la primera WinMain toma el control cuando el programa es iniciado, también se encarga de crear l a s ventanas que usará la aplicación así como de crear un ciclo de mensajes (Message Loop), este último se encarga de checar los mensajes que el sistema operativo le envía, el segundo tipo de función o de procedimiento, recibe y reacciona de acuerdo a los mensajes.

Desde un punto de vista conceptual, la mayor diferencia entre DOS y WINDOWS, es que Los programas realizados en este Último, desarrollan muy poco de su propio trabajo, e s t o es en lugar de tomar el control del sistema, dibujar pantallas, checar entradas del usuario y otras tareas, el programa entra al ciclo de mensajes y hace solo lo que WINDOWS le dice que haga, en diferentes momentos por ejemplo, le puede enviar al. programa un mensaje imdicándole que el usuario ha elegido un menú o presionado el ratón, de aquí que se corrobore el hecho de que WINDOWS está basado en mensajes y que es un ambiente manejado por eventos.

Casi cualquier tarea que realice un programa es como resultado de un mensaje. WINDOWS define mas de 200 mensajes que un procedimiento puede enviar o recibir, a continuación alganos ejemplos de los más usados:

WM ACTIVATE: la ventana es activada o desactivada WM-CREATE: la ventana es creada WM-MOUSEMOVE: el ratón es movido W-QUIT: la aplicación esta por terminar WM-PAINT: la ventana necesita refrescarse WM-SIZE: - la ventana cambia de tamaño

9

Page 8: ISOSIPER 1.0 PARA WINDOWS. MANUAL DEL …148.206.53.84/tesiuami/reportesok/uamr0280.pdf · importante el centro de cómputo donde se desarrolla, y en este caso la Ing. Eva Isabel

WM - VSCROLL: el ratón se presiona sobre una barra vertical El prefijo WM- significa Windows Message, existen otros

prefijos correspondientes a otras clases de mensajes, pero los WM - son los mas comunes.

ISOSIPER 1.0

Por diseño WINDOWS es orientado a objetos, esto es todos los elementos de su interfase que son: ventanas, barras de scroll, diálogos y demás estan organizados como objetos, ahora como con todos los objetos que son tipos abstractos de datos cada uno de ellos cuenta con datos y funciones, sin embargo hay que aclarar que WINDOWS no esta escrito en un lenguaje orientado a objetos de aqui que WINDOWS tenga todos las propiedades de los objetos sin tener la sintaxis de un lenguaje como C++.

Diferentes clases de objetos que conforman a ISOSIPER 1 , O

Gracias a la jerarquía de WINDOWS y las clases provistas por OWL: (TStreamable (TWindowsObject (TWindow, TDialog) 1 1 , fueron creadas las ventanas de la figura Mapa de Clases que se encuentra en el Apéndice todas ellas fueron creadas para interactuar en diferentes etapas de desarrollo del sistema, a estos objetos se les llana objetos de interfase, a continuación el código de la ventana WDiseño, incluida en el código del objeto DISENO.CPP.

WDiseno: : WDiseno (PTWindowsObject AParent) :TWindow(AParent, I'D I S E D O " )

i Disabl eAu tocreate (1 ; Attr. Style 1 = WS - POPUPWINDOW I WS-CAPTION; Attr.X = O; Attr.Y = O; Attr.W = 640; Attr.H = 480; memset (&TransferJuntas, 0x0, sizeof TransferJuntas) ; memset (&TransferMiembros, 0x0, sizeof TransferMiembros) ; memset (&TransferJuntasC, 0x0, sizeof TransferJuntasC) ; memset (&TransferMiembrC, 0x0, sizeof TransferMiembrC) ; memset (&TransferFS, 0x0, sizeof TransferFS) ;

PenAzul = CreatePen(PS-SOLID,l,RGB(0,0,255)); Orig-Re.x = 50; Orig-Re.y = 390; pixel-unid = 30; d = 6; Escala = 40;

Exi s t eXYD = FALSE; Mnu-NJun tas = FALSE; Mnu-CJun tas = FALSE; mu-NMiembros = FALSE;

10

Page 9: ISOSIPER 1.0 PARA WINDOWS. MANUAL DEL …148.206.53.84/tesiuami/reportesok/uamr0280.pdf · importante el centro de cómputo donde se desarrolla, y en este caso la Ing. Eva Isabel

Mnu C M i e m b r o s = FALSE;

inVal i d a t e R e c t ( t h i s - > H W i n d o w , NULL, TRUE) ; A s s i g n M e n u ( r f D I S E N O r l ) ;

S i Guarda = FALSE;

W i s e n o : : “ W D i s e n o 0

D e l e t e O b j e c t ( P e n A z u l ) ; i f ( E x i s t e X Y D == TRUE)

{

1 delete fl xy;

Otro ejemplo es el de la ventana WSolucion incluido en el objeto SOLUCION.CPP.

WSolucion: : WSolucion ( P T W i n d o w s O b j e c t A P a r e n t ) : T W i n d o w ( A P a r e n t , “A N A L I S I SIr )

AssignMenu (r lSOLUCIONr’) ; D i sabl eAu t o C r e a t e O ; At t r .S t y l e =WS POPUPWINDOW W S CAPTION; A t t i - . X = O ; A t t r . Y = O ; A t t r . W = 6 4 0 ; A t t r . H = 480; m e m s e t ( & T r a n s f e r F i l e , 0 x 0 , s i z e o f T r a n s f e r F i l e ) ; m e m s e t ( & T r a n s f e r X Y , 0x0 , s i z e o f T r a n s f e r X Y ) ; m e m s e t ( & T r a n s f e r F M D , 0x0, s i z e o f T r a n s f e r F M D ) ; m e m s e t ( & T r a n s f e r C O E F , 0 x 0 , s i z e o f T r a n s f e r C O E F ) ; m e m s e t ( & T r a n s f e r A N G , 0x0, sizeof T r a n s f e r A N G ) ; m e m s e t ( & T r a n s f e r A R E A , 0x0, s i z e o f T r a n s f e r A R E A ) ;

{

- -

Mnu C a r g a r = FALSE;

M n u - F u e r z a s = F A L S E ; Mnu-ApoyosI = FALSE; ~ U - A ~ O ~ O S F = FALSE; Mnu-Apoyos = FALSE; mu-Apoyosi = FALSE; ~ ~ U - A ~ O Y O S F = FALSE;

M n u - D i m e n s i o n = FALSE;

E s H Z p e r = FALSE; Mnu C o e f i c i e n t e = F A L S E ; M n u - R e s o l ver = FALSE; carsa APOYO = FALSE; D b l elk = FALSE; E x i s t e X Y = FALSE;

N u m e r o A p o y o s = O ; N u m e r o F u e r z a s = O ;

P I N T A R = -1; 1

1 1

Page 10: ISOSIPER 1.0 PARA WINDOWS. MANUAL DEL …148.206.53.84/tesiuami/reportesok/uamr0280.pdf · importante el centro de cómputo donde se desarrolla, y en este caso la Ing. Eva Isabel

WSolucion: : -WSolucion O

I

El análisis de la programación orientada a objetos es muy estricto dado que si un objeto es un Tipo Abstracto de Datos es necesario, por análisis separar la interfase del cuerpo de ejecución de las funciones ofrecidas por el objeto en cuestión, teniendo de esta forma un objeto dividido en dos partes básicas: la de definición y la de implementación, durante el análisis del sistema se siguió esta filosofía, sin embargo resulta importante aclarar que al ser C++, un lenguaje híbrido es decir que no es un representante de los lenguajes puros orientados a objetos, y al continuar con su defecto de nacimiento (desde C) de no ser un lenguaje acotado que permita una verficación confiable antes de correr el sistema, no se nesecita realizar esta división dentro del código, aún así en el código lo hicimos por claridad y porque estamos del lado de la teoría.

A continuación se presenta el código de el TAD matriz, objeto reusable, que fue desarrollado en el Departamento de Sistemas, dentro de un proyecto conjunto con el Departamento de Economía, y en el cual la Ing. Ma. Paula O r t u ñ o Sánchez le di6 vida.

Este TAD, representa una realidad, dentro del desarrollo de software, ya que el mismo TAD, sin ocupar las operaciones dedicadas a la parte de economía, aumentando las propias y adaptandolo al ambiente WINDOWS, fue utilizado con éxito, esto fue posible debido a la granularidad de la abstracción con que fue diseñado.

A continuación el TAD matriz, primeramente la parte de definición a las que les dimos la extensión .H , de tal forma que este se llama MATR1Z.H.

#incl ude I1arreglo. cpp

#ifndef OWL-H #incl u d e t o w l . h> #endif

#ifndef -STDIO-H #include c s td io .h> #endif

#ifndef STRING H #incl ude7string:hz #endif

#ifndef -WINDOBJ-H #inel ude e windobj . hz #endif

#ifndef - c p l u s p l u s

12

Page 11: ISOSIPER 1.0 PARA WINDOWS. MANUAL DEL …148.206.53.84/tesiuami/reportesok/uamr0280.pdf · importante el centro de cómputo donde se desarrolla, y en este caso la Ing. Eva Isabel

# e r r o r Se debe d e f i n i r C++ #endi f

#i f nd e f MATRIZ # d e f i n e MATRIZ

const doub le C A S I C E R O = i e - 6 ;

CLASSDEF (Ma t r i z ) -

c l a s s M a t r i z : p u b l i c A r r e g l o

aumentada M a t r i z c o p i n v ( M a t r i z ) ; / / c o p i a la p a r t e i n v e r s a d e M a t r i z

M a t r i z aumentar () ; / /aumenta Matr i z i n t r e n g l o n p i v o t e ( i n t , i n t ) ; / /obtiene el reng lón p i v o t e d e

M a t r i z M a t r i z ap l i cargauss jordan () ; / / m é t o d o d e Gauss-Jordan para

invertir M a t r i z v o i d e s c a l o n a r ( i n t ) ; / / e f e c t u a escalonamiento en M a t r i z

p u b l i c :

i

M a t r i z i n v e r s a 0 ; / / d e v u e l v e la i n v e r s a d e M a t r i z M a t r i z ( i n t , i n t , T I P O cons=O) ; / / c r e a Matr i z constanCe M a t r i z (Arreg lo&) ; / / c r e a Matr i z copiandola d e o t r a m a t r i z M a t r i z ( i n t , i n t , TIPO*) ; / / c r e a Matr i z con v a l o r e s M a t r i z ( char* ) ; Matr i z& o p e r a t o r = ( M a t r i z & ) ; // as igna una m a t r i z a o t r a

f r iend M a t r i z o p e r a t o r + (Matr i z&,Matr i z&) ; / /suma d e M a t r i c e s f r i e n d M a t r i z o p e r a t o r - (Mat r i z&,Matr i z&) ; / / r e s t a d e M a t r i c e s f r iend M a t r i z opera tor * (Matr i z&,Matr i z&) ; //mu1 t i p l i c a c i ó n

f r iend M a t r i z o p e r a t o r * (Matr i z&, T I P O ) ; //mu1 t i p l i c a r M a t r i z

M a t r i z & o p e r a t o r +=(Matr i z&) ; M a t r i z & o p e r a t o r -= (Matr i z&) ; Matr i z& o p e r a t o r *= (Mat r i z&) ; T I P O de te rminan te O ; M a t r i z d i a g o n a l i z a r 0 ; M a t r i z t rasponer 0 ; T I P O sumarcolumna ( i n t ) ; v o i d d i v id i rco lumna ( in t . T I P O ) ,- v o i d d i v i d i r r e n g l o n ( i n t , T I P O ) ; / / d i v i d e un reng lón d e M a t r i z

void in t e rcambiarreng lon ( i n t , i n t ) ; / / i n t e r c a m b i a r e n g l o n e s

T I P O M a t r i z I d e n t i d a d ( int l ,-

d e M a t r i c e s

p o r e s c a l a r

p o r un e s c a l a r

d e M a t r i z sumarrengl on ( in t ) ;

boo lean Impr imi r (char Llisp[I="PRNff, i n t c=8, i n t p=5); T I P O SumTot 0 ;

I ; # e n d i f

Se observa que c o n t i e n e un # i n c l u d e " a r r e g l o . cpp" , que r e p r e s e n t a l a parte r e f e r e n t e a l a g r a n u l a r i d a d , que en e l caso

13

Page 12: ISOSIPER 1.0 PARA WINDOWS. MANUAL DEL …148.206.53.84/tesiuami/reportesok/uamr0280.pdf · importante el centro de cómputo donde se desarrolla, y en este caso la Ing. Eva Isabel

I

del proyecto de economía se seguió hacia abajo.

implementaciones de los servicios ofrecidos por este TAD. A continuación la parte de objeto que contiene las

# i f n d e f -IOMANIP H # i n c l u d e < iomanipTh> # e n d i f

# i n c l u d e Ifma t r i z . h"

# i f n d e f -FSTREAM-H # i n c l u d e c f s tream . h> #endi f

extern ~ I C " { doub le f a b s ( d o u b l e ) ; doub le pow(double , d o u b l e ) : I ;

M a t r i z M a t r i z : : I d e n t i d a d ( i n t d i m )

M a t r i z I ( d i m , d i m ) ; f o r ( i n t i=i; i <= d i m ; ++i)

I ( i , i ) = l : r e t u r n I ;

r

1;

{

I :

i I ;

M a t r i z : : M a t r i z ( int r e n g , i n t c o l u , T I F O cons) : A r r e g l o ( r e n g , col u , cons)

ti t u l a r ( l t M a t r i z f l ) ;

M a t r i z : :Mat r i z ( in t r e n g , i n t c o l u , TIPO * v a l ) : A r r e g l o ( r e n g , c o l u , V a l )

t i t u l a r ( r r M a t r i z f f ) ;

M a t r i z : : M a t r i z ( A r r e g l o & b) :Arreglo (b)

1: M a t r i z : : M a t r i z ( c h a r * a r c h i v o )

:Arreglo ( a r c h i v o )

J

M a t r i z & M a t r i z : : o p e r a t o r = ( M a t r i z & b) {

i f (numcol () ! =b. numcol () I I numren () ! =b. numren O ) error ("dimensiones d i s t i n t a s : Ir , t i t u l o 0 ) ;

14 _- -

Page 13: ISOSIPER 1.0 PARA WINDOWS. MANUAL DEL …148.206.53.84/tesiuami/reportesok/uamr0280.pdf · importante el centro de cómputo donde se desarrolla, y en este caso la Ing. Eva Isabel

titular(b. titulo()); for(int i=i; ie=numren O ; i++) for iint j=i; jc=numcol 0 ; j++)

(*this) Ci,j) = b(i,j); return *this;

I ; Matriz operator +(Matriz& p,Matriz& q)

Matriz m(p.numren O , p.numco1 0 ) ; if (p-numren () !=q.numren ()

for (int r=i; r c = p.numren0; ++r)

return ni;

{ I p.numcol0 != q.numcol0)

p.error("no se puede efectuar l a suma:",p.tituloO);

for (int c=i; c e= p-numcol O ; ++c) mír,c) = pír,c) + qír,c);

I ; Matriz operator - (Matriz& p,Matriz& q)

Matriz m (p.numren O , p.numco1 O ; if (p.numren O !=q.numren 0 I I p.numcol O != q.numco1 O ) p.error(Iino se puede efectuar la resta:",p.tituloO);

for (int r=l; r c = p.numren0; ++r) for (int c=l; c c = p.numco1 O; ++c) m ír, c) = p (r, c) -qír, c) ;

return m;

i

I ; Matriz operator *(Matriz& p, Matriz& q)

Matriz m(p.numren0, q.numco1 O ) ; if íp.numco1 O != q.numren O ) p. error ("no se puede efectuar mu1 tiplicación: ' I ,p. ti t u l o O ) ;

for (int r= 1; r e = p.numren0; ++r) for (int c = 1; c e= q.numcol O ; ++c)

for (int i=i; i c = p.numcol O ; ++i) m(r,c) += p(r,i)* q(i,c);

I ; return m;

1; Matriz operator * (Matriz& a,TIPO esc) for( int i=i;ie=a.numrenO;i++)

return a;

for (int j=i; je=a.numcol O ; j++) a (i, j ) *=esc;

1 ; TIPO Matriz : :determinan te í)

if (numren O !=numcol O ) {

error("La matriz debe ser cuadrada:", titulo());

15

Page 14: ISOSIPER 1.0 PARA WINDOWS. MANUAL DEL …148.206.53.84/tesiuami/reportesok/uamr0280.pdf · importante el centro de cómputo donde se desarrolla, y en este caso la Ing. Eva Isabel

I

I

Matriz b (numren 0 ,numcol 0 ) ; b=* this; TIPO det=l; short rp; for (int k=l;k<=numren 0 ; k++)

rp = b.renglonpivote (k, k) ; if (rp>k)

el se

det*= (b(k,k) *pow(-l,rp%2)); b . di vi dirrengl on (k, b (k, k) ) ; b.escalonar(k) ;

{

intercambiarrenglon (rp, k) ;

if(rp==O) return O;

I return det;

1; Matriz Matriz: :inversa (1

if (numren 0 ! =numcol 0 ) error ("La matriz debe ser cuadrada I f ) ;

i

Matriz b (numren 0 ,numcol 0 ) ; b. copinv(aumentar0 .aplicargaussjordan O ) ; return b;

I ; Matriz Matriz: :aumentar()

Matriz b (numren O , numcol 0 *2) ; Matriz I=b. Identidad (numren O ) ; for (int i = 1; i c= b.numren0; ++i)

i

for (int j = 1; j c = b.numco1 O ; ++j) b(i,j) = ((jc=numcol ())?(*this) (i,j):i(i,j

return b; I ;

numcol 0 ) ) ;

void Matriz: :intercambiarrenglon (int rena, int renb)

if (rena==renb)

el se

i return;

TIPO temp; for (int j = i ; jc=numcol 0 ; j++)

{

temp = (*this) (rena,j); (*this) (rena, j) = (*this) (renb, j) ; (*this) (renb,j) =temp;

{

I ; I ;

I ;

16

Page 15: ISOSIPER 1.0 PARA WINDOWS. MANUAL DEL …148.206.53.84/tesiuami/reportesok/uamr0280.pdf · importante el centro de cómputo donde se desarrolla, y en este caso la Ing. Eva Isabel

M a t r i z M a t r i z : : c o p i n v ( M a t r i z a )

f o r ( i n t i = i ; i c = numren O ;i++)

r e t u r n * t h i s ;

f o r ( i n t j = i ; j c = numcol O ; j + + ) ( * t h i s ) l i , j ) =a (.í, j + numcol O I ;

I ; i n t M a t r i z : : r e n g l o n p i v o t e ( i n t c o l u , i n t r e n g ) i

i f ( c o l u c i I I c o l u >numcol O I I r e n g c i I I reng Bnumreno)

f o r ( in t i=reng;ic=numren (1 ;i++)

r e t u r n O ;

erroríIIrenglÓn o columna no v á l i d o s : i i , t i t u l o O ) ;

i f ( f a b s ( (“ th i s ) (i , c o l u ) )>CASICERO) r e t u r n i ;

1; i void M a t r i z : : e s c a l o n a r ( i n t c o l u )

T I P O f a c t o r ; f o r (.int i= l ; i c=numren O ;i++)

i f í i = = c o l u ) c o n t i n u e ; f a c t o r = ( * t h i s ) ( i , c o l u ) ; f o r ( i n t m=colu;nic=numcol O ;m++)

i

( * t h i s ) í i , m ) - = f a c t o r * ( * t h i s ) (co lu ,m) ; 1;

I ; i

1;

void M a t r i z : : d i v i d i r r e n g l o n ( i n t r e n g , T I P O p i v )

f o r ( in t j = i ; jc=numcol () ; j++) ( * t h i s ) (reng, j ) / = p i v ;

v o i d M a t r i z : :d i v id i rco lumna ( in t c o l u , T I P O p i v ) i

f o r í i n t j = i ; jc=numren () ; j + + ) ( * t h i s ) ( j , c o l u ) / = p i v ;

I ; T I P O Ma tri z : : sumarcol umna ( in t co.1 u ) f

T I P O suma=O; f o r ( i n t re=l;rec=numren () ;re++)

return suma; suma+= ( * t h i s ) (re, c o l u ) ;

I ; T I P O Ma t r i z : : sumarrengl on ( in t reng) f

T I P O suma=0; f o r ( i n t co=i;coc=numcol O ;co++)

r e t u r n suma; suma+= ( * t h i s ) (reng, co) ;

1;

17

Page 16: ISOSIPER 1.0 PARA WINDOWS. MANUAL DEL …148.206.53.84/tesiuami/reportesok/uamr0280.pdf · importante el centro de cómputo donde se desarrolla, y en este caso la Ing. Eva Isabel

Matriz Matriz : : apl icargauss jordan 0

float piv; int rp; for (int k=i;k<= numren0 ; k++)

i

rp=renglonpivote (k, k) ; if (rp>k)

el se

i

intercambiarrenglon (rp, k) ;

if (!rp) error ("Matriz singular1') ;

piv= (*this) (k, k) ; divi dirrengl on (k, pi v) ; escalonar (k) ;

1 return *this;

I ;

i Ma tri z Matriz: :diagonalizar 0

if (numren O !=i)

Matriz b (numcol 0, numcol (1 ) ; for (int i=i; i<=b.numren 0 ;i++)

return b;

errOr("dimensiones no validas: ' I , titulo 0 ) ;

b(i,i)= (*this) (1,i);

I ; Matriz& Matriz: :operator+= (Matriz& a)

*this=*this+a; return *this;

i

1 Matriz& Matriz: :operator-= (Matriz& a)

*this= * this -a; return *this;

i

1 Matriz& Matriz: :operator*= (Matriz& a)

if (numcol () ! =a. numren O

Matriz b=*this; BorrarMemoria 0 ; AsignarMemoria (numren 0, a. numcol 0 ) ; * this=b*a; return *this;

error("No es posible la operacion en: ' I , titulo());

I

18

Page 17: ISOSIPER 1.0 PARA WINDOWS. MANUAL DEL …148.206.53.84/tesiuami/reportesok/uamr0280.pdf · importante el centro de cómputo donde se desarrolla, y en este caso la Ing. Eva Isabel

Matriz Matriz: : trasponer ()

Matriz b (numcol 0 , numren 0 ) ; for (int i=i; ic=b.numren ( I ;i++) for (in¿ j=1; jc=b.numcol 0 ; j++)

return b;

i

b(i,j)= (*this) (j,i);

1 ; boo1 ean Matriz: : Imprimir(char* Disp, int c, int p)

ofstream Sal (Disp, ios: :app) ; if (!Sal) return falso;

Sal .setf (20s: :fixed) ; int ancho= (numcol O * (c+l) +7; Salccendlccendlcctitulo()ccff ("<enumren "ccnumcol ( ) < e I r )

Sal e e se tw (ancho) < c se tf ill ( r- I ) c e espcc setf ill (esp) c c endlcc endl ; Salccsetw(4)cc Irr\ \c~~ccespccesp; for (int i=i;ic=numcol 0 ; i + + j

endl c c endl ;

Salccsetw (c) cciccesp;

Salccendlccsetw(ancho)<<setfi l l( r)ccespccsetfill (esp)ccendlc e endl ;

- for (int r=i;rc=numren () ;r++)

Salc<setw(3) ccrccsetw(3)ccesp; for (int col =i ;cole =numcol 0 ;col< =col++)

Sal c c endl ;

i

Salccsetw(c)ccsetprecision (p)cc (*this) (r, co1)ccesp;

3 ; Sal c c setw (ancho) c c se tf i l l ( I- ) <cespecsetfill (esp) <<endl ccendl ; if (numren () ==i)

Sal c c se tw ( 5 ) c c "TOTALrrcc esp; for(i=i;ic=nurncol 0 ;i++)

return verdadero;

f 1 oa t SumCol =sumarcol urna (i ) ; Sal < c se t w (c) c e se tpreci si on (p) e e SumCole c esp;

i

1: Salccendlccsetw(ancho) <<.setfill ( f)<<espccsetfill (esp)<cendl; return verdadero;

-

1; TIPO Matriz: :SumTot (1

TIPO SUMA=O; for lint i=i;i<=numcol 0 ;i++)

return SUMA;

i

SUMA+=sumarcol umna (i) ;

1:

19

Page 18: ISOSIPER 1.0 PARA WINDOWS. MANUAL DEL …148.206.53.84/tesiuami/reportesok/uamr0280.pdf · importante el centro de cómputo donde se desarrolla, y en este caso la Ing. Eva Isabel

!

Para observar la forma en que estas funciones son utilizadas, expondremos a continuación una parte del código del objeto SOLUCION.CPP, que representa el análisis matricial de la armadura dentro del sistema.

//Creation de l a matriz estatica Di3BUG:Correcto

Matriz Estatica (dim1,dimZ); for (miembro=l ;miembro< =DATO. miembros;miembro++) { for (j un t a = l ;junta< =DATO. juntas; j un ta++) {

Estatica (2*junta,miembro) =-EQFYJF[miembro] ;

if (junta == DATO.jf [miembro] ) { Esta ti ca (2 *junta - 1 , miembro) = -EQFXJF [miembro] ;

1 if (junta == DATO.ji[miembro]) { if (EQFXJF [mi embro] ! = O Es ta ti ca (2 * j un ta - 1, mi embro) = EQFXJF [mi embro] ; if (EQFYJF [miembro] ! = O) Esta ti ca (2 *junta, miembro) = EQFYJF [miembro] ;

I } I int extra = DATO.miembros+l;

Entre este código y el que sigue, hay mas instrucciones, pero como lo que se pretende es resaltar el uso de las operaciones contenidas en el TAD Matriz se ha omitido.

//Llena la matriz de longitudes de miembros

Matriz MatLong(1, dim2) ; for (mi embro=l ;mi embroc =dim2 ;mi embro++)

for (miembro=DATO. miembros+l ;miembro< =dim2 ;miembro++) MatLong (1 ,miembro) =L [miembro] ;

MatLong(1,miembro) =l;

//METODO DE SOLUCION MATRICIAL //Creation de las matrices necesarias

Matriz MatRigEsp (diml, diml) ; Matriz MatComp (diml, diml) ; Matriz MatRig(dim1,diml); Matriz MatForza (dim2, 1) ; Matriz MatDelta (diml, 1) ; Matriz MatSally (diml, 1) ; Matriz AuxDos (dim2,diml) ; Matriz MatAreas (1, dim2) ;

if (EsHiper == TRUE) { //MessageBox (this->HWindow, rrEsHiper=TRUE", "AVISO",MB - OK) ; for(i = l;i<= DATO.miembros;i++)

20 _-

Page 19: ISOSIPER 1.0 PARA WINDOWS. MANUAL DEL …148.206.53.84/tesiuami/reportesok/uamr0280.pdf · importante el centro de cómputo donde se desarrolla, y en este caso la Ing. Eva Isabel

MatAreas(1,i) = (AREASfi] * Coeficiente) / MatLong(1,i); for(i= DATO.miembros +l; ic= dirnl;i++) MatAreas(1,i) = (10000 * Coeficiente) / MatLong(1,i); . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . MessageBox (this - >€-Window, "Ma tAreas : ' I , If INICIO", MB OK) ; y=5; DC = GetDC(this->HWindow) ;

-

for (i=1 ;ic=dim2;i++, y+=iO) { sprin tf (S1, If %f I f , Ma tAreas (1, i) ) ; TextOut (DCJ300,y,Sl,strlen(Sl));

I Re1 easeDC (this->HWindow, DC) ;

MessageBox (this - >HWindow, "Ma tAreas ' I , rrFINff, MB OK) ; - . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

1 else {

I //MessageBox (this - >mindow, flEsHiper=FALSEff "AVISOff, MB OK) ; for(i = 1;i c = diml;i++) MatAreas(1,i) = 1 * Coeficiente;

//formacion de la matriz de rigides no ensamblada Ir k If

Ma tRigEsp = Ma tAreas. diagonalizar (1 ;

//Formacion de la matriz de compatibilidad BT If

MatComp = Estatica.trasponer();

/,/Formacion de la matriz de rigidez IfK = B * ( k * BT )

AuxDos = MatRigEsp * MatComp; MatRig = Estatica * AuxDos; //Desplazamientos If Delta = KI * P ' I

MatDel ta = Ma tRig. inversa 0 * Ma tdecarga; //Fuerza en cada barra If FS = AuxDos * Delta If

MatForza = AuxDos * MatDelta; //Alargamientos es = BT * Delta If

MatSally = MatComp * MatDelta; //Presentation del. resul tad0

//Resu1 tados f i n a l es // PINTAR = 3 ; // Inval i da t eRec t ( thi s - > HWíndow, NULL, TRUE) ;

//Ordena DATO tal que ji c jf int temp; f o r (miembro = 1;miembro c = DATO.miembroc;miembro++) {

para la busqueda 1)

21

Page 20: ISOSIPER 1.0 PARA WINDOWS. MANUAL DEL …148.206.53.84/tesiuami/reportesok/uamr0280.pdf · importante el centro de cómputo donde se desarrolla, y en este caso la Ing. Eva Isabel

I

I

if (DATO.jifmiembro1 > DAT0.jf [miembro]) { temp = DATO. j i [mi embrol ; DATO. j i [miembro] = DATO. j f [miembro] ; DATO.jf [miembro] = temp; I

1 int ji, jf; DC = GetDC(this->HWindow) ; NumeraJuntas (DC) ; HFONT hNewFont = CreateFont (10,7, O, O, FW BOLD, O, O, O, -

ANSI ChXRSET, OUT DEFAULT PRECIS, CLIP DEFAULT PRECIS, I - - P R O O F - Q U A L I T Y , F F - M O D E R N

VARIABLE - PITCH, "Modernll) ;

Selectobject (DC, hNewFont) ;

TextOut (DC, 310,16, "MIEMBRO: I f , 8) ; TextOut (DC, 380,16, "F: If f2) ;

/ / I ) COLORREF OldColor = SetTextColor (DC, RGB (O, O, O) ) ;

//Despliega inf ormacign de fuerza en 1 os miembros

for (junta = 1;junta c = DATO.juntas;junta++) { )P = 15;

for(miembr0 = 1; miembro c = DATO.miembros; miembro++) { if (junta == DATO. ji [miembro]) {

j i = DATO. j i [mi embro] ; jf = DAT0.jf [miembro]; sprintf (Si, If (%d, %d) I f , ji, jf) ; sprintf (S2, ff%3.3fff,MatForza(miembro, 1));

y+=l o ;

if (MatForza (miembro, 1) > O)

else if (MatForza (miembro, 1) e O)

el se

SetTextColor (DC, RGB (O, O, 255)) ;

SetTextColor (DC, RGB (255, O, O) ) ;

SetTextColor (DC, RGB (O, O, O) ;

TextOut(DCf320,y,S1, strlen(S1)); TextOut (DCf365,y,S2,str1en(S2));

I

char charx = ' X I ; char chary = 'yf ;

//Despliega informacixn de reaccion en l o s apoyos for(junta = 1; junta c = DATO.juntas; junta++){ for (busca=l;busca c=5;busca++) { if (junta == APOYO[busca] .nodo) {

22

Page 21: ISOSIPER 1.0 PARA WINDOWS. MANUAL DEL …148.206.53.84/tesiuami/reportesok/uamr0280.pdf · importante el centro de cómputo donde se desarrolla, y en este caso la Ing. Eva Isabel

if (APOYO[buscal . tipo==O) { y+=10;

sprintf (S1, I' (%d, %c) 'I, junta, charx) ,- sprintf (52, "%3.3f",MatForza (miembro, 1) I ,- if (MatForza (miembro. 1) > O)

SetTextColor (DC, RGB (O, O, 255) ) ; else if (MatForza (miembro, 1) e O) SetTextColor (DC, RGB (255, O, O) ) ,-

el se SetTextColor (DC, RGB ( O , O, O)) ,-

TextOut (DC, 320, y, S1, strlen (S1)) ,- TextOut (DC, 365, y, S2, strlen (52)) ,-

y+=10; miembro++,- sprintf (Si , " (%d, %c) ", junta, chary) ,- sprintf (S2, I1%3.3f 'I, MatForza (miembro, 1) ) ,- if (MatForza (miembro, 1) > O)

SetTextColor (DC, RGB (O, O, 255)) ,- else if (MatForza (miembro, 1) < O) SetTextColor (DC, RGB (255, O, O) 1 ,-

el se SetTextColor (DC, RGB (O, O, O)) ,-

TextOut (DC,32O,y,Sl,strlen(Sl)); TextOut (DC, 365, y, S2, strlen (52) ) ,-

mi embro++ ,- 1 if (APOYO[buscal. tipo==l) {

y+=10; sprintf (S1, I' (%d, %c) 'I, junta, chary) ,- sprin tf (52 , I' %3.3f Ir , Ma tForza (miembro , 1 ) ) ,- if (MatForza (miembro, 1.) > O)

SetTextColor (DC, RGB (Or O, 255) ) ,- else if (MatForza (miembro, 1) c O) SetTextColor (DC,RGB (255, O, O) ) ,-

el se SetTextColor (DC, RGB (O, O, O) ) ,-

TextOut (DC,320,y,SlIstrlen(S1)); TextOut (DC,365, y, S2, strlen (52) ) ,-

mi embro+ + ;

SetTextColor (DC, OldColor) ,- //Despliega informacixn de alargamientos

Text-Out íDC,430,16, 1iALAR:ii,5); for(miembro = 1; miembro <= DATO.miembros,- mienrbro++,y+=lO) {

y = 25;

sprintf (S1, ".&ffl,MatSally(mi~mbro,l)),- TextOut (DCl420,y,S1,strlen(S1));

1

23

Page 22: ISOSIPER 1.0 PARA WINDOWS. MANUAL DEL …148.206.53.84/tesiuami/reportesok/uamr0280.pdf · importante el centro de cómputo donde se desarrolla, y en este caso la Ing. Eva Isabel

y = 25; TextOut (DC,511,16, ffDEFOR:f1,6); for(miembro = 1; miembro c = DATO.miembros; miembro++,y+=iO) { sprintf (S1, ll%flf,MatSal.ly(míembro,l)); TextOut (DC,5OO,yJS1,strlen(Sl));

I . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

PenRojo = Createpen (PS SOLID, 1 , RGB ( 255 , O , O ) ; PenAzul = Crea tePen (PS-SOLID, - 1, RGB ( O , O , 255) ) ;

for (miembro =l;miembro c = DATO.miembros;miembro++) { if (MatForza (miembro, 1) >= O ) { Selectobject (DC, PenAzul) ; Dib - Miembro (DC,miembro) ; 1 else{ Selectobject (DC, PenRojo) ; Dib Miembro (DC,miembro) ; . - JL

I En este punto se resalta el hecho de que el diseño se

facilita enormemente, al no pelear con el desarrollo de: transpuestas, inversas y multiplicaciones ya que todas estas operaciones nos las ofrece el TAD Matriz (inversa,diagonalizar, trasponer, identidad,..,etc.) , además cuenta con sobrecarga de operadores (+, - , * , =) , para facilitar las operaciones de suma, resta, multiplicación y asignación de matrices y estamos de antemano seguros que funcionan bien ya que fueron diseñadas utilizando la técnica de Tipos Abstractos de Datos donde la especificación es indispensable dentro de cada operación ( PRE y POST condiciones) , de tal suerte que ahora solo tenemos que preocuparnos por utilizarlas bien en el análisis matricial de armaduras.

Finalmente, llegamos a los objetos cxeados, este fue un objeto que se necesitó debido a la frecuencia de uso y que representa un punto primordial en el Análisis Orientado a Objetos basado en Tipos Abstractos de Datos, ya qu-e así como fue creado el TAD matrfz debido a frecuencia de uso nació el TAD armaduras cuya tarea es dibujar las armaduras, en el caso del programa principal existe una parte que dibuja 12 armaduras en la pantalla que representa una opción donde se escogen armaduras propuestas por el sistema y es aqui donde se usa, mandando solo los parámetros de dibujo de cada una de las doce.

A continuación su código, dividido al igual que el TAD Matriz en ARMADURA.H Y ARMADURA.CPP

24

ARMADURA. H

#ifndef -OWL H #include <owlTh> #endif

Page 23: ISOSIPER 1.0 PARA WINDOWS. MANUAL DEL …148.206.53.84/tesiuami/reportesok/uamr0280.pdf · importante el centro de cómputo donde se desarrolla, y en este caso la Ing. Eva Isabel

# i f n d e f WINDOBJ H #incl ude<windobjTh> # e n d i f

# i f n d e f STDIO H # inc lude<s td io .h> # e n d i f

# i f n d e f STRING H #incl ude<str ing.h> # e n d i f

#i f n d e f MAXJurVTAS- # d e f i n e =JUNTAS 27 # e n d i f

#i f n d e f MAXMIEMBR # d e f i n e WIEMBR 27 # e n d i f

t y p e d e f s t ruc t { i n t j u n t a s , miembros; i n t escal a ; i n t coorx ~MAXJUNTASI , coory [MAXJUNTASI ; i n t j i [MAXMIEMBR] , j f [MAXMIEMBR];

I ARMAD; c l a s s TArmadura

FILE * f p t ; i pub1 i c :

"D TAWnd; ARMAD Forma; TArmadura ("D HTAWnd) ; v o i d G e t F o r m (char nombre [351) ; POINT* D r a w ( i n t ox, i n t oy, i n t e , i n t d ) ;

BOOL E s t a Pun t o ( in t x , i n t y) ; BOOL FORMA;

//

I ; A continuación el código de ARMADURA.CPP donde el primer include que se hace es el de ARMADURA.H.

# i f n d e f ARMADURA H #incl ude-lrarmadura. hi# # e n d i f

v o i d TArmadura : : TArmadura (HWND HTAWnd)

TAWnd = HTAWnd; i

1 FORMA = FALSE;

25

Page 24: ISOSIPER 1.0 PARA WINDOWS. MANUAL DEL …148.206.53.84/tesiuami/reportesok/uamr0280.pdf · importante el centro de cómputo donde se desarrolla, y en este caso la Ing. Eva Isabel

void TArmadura: :GetForm (char nombre 1351)

strcat (nombre, l l \ O 1 r ) ; i

fpt = fopen (nombre, irrfl) ; if( fpt == MILL) {

MessageBox(TAWnd, l'Archivo Inexistentell , llERRORrl ,MB_OK) ; FORMA = FALSE;

Ireturn; f scanf (fpt , I1%i , %i , %i Ir , &Forma. juntas, &Forma .miembros , &Forma. esc ala) ;

fscanf (fpt, ll%i,%ill, &Forma.coorx[il , &Forma.coory[il): for(int i=l; ic=Forma.juntas; i++)

for(i=l; i e = Forma.miembros; i++) fscanf(fpt,ll%i,%irl, &Forma.ji[i] , &Forma.jf[il); fclose (fpt) ; FORMA = TRUE;

1

{ POINT* TArmadura: :Draw (int ox, int oy, int e, int d )

HDC DC; POINT* xypix; FO FOR MA == TRUE) { xypix = new POINT[Forrna.juntas+11;

int x, y, r; int jji, jj2; POINT ji, j2;

//Dibuja juntas DC = GetDC (TAWnd) ; for(int i=l; ic=Forma.juntas; i++) {

r=d/2; x = Forma. coorx fil ; y = Forma. coory iil ; x ? (x*=e) : (x=O); y ? (y*=e) : (y=O);

Ellipse (DC, ox+x-r, oy-y-r, ox+x+r, oy-y+r) ; //Llena coordenadas en pixel es

xypix[il.x = ox+x; xypixli1.y = oy-y;

I //Dibuja miembros

for(i=1; i c = Forma.miembros; i++) { jjl = Forma.ji[i]; jj2 = Forma.jf[il; ji.x = xypixljj1l.x; ji.y = xypix[jjil.y; j2.x = xypix[jj2l.x; j2.y = xypix[jj2l.y; MoveTo (DC, jl .x, jl. y) ; LineTo (DC, j2 .x, j2. y ) ;

26

Page 25: ISOSIPER 1.0 PARA WINDOWS. MANUAL DEL …148.206.53.84/tesiuami/reportesok/uamr0280.pdf · importante el centro de cómputo donde se desarrolla, y en este caso la Ing. Eva Isabel

1 Re1 e a s e D C (TAWnd, DC) ;

return xypix; I else{

MessageBox (TAWnd, "Forma i n d e f i n i d a " , llERRORtf,MB OK) ; return NULL; -

1

Este TAD Armadura se usa en el programa principal PROYECTO.CPP, del que a continuación mostramos el código.

# i f n d e f DISENO CPP #inel udeSTdi seno~epp~l # e n d i f

# i f n d e f SOLUCION CPP #inel udeiisol UcionTcppff # e n d i f

#i f n d e f PROYECTO HLP #inel ude7proyecto,'hlpil # e n d i f

# i f n d e f STRING H #inel ude<str ing .h> # e n d i f

# i f n d e f OWL H #include<owlTh> # e n d i f

# i f n d e f WINDOBJ H #incl u d e t w i n d o b jTh> # e n d i f

# i f n d e f DIALOG H #inel u d e a i a l og .h> # e n d i f

# i f n d e f ARMADURA CPP #in el udeTarmaduraTcpp # e n d i f

# d e f i n e TIPOS 1 # d e f i n e DISENO 2 # d e f i n e SOLUCION 3 # d e f i n e AYUDA 18 # d e f i n e COPYRIGHT 19

c l a s s TCopyDlg : p u b l i c TDia log{ pub1 i c :

TCopyDlg (PTWindowsObject AParen t , LPSTR name) ; I ;

27

Page 26: ISOSIPER 1.0 PARA WINDOWS. MANUAL DEL …148.206.53.84/tesiuami/reportesok/uamr0280.pdf · importante el centro de cómputo donde se desarrolla, y en este caso la Ing. Eva Isabel

- CLASSDEF (WParen t )

c l a s s C r e a - A p l i c a c i o n : public T A p p l i c a t i o n I pub1 i c :

C r e a - A p l i c a c i o n (LPSTR AName, HINSTANCE hinstance, HINSTANCE

LPSTR I p C m d L i n e , i n t nCmdShow) : T A p p l i c a t i o n (AName, hinstance, h P r e v I n s t a n c e , I p C m d L i n e , nCmdShow) {} ;

hprevinstance ,

v i r t u a l void Ini tMainWindow (1 ; 1; c l a s s WParent : publíc TWindow

typedef s t r u c t {

} cord;

I i n t x, y;

HDC DC; FILE *fpt;

cord *xy, Origen, O r i g - R e ; i n t d, pixel - unid; i n t j u n t a s , m i e m b r o s ; i n t E s cal a ;

public: WParent (PTWindowsObjec t A P a r e n t , LPSTR ATi t i e ) ;

v i r t u a l void CMTipos (RTMessage Msg)

v i r t u a l void C b i s e n o (RTMessage Msg)

v i r t u a l void Ci?Solucion (RTMessage Msg)

v i r t u a l void C k y u d a (RTMessage Msg)

v i r t u a l void Ckopyright (RTMessage Msg)

v i r t u a l void P a i n t ( EDC P a i n t D C , PAINTSTRUCT& P a i n t I n f o ) ;

=[CM FIRST + TIPOS];

=[CM FIRST + DISENO];

=[CM FIRST + SOLUCIONI;

= [CM FIRST + AYUDA] ;

= [CM FIRST + COPYRIGHT] ;

I ; WParent : : WParent (PTWindowsObjec t A P a r e n t , LPSTR A T i tie) : TWindow ( A P a r e n t , A T i t l e )

A s s i gnMen u ( “ARMADURAS ‘I ) ; A t t r . X = O ; A t t r . Y = O ; A t t r . W = 6 4 0 ; A t t r . H = 480;

1 TCopyDlg : : TCopyDlg (PTWindowsObjec t A P a r e n t , LPSTR n a m e )

: X D i a l o g ( A P a r e n t , n a m e )

28

Page 27: ISOSIPER 1.0 PARA WINDOWS. MANUAL DEL …148.206.53.84/tesiuami/reportesok/uamr0280.pdf · importante el centro de cómputo donde se desarrolla, y en este caso la Ing. Eva Isabel

void WParent: : CMTipos (RTMessage)

POINT* xy; í

TArmadura Al (Window) I A2 (mindow) I A3 (€Window) I A4 (mindow) ; TArmadura A5 (Window) I A6 (mindow) I A7 (Window) I A8 (Window) ; TArmadura A9 (Window) , Al O (HWindow) I Al 1 (€Window) I A12 (mindow) ; Al .GetForm("al.dat") ; xy = Al.Draw(50,50,10,4); A2 . Get Form ( "a2. da t 'I ; xy = A2.Draw(250,50,10,4); A3. GetForm ("a3. dat") ; xy = A3 .Draw(45O, 50,15,4) ; A4.GetForm("a4.dat") ; xy = A4.Draw(50,150,10,4); AS. GetForm ("as. dat") ; 'xy = A5.Draw(250,150,10,4); A6. Ge tForm (11a6. da t ) ; xy = A6.Draw(45OI 150,10,4) ; A7. GetForm ("a7. da t ''1 ; xy = A7.Draw(50,30OI 5,4) ; A8.GetForm("a8.datii) ; xy = A8.Draw(250,300,10,4); Ag. Ge tForm ("ag. da t I' ) ; xy = A9.Draw(450,300,5,4); Al O. Ge tForm ('la1 O. da t Ir ) ; xy = AlO.Draw(50,400,5,4); All .GefsForm("all .datrr) ; xy = All.Draw(250,400,10,4); A12. Ge tForm ( "a12. da t '' ) ; xy = A12.Draw(450,400,10,4); DC = GetDC(HWindow) ; TextOut (DC, 50,60, "Al .DAT", 6) ; TextOut (DC,250,60, "A2.DAT1', 6) ; TextOut (DC, 450,60, "A3 .DATI', 6) ; TextOut (DC,50,160, "A4.DAT1', 6); TextOut (DC,250,160, "A5.DATf', 6 ) ; TextOu t (DC, 450 I 160 I "A6. DAT" I 6) ; TextOut (DC, .50,310, "A7.DAT", 6) ; TextOut (DC,250,310, "A8.DAT", 6); TextOut (DC, 450,310, "A9.DAT", 6) ; TextOut (DC,50,410, "AlO.DAT", 7); TextOut (DC,250,410, "All .DATI', 7) ; TextOu t (DC, 450,41 O , "A12. DAT" I 7) ; Re1 easeDC (HWindow, DC) ;

1 void WParent: : CMDiseno (RTMessage)

PTWindow Diseno; Diseno = new WDiseno(this); GetApplication (1 -> Makewindow (Diseno) ;

{

3 J

29

Page 28: ISOSIPER 1.0 PARA WINDOWS. MANUAL DEL …148.206.53.84/tesiuami/reportesok/uamr0280.pdf · importante el centro de cómputo donde se desarrolla, y en este caso la Ing. Eva Isabel

void WParent: : CMSol ucion (RTMessage)

PTWindow Solucion; Solution = new WSolucion ( t h i s ) ; GetApplication O -> MakeWindow (Solucion) ;

{

I void WParen t : : CMAyuda (RTMessage)

PTWindow ProyectoHlp; Proyecto€flp = new WAyudaPrj ( t h i s ) ; GetApplication () - > MakeWindow(ProyectoH1p) ;

i

1 void WParent: : CMCopyright (RTMessage)

i f ( GetModuleO -> ExecDialog( {

new TCopyDlg ( t h i s , flCOPYRIGHT1r) ) ==IDOK)

void WParent: :Paint ( HDC PaintDC, PAINTSTRUCT& PaintInfo 1 1

void Crea - Aplicacion: rInitMainWindow0

Mainwindow = new WParent (NULL, If I S O S I P E R 1. O f f ) ; {

I i n t PASCAL WinMain (HINSTANCE hIns tance, HINSTANCE hPrevInstance,

LPSTR IpCmdLine, i n t nCmdShow)

Crea Aplicacion Armaduras (llAnnaduraslf, hInstance, hprevinstance,

Armaduras. Run () ; return Armaduras. Status ;

I -

IpCmdLine, nCmdShow) ;

1 Parte del código que es bastante extenso se ha mostrado,

quedando ilustrada la técnica de disefío orientada a objetos así como los tipos abstractos de datos y su reutilización, parte importante en el diseño de este paquete.

Se crearon tres contenedores de clases: DISEÑO, SOLUCION y I ARMADURA, de los cuales se ha mostrado parte o todo el código, I estos son incluidos en el programa que le da vida a ISOSIPER y

que es PROYECTO.CPP, cuyo código se ha mostrado recientemente.

Estas clases y sus relaciones de herencia se encuentran mostradas en la figura Mapa de Clases que se encuentra en el Apéndice y que representa su organización, también se encuentra el diagrama de ejecución del programa principal mostrando los objetos que llama a ejecución.

I I

30

Page 29: ISOSIPER 1.0 PARA WINDOWS. MANUAL DEL …148.206.53.84/tesiuami/reportesok/uamr0280.pdf · importante el centro de cómputo donde se desarrolla, y en este caso la Ing. Eva Isabel

BIBLIOGRAFÍA

[MOA881 . - Aho Alfred V, Hopcroft E., Ullman Jeffrey D.- I'

Estructuras de D a t o s y A l g o r i t m o s " . - ADDISON-WESLEY IBEROAMERICANA, 1988.

CBEEJ721 . - Beer & Johnston.- Mecanica Vectorial para Ingenieros: Estática I t , - MC-GRAW HILL, 1972.

[DALN891 . - Dale Nell, Lilly Susan.- P a s c a l y Estructuras de D a t o s " . - MC-GRAW HILL, 1989. [HARR89] . - Harrison R.- It Abstract D a t a Types in MODULA-2 I t . -

JOHN WILEY & SONS, 1989.

LLAIJ881 . - Laible J.- Análisis Estructural I t . - MC-GRAW HILL, 1988.

ELORH321 . - Heiny Loren. - Windows G r a p h i c s Programming w i t h Borland C++ " . - WILEY, 1992.

LSCHH911 . - Schildt Herbert. - "Turbo C/C++ Manual de R e f e r e n c i a " . - MC GRAW HILL, 1991.

LTORJ931.- Torres Moreno J. M.- " M é t o d o s N u m é r i c o s con S o f t w a r e en P . - UNIVERSIDAD AUTÓNOMA METROPOLITANA - AZCAPOTZALCO, 1993.

[VILLgOI . - Villaloboc, Quintero, Otero. - Estructuras de Datos: Un E n f o q u e desde Tipo8 Abstractos de D a t o s I t . - MC GRAW HILL, 1990.

iWELJ901.- Welsh Jim.- It Estructuras de D a t a s : U . Enfoque desde Tipos Abstractos de Datos " . - MC GRAW HILL, 1990.

LWINA931 . - Winblad A. ,Edwards S. , King D.. - a O b j e t o s *I.- ADDISON WESLEY/DIAZ DE SANTOS, 1993.

Software O r i e n t a d o

31

Page 30: ISOSIPER 1.0 PARA WINDOWS. MANUAL DEL …148.206.53.84/tesiuami/reportesok/uamr0280.pdf · importante el centro de cómputo donde se desarrolla, y en este caso la Ing. Eva Isabel

APÉNDICE DE FIGURAS

33

Page 31: ISOSIPER 1.0 PARA WINDOWS. MANUAL DEL …148.206.53.84/tesiuami/reportesok/uamr0280.pdf · importante el centro de cómputo donde se desarrolla, y en este caso la Ing. Eva Isabel

TGroupB ox

T ApplicationHCrca-Aplicacion

Container Hcoiiection

Mapa de clases

35

Page 32: ISOSIPER 1.0 PARA WINDOWS. MANUAL DEL …148.206.53.84/tesiuami/reportesok/uamr0280.pdf · importante el centro de cómputo donde se desarrolla, y en este caso la Ing. Eva Isabel

n PROYECTO

Diagrma de ejecución del programa principal

37