domingo, 17 de abril de 2011

CALCULO DE PILARES CIRCULARES


' pi-cir.bas
'Este programa calcula las armaduras de un grupo de pilares circulares de
' hormigon armado y sus zapatas retangulares."
'Esta escrito para Turbo Basic con "tbwindows", sin embargo es facilmente
'trasladable a un lenguaje mas moderno, por ejemplo JustBasic. En ese
'caso se deben sustituir las instrucciones de tbwindows por las de windows.
'--------------------------------------------------------------------------
'Un fichero de datos apropiado para probar este programa puede ser este
'ejemplo, donde la extension .cir es necesaria:
'"prueba.cir" 'nombre del fichero
'4 'numero de pilares a calcular
'a,3,40,25 'nombre del pilar, momento flector en mT, carga axial en T, diametro en cm
'b,4,50,25
'c,4,70,25
'd,3,80,25

'----------------------------------------------------------------------------
cls
$include "c:\tb\tbwindo.inc"
$include "c:\tb\tbmenu.inc"
key off
out &H3d9,1

dim p$(100)
dim m(100)
dim q(100)
dim d(100)
dim v(100)
dim u(100)
dim cma(100)
dim ndr(100)
dim a(100)
dim sa(100)
dim da(100)


on error goto errores

unidad:
call makewindow(0,0,2,80,fnattr%(4,3),0,0,0)
call prtwindow (1,1," Antonio Martinez Gimenez ")

call qfill(2,1,25,80,176,fnattr%(0,4))
call makewindow(6,16,8,52,fnattr%(10,2),2,1,1)
call prtcwindow (1,"AMGEDEA ")
call prtcwindow (2,"SOFTWARE")
call prtcwindow (3,"ARQUITECTURA E INGENIERIA ")
call prtcwindow (4,"------------------------------------------------")
DELAY 1

cambio:
call makewindow(9,13,8,52,fnattr%(4,3),2,1,1)
call prtcwindow (1,"CALCULO")
call prtcwindow (2,"DE PILARES CIRCULARES DE HORMIGON ARMADO")
call prtcwindow (3,"SEGUN LA NORMA EH-91.")
call prtcwindow (4,"------------------------------------------------")
call prtwindow (6,2,"Unidad o directorio donde grabar resultados")
color 4,3
locate 15,60:input, uni$
nombre:
call removewindow
nombra:
call removewindow
cls
files uni$+"*.cir"
'print "Para seguir pulse una tecla"
'while inkey$="":wend
'cls

call makewindow(0,0,2,80,fnattr%(4,3),0,0,0)
call prtwindow (1,1," A.M.G. ESTUDIOS DE ARQUITECTURA ")

call makewindow(9,13,8,52,fnattr%(4,3),2,1,1)
call prtcwindow (1,"poner , entre PROYECTO y PORTICO=(una letra)")
call prtcwindow (2,"---------------------------------------")
call prtcwindow (3,"Nombre del fichero")
call prtcwindow (6,"Para volver al directorio pulsar ")






color 4,3
locate 12,54:INPUT "",pp$
if pp$="" then goto nombra

call removewindow
call qfill(2,1,25,80,176,fnattr%(0,4))
nfp$=uni$+pp$
n$=nfp$+".cir"

pi#=3.141592


call makewindow(3,10,13,64,fnattr%(10,2),2,1,1)
call prtcwindow (1,"AMGEDEA ")
call prtwindow (2,2,"Calculo de pilares circulares de hormigon armado s/ EH-91")
call prtwindow (3,2,"Pantalla/Impresora/Disco/i/d")
call prtwindow (4,2,"Resistencia del terreno <2> Kg/cm2")
call prtwindow (5,2,"Tipo de acero <4100>")
call prtwindow (6,2,"Tipo de hormigon <175>")
call prtwindow (7,2,"Tipo de control: reducido//intenso r//i")
call prtwindow (8,2,"Daños previsibles: pequeños//importantes p//i")
color 10,2
locate 6,50:input"",opc$
if opc$="" then opc$="p"
locate 7,50:input"",rt
if rt=0 then rt=2
locate 8,35:input"",ta%
if ta%=0 then ta%=4100
locate 9,35:input"",th%
if th%=0 then th%=175
locate 10,63:input"",tc$
if tc$="" then tc$="n"
locate 11,70:input"",dp$
if dp$="" then dp$="m"

select case tc$
case "r": ca=1.2 :ch=1.7:ce=1.8
case "n": ca=1.15:ch=1.5:ce=1.6
case "i": ca=1.1 :ch=1.4:ce=1.5
end select
select case dp$
case "p": ce=ce-0.1
case "i": ce=ce+0.2
end select

ta=10*(ta%/ca)
th=10*(th%/ch)

call removewindow
inicio:

' entrada de datos
if n$<>"panta.cir" then
OPEN n$ for input as #1
INPUT #1, ndp
for n=1 to ndp
input #1, p$(n),m(n),q(n),d(n)
NEXT
CLOSE #1
end if
if n$="panta.cir" then
ndp=1
call makewindow(3,10,13,64,fnattr%(10,4),2,1,1)
call prtwindow (2,2,"PILAR")
call prtwindow (3,2,"MOMENTO mT.")
call prtwindow (4,2,"CARGA T.")
call prtwindow (5,2,"DIAMETRO DEL PILAR cm.")

locate 5,19: input , p$(1)
locate 6,25: input , m(1)
locate 7,23: input , q(1)
locate 8,34: input , d(1)
call removewindow
end if

for n=1 to ndp

'numero de redondos
if d(n)<=35 then ndr(n)=6 else ndr(n)=8
calculo:
' calculo de v
v(n)=q(n)/(th*pi#*((d(n)/100)^2)/4)
' calculo de u
u(n)=m(n)/(th*pi#*((d(n)/100)^3)/4)

' calculo de w
u=u(n):v=v(n)
restore tabla
read ndt
for m=1 to ndt
v1=vv
u11=uu1:u12=uu2
w11=ww1:w12=ww2
read vv
read uu1,uu2
read ww1,ww2
v2=vv
u21=uu1:u22=uu2
w21=ww1:w22=ww2
if v1=v then goto fuera
next m
fuera:

h=(v-v1)/(v2-v1)
u1=u11+h*(u21-u11)
u2=u12+h*(u22-u12)
if u>u2 then
call makewindow(3,10,6,64,fnattr%(10,3),2,1,0)
call prtwindow (2,2,"Aumentar diametro del pilar "+p$(n))
call prtwindow (3,2,"Antiguo diametro "+STR$(d(n))+" cm." )
call prtwindow (4,2,"Nuevo diametro ")
locate 7,27:input "",d(n)
call removewindow
goto calculo
end if
w1=w11+h*(w21-w11)
w2=w12+h*(w22-w12)
w=w1+(u-u1)*(w2-w1)/(u2-u1)


'dd$="\ \ ##,.### ##,.### ##,.###"
'call makewindow(13,18,4,44,fnattr%(10,4),2,1,1)
'locate 14,22:print using dd$;"u";u1;u;u2
'locate 15,22:print using dd$;"w";w1;w;w2
' call seguir
' call removewindow
w(n)=w

' calculo de la capacidad mecanica de la armadura
cma(n)=w*th*pi#*((d(n)/100)^2)/4

' seccion de acero
a(n)=10000*cma(n)/ta
'seccion de la armadura
sa(n)=a(n)/ndr(n)
'diametro de la armadura
da(n)=10*sqr(4*sa(n)/pi#)
gosub redondos

next n

gosub escritura


end


redondos:
IF da(n)>=0 AND da(n)<=12 THEN da(n)=12
IF da(n)>12 AND da(n)<=16 THEN da(n)=16
IF da(n)>16 AND da(n)<=20 THEN da(n)=20

if da(n)>20 then
call makewindow(3,10,7,64,fnattr%(6,3),2,1,0)
call prtwindow (2,2,"Diametro excesivo o armado insuficiente en pilar "+p$(n))
call prtwindow (2,2,"Aumentar diametro pilar (d) o numero de redondos (n)")
locate 5,40:dn$=input$(1)
if dn$="n" then
call prtwindow (3,2,"Numero de redondos actual "+str$(ndr(n)))
call prtwindow (4,2,"Numero de redondos ")
locate 7,30:input "",ndr(n)
end if
if dn$="d" then
call prtwindow (3,2,"Diametro pilar actual "+str$(d(n)))
call prtwindow (4,2,"Nuevo diametro del pilar ")
locate 7,39:input "",d(n)
end if
call removewindow
goto calculo
end if
RETURN




errores:
IF ERR=53 THEN RESUME next
if err=27 then
input "Ponga papel rapido ",aaa
resume next
end if
resume next

escritura:

select case opc$
case "p":open "scrn:" for output as #2
case "i":open "lpt1:" for output as #2
' case "d":open n$ for apend as #2
end select
color 3,9
locate 2,1
print #2, " Carga Momento --coeficientes-- Acero Pilar "
print #2, "Pilar (T) (mT) v u w cap.mec.(T) cm2 ndr X dr Dia "
print #2, "-------------------------------------------------------------------------------"
d1$="\ \ ###,.## ##,.## #,.### #,.### #,.### ##,.## ##,.## ## ## ### "

for n=1 to ndp
print using d1$;p$(n);q(n);m(n);v(n);u(n);w(n);cma(n);a(n);ndr(n);da(n);d(n)
next n


call seguir

'input "Resistencia del terreno ",rt
locate 2,1
' cimentacion de zapatas
PRINT #2, " ZAPATA DIMENSIONES ARMADURAS SECCION "
print #2, " cmXcmXcm m3 cm2Xcm2 "
print #2, "-------------------------------------------------------------------------------"
d1$= "\ \###\\###\\### ##,.### ##\\##\\##\\## ##,.##\\##,.## "
d2$= "\ \ ###,.##\ \ ###.##\ \ "
for m=1 to ndp
for p=1 to 2
if p=1 then zap$(m)="c" else zap$(m)="r"
IF zap$(m)="r" THEN la=10*INT((SQR(2300*q(m)/rt)+10)/10)
IF zap$(m)="c" THEN la=10*INT((SQR(1150*q(m)/rt)+10)/10)
IF la<60 THEN la=60
IF la<150 THEN al=30 ELSE al=10*(1+la\50)
rtc=1000*q(m)/la^2
IF zap$(m)="r" THEN rtc=2*rtc
mxz=0.8*rtc*la*(0.5*la-0.35*h)^2/10^5
myz=0.8*rtc*la*(0.25*la-0.35*h)^2/10^5
ppx=0.5*la*al*0.11666
ppy=2*ppx
ax=0.2805*ppx*(1-SQR(1-320*mxz/(ppx*(al-5))))
ay=0.2805*ppy*(1-SQR(1-320*myz/(ppy*(al-5))))
az=0.2805*ppy*(1-SQR(1-320*mxz/(ppy*(al-5))))
nx=fnMAX(1+la\40,1+ax\3.1416)
ny=fnMAX(1+la\20,1+ay\3.1416)
nz=fnMAX(1+la\20,1+az\3.1416)
FOR ff=1 TO 3
d(1)=11.284*SQR(ax/nx)
call redondo(d(1))
d(2)=11.284*SQR(ay/ny)
call redondo(d(2))
d(3)=11.284*SQR(az/nz)
call redondo(d(3))
NEXT ff
IF zap$(m)="c" THEN
PRINT #2, using d1$;p$(m);la;"X";la;"X";al;la*la*al/10^6;_
nz;"R";d(3);"X";nz;"R";d(3);az;"X";az
end if
IF zap$(m)="r" THEN
PRINT #2, using d1$;p$(m);la;"X";la/2;"X";al;la*la*al/(2*10^6);_
nx;"R";d(1);"X";ny;"R";d(2);ax;"X";ay
end if
next p
print #2, "-------------------------------------------------------------------------------"
next m
close #2
' -----------------------
5050 '


end

sub redondo(d)
IF d>=0 AND d<=12 THEN d=12
IF d>12 AND d<=16 THEN d=16
IF d>16 AND d<=20 THEN d=20
end sub

def fnMAX3(a,b,c)
if a>=b and a>=c then fnMAX3=a
if b>=a and b>=c then fnMAX3=b
if c>=a and c>=b then fnMAX3=c
end def
def fnMAX(a,b)
if a>=b then fnMAX=a else fnMAX=b
end def

sub seguir
locate 24,20:print "para seguir pulsa una tecla";
while inkey$="":wend
locate 24,20:print " ";
end sub

tabla:
data 18
data 0
data 0.000,0.290
data 0.000,1.000
data 0.1
data 0.040,0.300
data 0.000,1.000
data 0.2
data 0.065,0.305
data 0.000,1.000
data 0.3
data 0.080,0.305
data 0.000,1.000
data 0.4
data 0.090,0.300
data 0.000,1.000
data 0.5
data 0.082,0.296
data 0.000,1.000
data 0.6
data 0.070,0.284
data 0.000,1.000
data 0.7
data 0.046,0.270
data 0.000,1.000
data 0.8
data 0.016,0.254
data 0.000,1.000
data 0.9
data 0.000,0.235
data 0.050,1.000
data 1.0
data 0.000,0.214
data 0.170,1.000
data 1.1
data 0.000,0.196
data 0.280,1.000
data 1.2
data 0.000,0.174
data 0.380,1.000
data 1.3
data 0.000,0.150
data 0.500,1.000
data 1.4
data 0.000,0.122
data 0.610,1.000
data 1.5
data 0.000,0.090
data 0.720,1,000
data 1.6
data 0.000,0.060
data 0.840,1.000
data 1.7
data 0.000,0.024
data 0.960,1.000

No hay comentarios: