1 ON ERROR GOTO 3000 :CLS: INPUT "Nueva estructura?(s/EXE)",ll$:IF ll$="s" GOTO 2 ELSE GOTO 3
2 ERASE r,a,x,y,xx,yy,b1,b2,b,cx,cy,n,cast,op,fi,fo,del,m,m1,m1b,m2b,res,cru,k,gam,mo,mu,su,map,moin,cor,teta,epsi,eal,ei,gjl,ep,rigi,del1,del2,pp,tt,p
3 CLS:MODE 4:PRINT "1:Nudo / 2:Estructura completa /3:Castigliano /4:Cross /5:Mat. ";:i$=INPUT$(1):CLS:ii=VALF(i$)
5 ON ii GOTO 10,100,500,100,100
10 PRINT "Est. articulada : No. de axiles actuantes conocidos = ";n;:INPUT n
15 DIM r(n),a(n),x(n),y(n)
20 PRINT "angulos en grados.":sx=0:sy=0
25 FOR i=1 TO n
30 PRINT "r(";i;")=";r(i);:INPUT r(i)
35 PRINT "a(";i;")=";a(i);:INPUT a(i)
36 IF r(i)<0 THEN r(i)=-r(i):a(i)=a(i)+180
40 x(i)=REC(r(i),a(i)):y(i)=Y
45 sx=sx+x(i):sy=sy+y(i)
50 NEXT i
55 PRINT "No. de axiles desconocidos(1/2)=";m;:INPUT m
56 ON (3-m) GOTO 60,80
60 PRINT "Sus direcciones en grados:":PRINT "d1=";d1;:INPUT d1:PRINT "d2=";d2;:INPUT d2
65 t2=(sy*COSd1-sx*SINd1)/(SINd1*COSd2-SINd2*COSd1)
70 IF COSd1<>0 THEN t1=(-sx-t2*COSd2)/COSd1 ELSE t1=(-sy-t2*SINd2)/SINd1
75 PRINT "t1=";t1,"t2=";t2:GOTO 3
80 t=POL(sx,sy):a=Y+180
90 PRINT "t=";t,"a=";a:GOTO 3
100 PRINT "No. de barras b= ";b;:INPUT b:PRINT "No. de nudos n= ";n;:INPUT n:PRINT "No. de coacciones c=";c;:INPUT c:IF ii>=4 THEN GOTO 110
105 IF b<>(2*n-c) THEN PRINT "La estructura no es isostatica.":GOTO 3
110 INPUT "Vienes de lib?(s/EXE)",vie$:IF vie$="s" THEN ERASE b,b1,b2
115 DIM xx(n),yy(n),b1(b),b2(b),b(n,n),fo(b)
120 PRINT "Coordenadas de los nudos:"
125 FOR i=1 TO n
130 PRINT "x("i")=";xx(i);:INPUT xx(i):PRINT "y("i")=";yy(i);:INPUT yy(i)
135 NEXT i
140 PRINT "Barras:"
145 FOR i=1 TO b
150 PRINT "barra "i" : del nudo ";b1(i);:INPUT b1(i):PRINT "            al  nudo ";b2(i);:INPUT b2(i)
155 y=yy(b2(i))-yy(b1(i)):x=xx(b2(i))-xx(b1(i))
160 t=POL(x,y):b(b1(i),b2(i))=Y:fo(i)=t
165 NEXT i
166 IF ii=4 THEN GOTO 800
167 IF ii=5 GOTO 1500
170 PRINT "No. de estados = ";e;:INPUT e
175 DIM cx(n,e),cy(n,e),n(b,e)
180 FOR w=1 TO e
185 PRINT "Estado "w" ; cargas en nudos :"
190 FOR i=1 TO n
195 PRINT "cx(nudo "i") = ";cx(i,w);:INPUT cx(i,w):PRINT "cy(nudo "i") = ";cy(i,w);:INPUT cy(i,w)
200 NEXT i
205 FOR j=1 TO n
210 sx=cx(j,w):sy=cy(j,w):con=1
215 FOR i=1 TO b
220 IF b2(i)=j THEN sx=sx-n(i,w)*COSb(b1(i),b2(i)):sy=sy-n(i,w)*SINb(b1(i),b2(i))
225 IF b1(i)=j THEN con=con+1
230 NEXT i
245 v=0
250 FOR i=1 TO b
255 IF v=0 AND b1(i)=j THEN d1=b(b1(i),b2(i)):v=1:primi=i
260 IF b1(i)=j AND b(b1(i),b2(i))<>d1 THEN d2=b(b1(i),b2(i)):segui=i
265 NEXT i
270 ON con GOTO 275,280,300
275 IF sx<1E-3 AND sy<1E-3 THEN GOTO 390 ELSE PRINT "Hay algun error.Repase datos.":GOTO 3
280 IF sx=0 AND sy=0 THEN n(primi,w)=0 ELSE n(primi,w)=POL(sx,sy):alfa=Y
285 ti=SINb(b1(primi),b2(primi)):ta=COSb(b1(primi),b2(primi))
286 IF ABS(ti+SINalfa)>1E-3 OR ABS(ta+COSalfa)>1E-3 THEN n(primi,w)=-n(primi,w):GOTO 390
290 IF ABS(ti+SINalfa)<1E-3 AND ABS(ta+COSalfa)<1E-3 THEN GOTO 390 ELSE PRINT "Hay algun error.Repase datos.":GOTO 3
300 t2=(sy*COSd1-sx*SINd1)/(SINd1*COSd2-SINd2*COSd1)
305 IF COSd1<>0 THEN t1=(-sx-t2*COSd2)/COSd1 ELSE t1=(-sy-t2*SINd2)/SINd1
310 n(primi,w)=t1
320 n(segui,w)=t2
390 NEXT j
400 PRINT "Axiles del estado "w" : "
402 FOR i=1 TO b
405 PRINT "N("b1(i)","b2(i)") = ";n(i,w)
410 NEXT i
420 NEXT w
430 GOTO 3
500 PRINT "No. de estados = ";e;:INPUT e:PRINT "No. de barras = ";b;:INPUT b:DIM cast(e,e),op(e,e),del(b),m(b,e),fi(b)
505 PRINT "Indique:"
510 FOR w=1 TO e
515 CLS: PRINT "Estado "w" : 1>sigue igual /    2>cambia . ";kk;:INPUT kk
525 ON kk GOTO 550,530
530 PRINT "Estado "w" (axiles):"
535 FOR i=1 TO b
540 PRINT "N("i") = ";m(i,w);:INPUT m(i,w)
545 NEXT i
546 GOTO 552
550 FOR i=1 TO b :m(i,w)=n(i,w):NEXT i
552 NEXT w
555 PRINT "Desea obtener:"
560 FOR i=1 TO e
565 FOR j=i TO e
570 PRINT "cast("i","j")   1>si / 2>no ";:i$=INPUT$(1):CLS:op(i,j)=VALF(i$)
575 NEXT j,i
580 PRINT "L/EA constante (1>si;2>no) ";:i$=INPUT$(1):CLS:ii=VALF(i$):ON ii GOTO 585,590
585 PRINT "L/EA = ";lea;:INPUT lea:FOR i=1 TO b:fi(i)=lea:NEXT i: GOTO 620
590 PRINT "EA = ";ea;:INPUT ea
595 PRINT "Programa o teclado(1/2)";:a$=INPUT$(1):CLS:aa=VALF(a$):ON aa GOTO 600,610
600 FOR i=1 TO b
602 fi(i)=fo(i)/ea
605 NEXT i
606 GOTO 620
610 FOR i=1 TO b
612 PRINT "L (barra "i") = ";:INPUT fi(i):fi(i)=fi(i)/ea
615 NEXT i
620 PRINT CHR$(238);"L iniciales (1>si;2>no)";:b$=INPUT$(1):CLS:bb=VALF(b$):ON bb GOTO 625,640
625 FOR i=1 TO b
630 PRINT CHR$(238);"L("i") = ";del(i);:INPUT del(i)
634 NEXT i
635 GOTO 650
640 FOR i=1 TO b:del(i)=0:NEXT i
650 FOR i=1 TO e
655 FOR j=i TO e
660 IF op(i,j)=1 THEN 670 ELSE 690
670 cast(i,j)=0
672 FOR k=1 TO b
675 cast(i,j)=cast(i,j)+m(k,i)*m(k,j)*fi(k)+del(k)*m(k,j)
680 NEXT k
685 PRINT "cast("i","j") = ";cast(i,j)*1E4;"*10";CHR$(155);CHR$(148)
690 NEXT j,i
700 GOTO 3
800 PRINT "No. de estados = (G.T.+1) = ";e;:INPUT e
802 ERASE su:DIM k(b,2),gam(b,2),mo(b,2,e),mu(b,2),m1(n),m1b(b,2,e),m2b(b,2,e),res(b,2,e),su(n),map(n,e),cru(n),moin(b,2,e),cor(b,e),teta(b,2,e),epsi(e)
804 PRINT "Indique nudos(1>normal;2>empo - tramiento;3>articulado.):"
805 FOR j=1 TO n
806 PRINT "nudo ";j;" : ";cru(j);:INPUT cru(j)
808 NEXT j
810 PRINT "Seccion constante?(1>si;2>no)";ss;:INPUT ss
815 ON ss GOTO 820,860
820 PRINT "EI (t.m^2) = ";ei;:INPUT ei
830 FOR i=1 TO b
835 k(i,1)=4*ei/fo(i):k(i,2)=4*ei/fo(i)
840 gam(i,1)=.5:gam(i,2)=.5
845 NEXT i
855 GOTO 880
860 FOR i=1 TO b
865 PRINT "k("i",ed) = ";k(i,1);:INPUT k(i,1):PRINT CHR$(138);"("i",ed) = ";gam(i,1);:INPUT gam(i,1)
866 PRINT "k("i",ef) = ";k(i,2);:INPUT k(i,2):PRINT CHR$(138);"("i",ef) = ";gam(i,2);:INPUT gam(i,2)
870 IF ABS(k(i,1)*gam(i,2)-k(i,2)*gam(i,1))>1 THEN PRINT "Hay algun error (si no empleas  simplificaciones)."
875 NEXT i
880 FOR j=1 TO n
885 FOR i=1 TO b
890 IF b1(i)=j THEN su(j)=su(j)+k(i,1)
895 IF b2(i)=j THEN su(j)=su(j)+k(i,2)
896 NEXT i
900 NEXT j
905 FOR i=1 TO b
910 IF su(b1(i))<>0 THEN mu(i,1)=k(i,1)/su(b1(i))
915 IF su(b2(i))<>0 THEN  mu(i,2)=k(i,2)/su(b2(i))
916 IF cru(b1(i))=2 THEN mu(i,1)=0
917 IF cru(b2(i))=2 THEN mu(i,2)=0
918 IF cru(b1(i))=3 THEN mu(i,1)=1
919 IF cru(b2(i))=3 THEN mu(i,2)=1
920 NEXT i
922 FOR w=1 TO e
925 FOR i=1 TO b
930 PRINT "M";CHR$(144);"("i",ed,estado "w") = ";mo(i,1,w);:INPUT mo(i,1,w):moin(i,1,w)=mo(i,1,w)
932 PRINT "M";CHR$(144);"("i",ef,estado "w") = ";mo(i,2,w);:INPUT mo(i,2,w):moin(i,2,w)=mo(i,2,w)
935 NEXT i
940 NEXT w
942 FOR w=1 TO e
943 PRINT "Estado "w" : "
944 PRINT CHR$(139);"(estado "w")= ";epsi(w);:INPUT epsi(w)
945 PRINT "Hay momentos aplicados en nudos?(1>si;2>no)";cc;:INPUT cc
950 IF cc=2 THEN GOTO 1000
955 FOR j=1 TO n
960 PRINT "Maplicado(nudo "j" ) = ";map(j,w);:INPUT map(j,w)
965 NEXT j
1000 NEXT w
1004 ERASE res:DIM res(b,2,e):w=0
1005 w=w+1:IF w=(e+1) THEN GOTO 3
1010 FOR j=1 TO n
1015 m1(j)=map(j,w)
1016 NEXT j
1017 FOR j=1 TO n
1020 FOR i=1 TO b
1025 IF b1(i)=j THEN m1(j)=m1(j)-mo(i,1,w)
1030 IF b2(i)=j THEN m1(j)=m1(j)-mo(i,2,w)
1035 NEXT i
1040 NEXT j
1045 FOR j=1 TO n
1050 FOR i=1 TO b
1055 IF b1(i)=j THEN m1b(i,1,w)=mu(i,1)*m1(j)
1060 IF b2(i)=j THEN m1b(i,2,w)=mu(i,2)*m1(j)
1065 NEXT i
1070 NEXT j
1075 FOR i=1 TO b
1080 m2b(i,1,w)=gam(i,1)*m1b(i,2,w)
1085 m2b(i,2,w)=gam(i,2)*m1b(i,1,w)
1086 res(i,1,w)=res(i,1,w)+mo(i,1,w)+m1b(i,1,w):res(i,2,w)=res(i,2,w)+mo(i,2,w)+m1b(i,2,w)
1087 IF ABS(mo(i,1,w))+ABS(m1b(i,1,w))<epsi(w) THEN jo=jo+1
1090 mo(i,1,w)=m2b(i,1,w):mo(i,2,w)=m2b(i,2,w)
1095 NEXT i
1096 ERASE m1,m1b,m2b:DIM m1(n),m1b(b,2,e),m2b(b,2,e)
1097 IF jo=b THEN jo=0:GOTO 1200
1098 IF jo<b THEN jo=0:GOTO 1017
1200 PRINT "Estado "w" : "
1205 FOR i=1 TO b
1210 PRINT "Mcross(barra "i",ed) = ";res(i,1,w):PRINT "Mcross(barra "i",ef) = ";res(i,2,w)
1215 NEXT i
1220 FOR i=1 TO b
1225 cor(i,w)=-(res(i,1,w)+res(i,2,w))/fo(i)
1230 PRINT "Qcross (barra "i") = ";cor(i,w)
1232 NEXT i
1233 PRINT "Giros (biemp) :"
1234 FOR i=1 TO b
1235 teta(i,1,w)=((res(i,1,w)-moin(i,1,w))-gam(i,1)*(res(i,2,w)-moin(i,2,w)))/k(i,1)/(1-gam(i,1)*gam(i,2))
1240 teta(i,2,w)=((res(i,2,w)-moin(i,2,w))-gam(i,2)*(res(i,1,w)-moin(i,1,w)))/k(i,2)/(1-gam(i,1)*gam(i,2))
1245 PRINT CHR$(140);" (barra "i",ed) = ";teta(i,1,w)*1E4;"*10";CHR$(155);CHR$(148) ;" + ";CHR$(178);"/L"
1250 PRINT CHR$(140);" (barra "i",ef) = ";teta(i,2,w)*1E4;"*10";CHR$(155);CHR$(148);" + ";CHR$(178);"/L"
1255 NEXT i
1260 GOTO 1005
1500 PRINT "Tipo de estructura : art. (1) ; ret. (2) ; empa. (3) ? ";tipo;:INPUT tipo:IF tipo=1 THEN rr=2 ELSE rr=3
1501 PRINT "No. de nudos (no O) = ";nn;:INPUT nn:ERASE rigi :  DIM eal(b),ei(b),gjl(b),ep(rr,rr,b,3),rigi(rr,rr,nn,nn):PRINT "Barras iguales?(1=si;2=no)";ro;:INPUT ro:ON ro GOTO 1502,1503
1502 PRINT "EA=";ea;:INPUT ea:PRINT "EI=";ei;:INPUT ei:PRINT"GJ=";gj;:INPUT gj:FOR i=1 TO b:eal(i)=ea/fo(i):ei(i)=ei:gjl(i)=gj/fo(i):NEXT i:GOTO 1504
1503 FOR i=1 TO b:PRINT "EA/L (barra "i" )= ";eal(i);:INPUT eal(i):PRINT "EI (barra "i" )= ";ei(i);:INPUT ei(i):PRINT "GJ/L (barra "i" )= ";gjl(i);:INPUT gjl(i):NEXT i
1504 PRINT "Obtengo K (1);esfuerzos (2) ?";ga;:INPUT ga:ON ga GOTO 1515,1900
1515 ON tipo GOTO 1520,1540,1540
1520 FOR i=1 TO b
1522 al=b(b1(i),b2(i))
1525 e1=eal(i)*(COSal)^2:e2=eal(i)*COSal*SINal:e3=e2:e4=eal(i)*(SINal)^2
1530 j=1:GOSUB 3530:j=3:GOSUB 3530:e1=-e1:e2=-e2:e3=-e3:e4=-e4:j=2:GOSUB 3530
1535 NEXT i
1536 GOTO 1565
1540 FOR i=1 TO b
1545 al=b(b1(i),b2(i))
1547 IF tipo=2 THEN e1=eal(i) ELSE e1=gjl(i)
1550 e2=12*ei(i)/fo(i)^3:e3=4*ei(i)/fo(i):e4=6*ei(i)/fo(i)^2:e5=e4
1552 IF tipo=2 THEN hh=3555 ELSE hh=3655
1555 j=1:GOSUB hh:e4=-e4:e5=-e5:j=3:GOSUB hh:e1=-e1:e2=-e2:e3=e3/2:e4=-e4:j=2:GOSUB hh
1560 NEXT i
1565 FOR u=1 TO nn
1570 FOR v=u TO nn
1575 IF u=v THEN 1580 ELSE 1680
1580 FOR go=1 TO b
1585 IF b1(go)=u THEN con=1:GOSUB 3600
1590 IF b2(go)=u THEN con=3:GOSUB 3600
1600 NEXT go
1610 GOTO 1800
1680 FOR go=1 TO b
1690 IF b1(go)=u AND b2(go)=v THEN con=2:GOSUB 3600
1700 NEXT go
1800 NEXT v
1805 NEXT u
1810 FOR u=1 TO nn
1815 FOR v=u TO nn
1820 FOR i=1 TO rr
1825 FOR j=1 TO rr
1830 PRINT "K (";i;j;";";u;v;") = ";rigi(i,j,u,v)
1835 NEXT j
1840 NEXT i
1845 NEXT v
1850 NEXT u
1855 GOTO 1504
1900 PRINT "Esfuerzos p' en la barra ... ";ba;:INPUT ba:ERASE pp,p,tt:DIM del1(rr),del2(rr),pp(rr,2),p(rr,2),tt(3,3)
1905 PRINT "Movimientos d'1,barra :"
1910 FOR i=1 TO rr
1915 PRINT "@"i" = ";del1(i);:INPUT del1(i)
1920 NEXT i
1925 PRINT "Movimientos d'2,barra :"
1930 FOR i=1 TO rr
1935 PRINT "@"i" = ";del2(i);:INPUT del2(i)
1940 NEXT i
1945 FOR i=1 TO rr
1950 FOR j=1 TO rr
1955 pp(i,1)=pp(i,1)+ep(i,j,ba,1)*del1(j)+ep(i,j,ba,2)*del2(j)
1957 pp(i,2)=pp(i,2)+ep(j,i,ba,2)*del1(j)+ep(i,j,ba,3)*del2(j)
1960 NEXT j
1962 PRINT "p'1"i",barra = ";pp(i,1):PRINT "p'2"i",barra = ";pp(i,2)
1965 NEXT i
1970 PRINT "Ojo: p = T(tras) . p'"
1975 alfa=b(b1(ba),b2(ba))
1976 IF tipo=2 THEN tt(1,1)=COSalfa:tt(1,2)=-SINalfa:tt(2,1)=SINalfa:tt(2,2)=COSalfa:tt(3,3)=1
1977 IF tipo=3 THEN tt(1,1)=COSalfa:tt(1,3)=-SINalfa:tt(3,1)=SINalfa:tt(3,3)=COSalfa:tt(2,2)=1
1980 IF tipo=1 THEN p(1,1)=COSalfa*pp(1,1)+SINalfa*pp(2,1):p(1,2)=COSalfa*pp(1,2)+SINalfa*pp(2,2):PRINT "p1 barra = ";p(1,1):PRINT "p2 barra = ";p(1,2):GOTO 1900
1985 FOR i=1 TO 3
1990 FOR j=1 TO 3
1995 p(i,1)=p(i,1)+pp(j,1)*tt(j,i)
2000 p(i,2)=p(i,2)+pp(j,2)*tt(j,i)
2005 NEXT j
2010 PRINT "p1 "i" ,barra = ";p(i,1):PRINT "p2 "i" ,barra = ";p(i,2)
2015 NEXT i
2020 GOTO 1900
3000 PRINT "Hay algun error en la linea";ERL;"de tipo";ERR:INPUT "Repasa datos?(s/EXE)  ",jy$:IF jy$="s" THEN RESUME 3 ELSE RESUME NEXT
3530 ep(1,1,i,j)=e1:ep(1,2,i,j)=e2:ep(2,1,i,j)=e3:ep(2,2,i,j)=e4
3535 RETURN
3555 ep(1,1,i,j)=e1*(COSal)^2+e2*(SINal)^2:ep(1,2,i,j)=(e1-e2)*SINal*COSal:ep(1,3,i,j)=-e4*SINal:ep(2,1,i,j)=(e1-e2)*SINal*COSal
3560 ep(2,2,i,j)=e1*(SINal)^2+e2*(COSal)^2:ep(2,3,i,j)=e4*COSal:ep(3,1,i,j)=-e5*SINal:ep(3,2,i,j)=e5*COSal:ep(3,3,i,j)=e3
3565 RETURN
3600 FOR i=1 TO rr
3605 FOR j=1 TO rr
3610 rigi(i,j,u,v)=rigi(i,j,u,v)+ep(i,j,go,con)
3615 NEXT j
3620 NEXT i
3625 RETURN
3655 ep(1,1,i,j)=e1*(COSal)^2+e3*(SINal)^2:ep(1,2,i,j)=-e5*SINal:ep(1,3,i,j)=(e1-e3)*SINal*COSal:ep(2,1,i,j)=-e4*SINal:ep(2,2,i,j)=e2
3660 ep(2,3,i,j)=e4*COSal:ep(3,1,i,j)=(e1-e3)*SINal*COSal:ep(3,2,i,j)=e5*COSal:ep(3,3,i,j)=e1*(SINal)^2+e3*(COSal)^2
3665 RETURN
