1 'NUDORIG 10 MODE 5 20 CLEAR:CLS:PRINT CHR$(9); 30 PRINT "**ESTRUCTURAS DE NUDOS RIGIDOS** ******************************" 35 CLS:BEEP0:BEEP1:LOCATE 0,0 40 INPUT "Numero de nudos";NN 45 IF NN=0 THEN 40 50 INPUT "Numero de barras";NB 55 IF NB=0 THEN 50 60 DIM X(NN),Y(NN),D(NB),F(NB),LONG(NB),S(NB),C(NB),K(3*NN,3*NN),CARGAS(3*NN),REACC(3*NN) 70 INPUT "M. elasticidad (T/m^2)";MD 80 INPUT "Area constante S/N";AR$ 90 IF AR$="S" THEN INPUT "Area (m^2)";AREA ELSE DIM AREA(NB) 100 INPUT "Inercia constante S/N";IC$ 110 IF IC$="S" THEN INPUT "Inercia (m^4)";INERCIA ELSE DIM INERCIA(NB) 130 PRINT "**** COORDENADAS DE NUDOS **** ******************************" 160 FOR I=1 TO NN 170 CLS 180 PRINT "Nudo";I; 185 LOCATE 10,0:PRINT "COORD X";:LOCATE 20,0:PRINT "COORD Y"; 190 LOCATE 12,1:INPUT X(I) 200 LOCATE 22,1:INPUT Y(I) 210 NEXT I 230 CLS:PRINT "**** NUMERACION DE BARRAS ****" 250 FOR I=1 TO NB 290 CLS 300 PRINT "Barra";I; 305 LOCATE 0,1 310 INPUT "Nudo dorsal";D(I) 315 IF D(I)=0 THEN 310 320 INPUT "Nudo frontal";F(I) 325 IF F(I)=0 THEN 320 330 IF AR$="N" THEN INPUT "Area(m^2)"; AREA(I) 340 IF IC$="N" THEN INPUT "Inercia(m^4)";INERCIA(I) 350 NEXT I 360 REM****CALCULOS GEOMETRICOS BARRAS**** 370 FOR I=1 TO NB 390 ND=D(I) 400 NF=F(I) 410 LONG=SQR((X(NF)-X(ND))^2+(Y(NF)-Y(ND))^2) 420 LONG(I)=LONG 440 S(I)=(Y(NF)-Y(ND))/LONG(I) 460 C(I)=(X(NF)-X(ND))/LONG(I) 480 NEXT I 490 REM ***DESCONEXIONES*** 495 BEEP 500 INPUT "Desconexiones S/N";DESC$ 510 IF DESC$="S" THEN INPUT "N. barras desconectadas";BDESC ELSEIF DESC$="N" THEN 610 ELSE 500 515 DIM DESC(NB),TP(NB) 520 FOR I=1 TO BDESC 530 INPUT "Numero de barra";BARRA 540 DESC(BARRA)=BARRA 550 CLS: PRINT "Tipo desconexion"; 555 LOCATE 0,1 560 PRINT "Dorsal,Frontal,Ambas(1,2,3)";:INPUT TP(BARRA) 600 NEXT I 610 REM ***CALCULO MATRIZ DE RIGIDEZ*** 615 CLS:PRINT "Calculando matriz rigidez"; 620 FOR I=1 TO NB 630 IF AR$="N"THEN AREA=AREA(I) 640 IF IC$="N" THEN INERCIA=INERCIA(I) 650 Ea=AREA*MD/LONG(I) 660 E1=12*MD*INERCIA/LONG(I)^3 670 E2=6*MD*INERCIA/LONG(I)^2 680 E3=2*MD*INERCIA/LONG(I) 690 E4=2*E3 700 D=3*D(I):F=3*F(I) 710 T1=1:T2=1:T3=1:T4=1:T5=1:T6=1:T7=1:T8=1:T9=1:T10=1 720 IF DESC$="N" THEN 760 725 IF DESC(I)=I THEN 730 730 IF TP(I)=1 THEN T1=.25:T2=0:T3=.25:T4=.5:T5=0:T6=0:T7=0:T8=.25:T9=.5:T10=.75 740 IF TP(I)=2 THEN T1=.25:T2=.5:T3=.25:T4=0:T5=.75:T6=.5:T7=0:T8=.25:T9=0:T10=0 750 IF TP(I)=3 THEN T1=0:T2=0:T3=0:T4=0:T5=0:T6=0:T7=0:T8=0:T9=0:T10=0 760 K(D-2,F-2)=-Ea*C(I)^2-E1*T3*S(I)^2 770 K(D-2,F-1)=-(Ea-T3*E1)*S(I)*C(I) 780 K(D-2,F)=-E2*T4*S(I) 790 K(D-1,F-2)=-(Ea-T3*E1)*S(I)*C(I) 800 K(D-1,F-1)=-(Ea*S(I)*S(I)+E1*T3*C(I)*C(I)) 810 K(D-1,F)=E2*T4*C(I) 820 K(D,F-2)=E2*T6*S(I) 830 K(D,F-1)=-E2*T6*C(I) 840 K(D,F)=E3*T7 850 K(F-2,D-2)=K(D-2,F-2) 860 K(F-1,D-2)=K(D-2,F-1) 870 K(F,D-2)=K(D-2,F) 880 K(F-2,D-1)=K(D-1,F-2) 890 K(F-1,D-1)=K(D-1,F-1) 900 K(F,D-1)=K(D-1,F) 910 K(F-2,D)=K(D,F-2) 920 K(F-1,D)=K(D,F-1) 930 K(F,D)=K(D,F) 940 K(D-2,D-2)=K(D-2,D-2)+Ea*C(I)*C(I)+E1*T1*S(I)*S(I) 950 K(D-2,D-1)=K(D-2,D-1)+(Ea-T1*E1)*S(I)*C(I) 960 K(D-2,D)=K(D-2,D)-E2*T2*S(I) 970 K(D-1,D-2)=K(D-2,D-1) 980 K(D-1,D-1)=K(D-1,D-1)+Ea*S(I)*S(I)+E1*T1*C(I)*C(I) 990 K(D-1,D)=K(D-1,D)+E2*T2*C(I) 1000 K(D,D-2)=K(D-2,D) 1010 K(D,D-1)=K(D-1,D) 1020 K(D,D)=K(D,D)+E4*T5 1030 K(F-2,F-2)=K(F-2,F-2)+Ea*C(I)*C(I)+E1*T8*S(I)*S(I) 1040 K(F-2,F-1)=K(F-2,F-1)+(Ea-T8*E1)*S(I)*C(I) 1050 K(F-2,F)=K(F-2,F)+E2*S(I)*T9 1060 K(F-1,F-2)=K(F-2,F-1) 1070 K(F-1,F-1)=K(F-1,F-1)+Ea*S(I)*S(I)+E1*T8*C(I)*C(I) 1080 K(F-1,F)=K(F-1,F)-E2*C(I)*T9 1090 K(F,F-2)=K(F-2,F) 1100 K(F,F-1)=K(F-1,F) 1105 K(F,F)=K(F,F)+E4*T10 1110 NEXT I 1115 CLS:BEEP:INPUT "Ver matriz rigidez S/N";V$ 1120 IF V$="N" THEN 1140 ELSE IF V$<>"S" THEN 1115 1125 FOR I=1 TO 3*NN:FOR J=I TO 3*NN 1130 PRINT "K(";I;J;")=";K(I,J) 1135 NEXT J:NEXT I 1140 CLS: BEEP 1145 INPUT "Numero de nudos con apoyos";NAY 1150 FOR I=1 TO NAY 1160 INPUT "Nudo";ND 1170 CLS:PRINT "Tipo de apoyo"; 1175 LOCATE 0,1 1180 INPUT "Emp,Cr,Rt,Dsl,Elst(1,2,3,4,5)";TIPO 1220 IF TIPO=1 THEN 1230 ELSE 1260 1230 FOR J=3*ND-2 TO 3*ND 1240 K(J,J)=0 1250 NEXT J 1255 GOTO 1360 1260 IF TIPO=2 THEN 1270 ELSE 1290 1270 INPUT "Desplazamiento impedido (X/Y)";DES$ 1280 IF DES$="X"THEN K(3*ND-2,3*ND-2)=0 ELSE K(3*ND-1,3*ND-1)=0 1285 GOTO 1360 1290 IF TIPO=5 THEN 1291 ELSE 1310 1291 INPUT "Despl. coacc. (X,Y,Ambos)";COAC$ 1292 IF COAC$="X" THEN INPUT "K(x)";M1:K(3*ND-2,3*ND-2)=K(3*ND-2,3*ND-2)+M1:GOTO 1360 1293 IF COAC$="Y" THEN INPUT "K(y)";M2:K(3*ND-1,3*ND-1)=K(3*ND-1,3*ND-1)+M2:GOTO 1360 1294 IF COAC$="A" THEN INPUT "K(x)";M1:K(3*ND-2,3*ND-2)=K(3*ND-2,3*ND-2)+M1:INPUT "K(y)";M2:K(3*ND-1,3*ND-1)=K(3*ND-1,3*ND-1)+M2:GOTO 1360 1310 IF TIPO=3 THEN 1320 ELSE 1345 1320 FOR J=3*ND-2 TO 3*ND-1 1330 K(J,J)=0 1340 NEXT J 1341 GOTO 1360 1345 IF TIPO=4 THEN 1346 ELSE 1360 1346 K(3*ND,3*ND)=0 1347 INPUT "Desplazamiento impedido X/Y";DES$ 1350 IF DES$="X"THEN K(3*ND-2,3*ND-2)=0 ELSE K(3*ND-1,3*ND-1)=0 1360 NEXT I 1380 REM **ENTRADA DE CARGAS* 1385 BEEP 1390 CLS:PRINT "** Cargas en los nudos **"; 1395 LOCATE 0,1 1400 INPUT "N. nudos cargados";NCAR 1460 FOR I=1 TO NCAR 1470 INPUT "Nudo";NUDO 1480 INPUT"Fx";CARGAS(3*NUDO-2) 1490 INPUT"Fy";CARGAS(3*NUDO-1) 1500 INPUT "Momento";CARGAS(3*NUDO) 1510 NEXT I 1520 '****RESOLUCION SISTEMA 1525 CLS:PRINT "Resolviendo sistema"; 1530 FOR I=1 TO 3*NN-1 1540 IF K(I,I)=0 THEN 1620 1550 FOR J=I+1 TO 3*NN 1560 PV=K(I,J)/K(I,I) 1570 IF K(J,J)=0 THEN SNL=1 ELSE SNL=0 1580 FOR K=J TO 3*NN 1590 K(J,K)=K(J,K)-K(I,K)*PV 1600 NEXT K 1605 CARGAS(J)=CARGAS(J)-CARGAS(I)*PV 1610 IF SNL=1 THEN K(J,J)=0 1615 NEXT J 1620 NEXT I 1630 '***SUST ASCENDENTE 1640 FOR I=3*NN TO 1 STEP -1 1645 REACC(I)=CARGAS(I) 1650 D=0 1670 FOR J=I+1 TO 3*NN 1680 D=D+K(I,J)*CARGAS(J) 1690 NEXT J 1700 CARGAS(I)=CARGAS(I)-D 1705 IF K(I,I)<>0 THEN CARGAS(I)=CARGAS(I)/K(I,I):REACC(I)=0 ELSE REACC(I)=-CARGAS(I):CARGAS(I)=0 1710 NEXT I 1720 BEEP:CLS 1730 PRINT " Salida desplazamientos "; 1732 LOCATE 0,1 1735 PRINT " ******************************" 1740 K=0 1750 FOR I=1 TO 3*NN 1751 K=I MOD 3 1755 IF K(I,I)=0 THEN 1820 1770 H=I/3 1775 IF FRAC(H)<>0 THEN H=INT(H)+1 1780 CLS:PRINT "Nudo";H;:LOCATE 0,1 1790 IF K=1 THEN PRINT "dx="; 1795 IF K=2 THEN PRINT "dy="; 1800 IF K=0 THEN PRINT "Giro="; 1810 IF K=1 OR K=2 THEN PRINT ROUND(1E3*CARGAS(I),-5);"mm" ELSE PRINT ROUND(CARGAS(I),-6);"rad" 1820 NEXT I 1830 CLS:PRINT " Reacciones"; 1832 LOCATE 0,1 1835 PRINT " ******************************" 1845 FOR I=1 TO 3*NN 1850 K=I MOD 3 1855 IF K(I,I)<>0 THEN 1910 1860 H=I/3 1865 IF FRAC(H)<>0 THEN H=INT(H)+1 1870 CLS:PRINT "Nudo";H;:LOCATE 0,1 1875 IF K=1 THEN PRINT "Rx="; 1880 IF K=2 THEN PRINT "Ry="; 1890 IF K=0 THEN PRINT "Momento="; 1900 IF K=1 OR K=2 THEN PRINT ROUND(REACC(I),-5);"Tn"ELSE PRINT ROUND(REACC(I),-5);"T*m" 1910 NEXT I 1920 CLS:END 1930 END