Está en la página 1de 6

PULSA();

PANPR();
GRAF();
RESULTS();
EXPORT
PRUM()
BEGIN
// VARIABLES LOCALES IMPORTANTES
LOCAL NUDOS,BARRAS,REST,FZAS;
//VARIABLES LOCALES SECUNDARIOS
LOCAL LBR,NBR,NNUD,LNUD;
LOCAL NNUD1,ANG,X,Y;
LOCAL NDS,BRS, RNM, LONG, LME;
//VARIABLES DE MENU
LOCAL N, N1, N2, N3,i;
//VARIABLES DE CALCULOS
LOCAL XME,YME,BRXY,NDXY2,NDXY1;
LOCAL NFZAS, NREST, RSTA, NUDS;
//CONTADORES EN FOR:
LOCAL a,b, CONT;
CONT:=0;
//DANDO VALOR INICIAL A lAS MATRICES
NUDOS:=[[0,0]];
BARRAS:=[[0,0]];
REST:=[[0,0,0]];
FZAS:=[[0,0,0]];
//MATRICES DE CALCULO:
LOCAL MAES,MFZAS,RESUL,MAES1, NMFZAS;
LOCAL m, m1, mx, my,R;
RECT();
PANPR();
REPEAT
m:=MOUSE;
m1:=BR(m(1));
IF SIZE(m1)<>0 THEN
mx:=m1(1);
my:=m1(2);
IF PULSA(mx,my,2,4,62,24) THEN
WAIT(-1);
CONT:=0;
CHOOSE(N1,"DESEA CREAR NUDOS?",{"SI","NO, SOLO EDITAR"});
CASE
IF N1==1 THEN
NUDOS:=[[0 , 0]];
INPUT(NDS , "NUDOS" , "#NUDOS" , "INGRESE EL NUMERO DE NUDOS");
FOR a FROM 1 TO NDS STEP 1 DO
LNUD:=[0,0];
NNUD:=a+1;
ADDROW(NUDOS,LNUD,NNUD);
END;
DELROW(NUDOS,1);
EDITMAT(NUDOS);
END;
IF N1==2 THEN
NUDS:=SIZE(NUDOS);
IF NUDS(1)<=1 THEN
MSGBOX("NO HAY NUDOS INSERTADOS");
ELSE

EDITMAT(NUDOS);
END;

END;
END;
PANPR();
END;

IF PULSA(mx,my,66,4,126,24) THEN
WAIT(-1);
CHOOSE(N2,"DESEA CREAR BARRAS?",{"SI","NO, SOLO EDITAR"});
CASE
IF N2==1 THEN
BARRAS:=[[0 , 0]];
INPUT(BRS , "BARRAS" , "#BARRAS" , "INGRESE EL NUMERO DE BARRAS");
FOR a FROM 1 TO BRS STEP 1 DO
LBR:=[0,0];
NBR:=a+1;
ADDROW(BARRAS,LBR,NBR);
END;
DELROW(BARRAS,1);
EDITMAT(BARRAS);
END;
IF N2==2 THEN
EDITMAT(BARRAS);
END;
END;
CONT:=0;
PANPR();
END;
IF PULSA(mx,my,130,4,190,24) THEN
MSGBOX("NO OLVIDES CONFIGURAR TU HP

PRIME EN MODO DEGREES o GRADOS")

"ATRAS"});

REPEAT
CHOOSE(N3,"RESTRICCIONES",{"FIJO" , "MOVIL" ,"SOLO EDITAR", "NUEVO",
CASE
IF N3==1 THEN

INPUT({NNUD1,ANG},"RESTRICCION FIJA" , {"#NUDO"," "} , {"EN QUE NU


DO EST?","ANGULO RESPECTO A LA HORIZONTAL"});
RNM:=SIZE(REST);
ADDROW(REST,[NNUD1,EVAL(COS(ANG)),EVAL(SIN(ANG))],RNM(1)+1);
ADDROW(REST,[NNUD1,EVAL(COS(ANG+90)),EVAL(SIN(ANG+90))],RNM(1)+2
);
IF abs(REST(1))==0 THEN DELROW(REST,1) END;
END;
IF N3==2 THEN
RNM:=SIZE(REST);
INPUT({NNUD1,ANG},"RESTRICCION MOVIL" , {"#NUDO"," "} , {"EN QUE N
UDO EST?","ANGULO RESPECTO A LA HORIZONTAL"});
ADDROW(REST,[NNUD1,EVAL(COS(ANG+90)),EVAL(SIN(ANG+90))],RNM(1)+1
);
IF abs(REST(1))==0 THEN DELROW(REST,1) END;
END;
IF N3==3 THEN
RNM:=SIZE(REST);
IF RNM(1)<=1 THEN
MSGBOX("NO HAY REACCIONES INGRESADAS");

ELSE
IF abs(REST(1))==0 THEN DELROW(REST,1) END;
EDITMAT(REST);
END;
END;
IF N3==4 THEN REST:=[[0,0,0]];
END;
RNM:=SIZE(REST);
END;
UNTIL N3==5;
CONT:=0;
PANPR();
END;
IF PULSA(mx,my,194,4,254,24) THEN
WAIT(-1);
CONT:=0;
EDITMAT(FZAS);
PANPR();
END;
IF PULSA(mx,my,260,4,318,24) THEN
IFERR
PANPR();
GRAF(NUDOS,BARRAS,REST,FZAS);
IF 2*NDS==BRS+RNM(1) THEN

);

);

MAES:=MAKEMAT(0,2*NDS,2*NDS);
FOR a FROM 1 TO BRS DO
BRXY:=BARRAS(a);
NDXY2:=NUDOS(BRXY(2));
NDXY1:=NUDOS(BRXY(1));
LONG:=((NDXY2(1)-NDXY1(1))^2+(NDXY2(2)-NDXY1(2))^2)^0.5;
XME:=(NDXY2(1)-NDXY1(1))/(LONG);
YME:=(NDXY2(2)-NDXY1(2))/(LONG);
LME:=[0];
FOR b FROM 1 TO 2*NDS-1 DO
LME:=append(LME,0);
END;
LME(BRXY(1)*2-1):=XME;
LME(BRXY(1)*2):=YME;
LME(BRXY(2)*2-1):=-XME;
LME(BRXY(2)*2):=-YME;
MAES(a):=LME;
END;
MFZAS:=MAKEMAT(0,2*NDS,1);
NFZAS:=SIZE(FZAS);
NREST:=RNM(1);
MAES1:=transpose(MAES);
FOR a FROM 1 TO NREST DO
RSTA:=REST(a);
MAES1:=REPLACE(MAES1,{2*RSTA(1)-1,(BRS+a)},[[RSTA(2)],[RSTA(3)]]
END;
FOR a FROM 1 TO NFZAS(1) DO
NMFZAS:=FZAS(a);
MFZAS:=REPLACE(MFZAS,{2*NMFZAS(1)-1,1},[[NMFZAS(2)],[NMFZAS(3)]]
END;
RESUL:=-inv(MAES1)*MFZAS;
CONT:=1;

ELSE PANPR();
TEXTOUT_P("NO ES UNA ARMADURA ISOSTATICA!",50,100);
WAIT(1);
END;
THEN PANPR();
TEXTOUT_P("INGRESE BIEN LOS DATOS!!!",70,100);
WAIT(1);
END;
END;
IF CONT==1 THEN
IF PULSA(mx,my,66,218,149,238) THEN
PANPR();
GRAF(NUDOS,BARRAS,REST,FZAS);
RESULTS();
END;
END;
END;
UNTIL PULSA(mx,my,2,214,62,238);
IF PULSA(mx,my,2,214,62,238) THEN
PANPR();
TEXTOUT_P("GRACIAS POR UTILIZAR MAT.ES V1.0",55,100);
TEXTOUT_P(" TOQUE LA PANTALLA PARA SALIR",55,120);
WAIT(-1);
ELSE PRUM();
END;

END;

PULSA(X,Y,Xm,Ym,XM,YM)
BEGIN
IF Xm<=X<=XM AND Ym<=Y<=YM THEN
RETURN(1);
END;
END;

PANPR()
BEGIN
RECT();
LOCAL a;
FOR a FROM 0 TO 4 DO
ARC_P(12+(64)*a,14,10,#FF0000);
ARC_P(52+(64)*a,14,10,#FF0000);
RECT_P({12+(64)*a,4},{52+(64)*a,24},#FF0000);
END;
RECT_P({12,218},{52,238},#FF0000);
ARC_P(12,228,10,#FF0000);
ARC_P(52,228,10,#FF0000);
TEXTOUT_P("NUDOS",9,7);
TEXTOUT_P("BARRAS",72,7);
TEXTOUT_P("REACC.",138,7);
TEXTOUT_P("FUERZAS",196,7);
TEXTOUT_P("CALCULA",260,7);
TEXTOUT_P("SALIR!",12,221);
RECT_P({0,26},{320,214},#0977E3);
FREEZE;
END;

GRAF(NUDOS,BARRAS,REST,FZAS)
BEGIN
LOCAL BAR1,NDX, NDY, NUDSX, NUDSY;
LOCAL PXX, PXY,a, NUDS1, BARS;
LOCAL NDS, BRS, RES, FZA;
LOCAL XYL1, XYL2, FZAS1,FZAS2;
LOCAL cte, STR,a;
NDS:=SIZE(NUDOS);
BRS:=SIZE(BARRAS);
RES:=SIZE(REST);
FZA:=SIZE(FZAS);
NDX:=MAKELIST(X,X,0,0,0);
NDY:=MAKELIST(X,X,0,0,0);
NUDS1:=MAKELIST(X,X,0,0,0);
FZAS2:=MAKELIST(X,X,0,0,0);
FOR a FROM 1 TO NDS(1) DO
NUDSX:=NUDOS(a);
NDX:=append(NDX,NUDSX(1));
NUDSY:=NUDOS(a);
NDY:=append(NDY,NUDSY(2));
END;
FOR a FROM 1 TO NDS(1) DO
PXX:=230*(NDX(a)-MIN(NDX))/(MAX(NDX)-MIN(NDX))+45;
PXY:=98*(MAX(NDY)-NDY(a))/(MAX(NDY)-MIN(NDY))+73;
NUDS1:=append(NUDS1,{PXX,PXY});
END;
FOR a FROM 1 TO BRS(1) DO
BARS:=BARRAS(a);
XYL1:=NUDS1(BARS(1));
XYL2:=NUDS1(BARS(2));
LINE_P(XYL1(1),XYL1(2),XYL2(1),XYL2(2),#00FF00);
LINE_P(XYL1(1)+1,XYL1(2)+1,XYL2(1)+1,XYL2(2)+1,#00FF00);
LINE_P(XYL1(1)-1,XYL1(2)-1,XYL2(1)-1,XYL2(2)-1,#00FF00);
END;
FOR a FROM 1 TO FZA(1) DO
FZAS1:=FZAS(a);
FZAS2:=append(FZAS2,abs(FZAS1(2)));
FZAS2:=append(FZAS2,abs(FZAS1(3)));
END;
cte:=42/MAX(FZAS2);
FOR a FROM 1 TO FZA(1) DO
FZAS1:=FZAS(a);
XYL1:=NUDS1(FZAS1(1));
IF FZAS1(2)<>0 THEN
LINE_P(XYL1(1),XYL1(2),XYL1(1)+FZAS1(2)*cte,XYL1(2),#AA0000);
//STR:="F"+STRING(a)+" x";
STR:=STRING(FZAS1(2));
TEXTOUT(STR,PXC(XYL1(1)+FZAS1(2)*cte/2-10,XYL1(2)+2),1);
IF FZAS1(2)>0 THEN
LINE_P(XYL1(1)+FZAS1(2)*cte,XYL1(2),XYL1(1)+FZAS1(2)*cte-5,XYL1(2)-5,#AA00
00);
LINE_P(XYL1(1)+FZAS1(2)*cte,XYL1(2),XYL1(1)+FZAS1(2)*cte-5,XYL1(2)+5,#AA00
00);
END;
IF FZAS1(2)<0 THEN
LINE_P(XYL1(1)+FZAS1(2)*cte,XYL1(2),XYL1(1)+FZAS1(2)*cte+5,XYL1(2)-5,#AA00

00);
00);

LINE_P(XYL1(1)+FZAS1(2)*cte,XYL1(2),XYL1(1)+FZAS1(2)*cte+5,XYL1(2)+5,#AA00

END;
END;
IF FZAS1(3)<>0 THEN
LINE_P(XYL1(1),XYL1(2),XYL1(1),XYL1(2)-FZAS1(3)*cte,#AA0000);
//STR:="F" + STRING(a) + " y ";
STR:=STRING(FZAS1(3));
TEXTOUT(STR,PXC(XYL1(1),XYL1(2)-FZAS1(3)*cte/2-cte*2),1);
IF FZAS1(3)>0 THEN
LINE_P(XYL1(1),XYL1(2)-FZAS1(3)*cte,XYL1(1)-5,XYL1(2)-FZAS1(3)*cte+5,#AA00
00);
LINE_P(XYL1(1),XYL1(2)-FZAS1(3)*cte,XYL1(1)+5,XYL1(2)-FZAS1(3)*cte+5,#AA00
00);
END;
IF FZAS1(3)<0 THEN
LINE_P(XYL1(1),XYL1(2)-FZAS1(3)*cte,XYL1(1)-5,XYL1(2)-FZAS1(3)*cte-5,#AA00
00);
LINE_P(XYL1(1),XYL1(2)-FZAS1(3)*cte,XYL1(1)+5,XYL1(2)-FZAS1(3)*cte-5,#AA00
00);
END;
END;
END;
ARC_P(76,228,10,#FF0000);
ARC_P(150,228,10,#FF0000);
RECT_P({76,218},{150,238},#FF0000);
TEXTOUT_P("RESULTADOS",72,221);
FREEZE;
END;
RESULTS()
BEGIN
LOCAL a;
FOR a FROM 0 TO 2 DO
ARC_P(76,203-22*a,10,#FF0000);
ARC_P(150,203-22*a,10,#FF0000);
RECT_P({76,193-22*a},{150,213-22*a},#FF0000);
END;
TEXTOUT_P("RESULTADOS",72,221);
FREEZE;
END;

También podría gustarte