You are on page 1of 24

{

U. P. A. E. P.
Materia :Analisis Estructural II
Escuela :Ing. Civil
Semestre :7 Otoo 95
Alumno :Marco Antonio Agustin Almeida Porras
Matricula:70118
Profesor :M.I Jaime Juarez Botello
Trabajo :Programa del Metodo Matricial}

program
pedir_datos;
{$m 65520,10,635000}
uses
Crt,printer;
const
maxn=9;
maxb=10;
maxm=20;
maxc=2;
maxs=3;
pi=3.141592654;
type
dato_inicial=record
n,
s,
b,
c:integer;
end;
dat_nudos=record
x,
y:real;
end;
dat_barras=record
ndi,
ndj:integer;
fi,l,c,s,i,e,a:real;
r:array[1..6,1..6] of real;
end;
dat_seccion=record
at,
i,
j:real
end;
dat_numero=record
i,a,e:real;
end;
datos_fija=record
v1,v2,m1,m2:real;
end;
dat_barra_ca=record
{fen:array[1..3] of real;}

u:array[1..6] of real;
uk:array[1..6] of real;
fe:array[1..6] of real;
fo:array[1..6] of real;
fog:array[1..6] of real;
ug:array[1..6] of real;
feg:array[1..6] of real;
end;
vec_barras=record
kg:array[1..6,1..6] of real;
end;
condicion_carga_ma=record
ue:array[1..maxm] of real;
foe:array[1..maxm] of real;
fee:array[1..maxm] of real;
pe:array[1..maxm] of real;
bc:array[1..maxb] of dat_barra_ca;
ng:array[1..3,1..maxn] of real;
end;
Matriz = Array[ 1..Maxm ,1..Maxm ] Of Real ;
Vector = Array[ 1..Maxm ]
Of Real ;
cadena=string[80];
var
di:dato_inicial;
db:array[1..maxb] of dat_barras;
dn:array[1..maxn] of dat_nudos;
dsa:array[1..maxs] of dat_numero;
b:array[1..maxb] of vec_barras;
cf:array[1..3,1..maxn] of integer;
ne:array[1..3,1..maxn] of integer;
ke:array[1..maxm,1..maxm] of real;
c:array[1..maxc] of condicion_carga_ma;
ds:dat_seccion;
df:datos_fija;
acu,bai,baf,
i,j,se,opcion :byte;
pr,es,movimiento:char;
ca,f,q,w,K ,N : Byte ;
A ,U ,ut
: Matriz ;
B1 ,Y ,X
: Vector ;
Suma
: Real ;
x1,x2,y1,y2:real;
vector1:array [1..10] of string[80];
{************************************************************}
Function croutu(f,q:Byte):REal;
Begin
Suma := 0 ;
If f>1 Then
Begin
For K:=1 To f-1 Do
Suma := Suma + u[ k ,f ] * u[ K,q]*ut [k,k] ;
End ;

croutu := (a[f,q] - Suma)/ut[f,f] ;


end;
Function croutd(f:Byte):REal;
Begin
Suma := 0 ;
If f>1 Then
Begin
For K:=1 To f-1 Do
Suma := Suma + u[ k ,f ]*u[k,f ]*ut[k,k];
End ;
croutd := a[f,f] - Suma ;
end;
Function Calcy( f:Byte ):Real ;
Begin
Suma := 0 ;
If f>1 Then
Begin
For K := 1 To f - 1 Do
Suma := Suma + Ut[ f ,K ] * Y[ K ] ;
End ;
Calcy := (B1[ f ] - Suma )/Ut[f,f];
End ;
Function Calcx( f ,acu:Byte ):Real ;
Begin
Suma := 0 ;
If True Then
Begin
For K := f + 1 To acu Do
Suma := Suma + U[ f ,K ] * X[ K ] ;
End ;
Calcx := ( Y[ f ] - Suma ) / U[ f ,f ] ;
End ;
function pt(x,y:real):real;
begin
pt:=exp(ln(x)*y)
end;
{ PROCEDURE
ESCRI(Y,FONDO,COLOR:INTEGER;PALABRA:CADENA);
VAR
LONGITUD,X:INTEGER;
BEGIN
LONGITUD:=LENGTH(PALABRA);
X:=ROUND((80-LONGITUD)/2);
TEXTCOLOR(COLOR);
TEXTBACKGROUND(FONDO);
GOTOXY(X,Y);
WRITE(PALABRA);
END;
procedure
CENTRA(PALABRA:CADENA;Y:INTEGER);
VAR
LONGITUD,X:INTEGER;
BEGIN
LONGITUD:=LENGTH(PALABRA);

X:=ROUND((80-LONGITUD)/2);
GOTOXY(X,Y);WRITE(PALABRA);
END;
procedure
escribe(PALA:CADENA;X,Y:INTEGER);
BEGIN
GOTOXY(X,Y);WRITE(PALA);
END;
{*-------------------------------------------------------------------------*}

{*PORTADA PRINCIPAL*}
{PROCEDURE
PORTADA;
VAR
X,X1,X2,Y,Y1,Y2:INTEGER;
BEGIN
FOR X:=3 TO 80 DO
BEGIN
TEXTBACKGROUND(1);
TEXTCOLOR(2);
ESCRIBE('',X-1,1);ESCRIBE('',X-1,3);
ESCRIBE('',X-1,22);
TEXTCOLOR(15);ESCRIBE('',X-1,24);
END;
TEXTBACKGROUND(1);
FOR Y:=2 TO 24 DO
BEGIN
TEXTCOLOR(2);
ESCRIBE('',1,Y);ESCRIBE('',80,Y);
END;
TEXTCOLOR(2);
ESCRIBE('',1,3);ESCRIBE('',80,3);
ESCRIBE('',1,1);ESCRIBE('',80,1);
ESCRIBE('',80,22);ESCRIBE('',1,22);
ESCRIBE('',80,24);ESCRIBE('',1,24);
TEXTCOLOR(2);
END;
{***************************************************************************}

procedure re(b,h:real;var a,ix,iy:real);


begin
A:=b*h;
IX:=B*PT(H,3)/12;
IY:=H*PT(B,3)/12;
end;
procedure te;
var
yt,a,ix,iy,y1,x1,qy,ix1,iy1,h,a1,b,b1,t:real;

begin
write('BASE mayor:');readln(b);
write('BASE menor:');readln(b1);
write('ALTURA:');readln(h);
write('peral:');readln(t);
re(b,t,a,ix,iy);
re(b1,h-t,a1,ix1,iy1);
qy:=(a1*(H-t)*0.5)+(a*(h-t*0.5));
yt:=(qy)/(a+a1);
ds.at:=a+a1;
ds.i:=ix+a*pt(abs((h-t)-yt+t*0.5),2)+(ix1+a1*pt(abs((h-t)*0.5-yt),2));
end;
procedure ii;
var
a,yt,ix,iy,y1,x1,qx,qy,ix1,h,iy1,b,a1,b1,t:real;
begin
write('BASE mayor:');readln(b);
write('BASE menor:');readln(b1);
write('altura:');readln(h);
write('peral:');readln(t);
re(b,t,a,ix,iy);
re(b1,h-2*t,a1,ix1,iy1);
ds.at:=a*2+a1;
qy:=a*(h-t*0.5)+a1*((h-2*t)*0.5+t)+a*t*0.5;
yt:=qy/ds.at;
ds.i:=ix+2*a*pt(abs((h-2*t)*0.5+t*0.5),2)+(ix1);
end;
procedure rec;
var
yt,B,H,A,Y,X,QX,QY,IX,IY:REAL;
begin
escribe('BASE:',39,5);readln(b);
escribe('ALTURA:',39,6);readln(h);
re(b,h,a,ix,iy);
qy:=a*h*0.5;
yt:=qy/a;
ds.at:=a;
ds.i:=ix;
end;
procedure cu;
var
yt,B,H,A,a1,iX1,QY,iy1,IX,IY,t,v:REAL;
begin
escribe('BASE mayor:',39,15);readln(b);
escribe('ALTURA:',39,6);readln(H);
escribe('peral x:',39,7);readln(v);
escribe('peral y:',39,8);readln(t);
re(b,h,a,ix,iy);
re(b-2*v,h-2*t,a1,ix1,iy1);
qy:=a*h*0.5-a1*(((h-2*t)/2)+t);

ds.at:=a-a1;
yt:=qy/ds.at;
ds.i:=ix-ix1;
end;
procedure an;
var
yt,B,b1,H,A,a1,iX1,QY,iy1,IX,IY,t:REAL;
begin
write('BASE MAYOR:');readln(b);
write('BASE MENOR:');readln(B1);
write('ALTURA:');readln(H);
write('peral y:');readln(t);
re(b,t,a,ix,iy);
re(b1,h-t,a1,ix1,iy1);
qy:=a*(h-t*0.5)+a1*(h-t)/2;
ds.at:=a+a1;
yt:=qy/ds.at;
ds.i:=ix+a*pt(abs((h-t)-yt+t*0.5),2)+(ix1+a1*pt(abs((h-t)*0.5-yt),2));
end;
procedure tu;
var
yt,A,a1,QY,d,d1:REAL;
begin
write('DIAMETRO EXT.:');readln(D);
write('DIAMETRO INT.:');readln(D1);
a:=pi*pt(d/2,2);
a1:=pi*pt(d1/2,2);
ds.at:=a-a1;
qy:=a*d*0.5-a1*(((d-2*(d-d1))/2)+(d-d1));
yt:=qy/ds.at;
ds.i:=pi*pt(d/2,4)/4-pi*pt(d1/2,4)/4;
end;
procedure red;
var
yt,QY,d:REAL;
begin
write('DIAMETRO:');readln(D);
ds.at:=pi*pt(d/2,2);
qy:=ds.at*d*0.5;
yt:=qy/ds.at;
ds.i:=pi*pt(d/2,4)/4;
end;
{***************************************************************************}
procedure dis(ba:integer);
var
w:real;
begin
escribe('carga:',6,5);
readln(w);

df.v1:=(w*db[ba].l)/2;
df.m1:=(w*sqr(db[ba].l))/12;
df.v2:=(w*db[ba].l)/2;
df.m2:=-(w*sqr(db[ba].l))/12;
end;
procedure con(ba:integer);
var
p,a,b:real;
begin
escribe('Fuerza:',6,5);
readln(p);
escribe('longitud a:',6,6);
readln(a);
b:=db[ba].l-a;
df.v1:=((p*sqr(b))/pt(db[ba].l,3))*((3*a)+b);
df.v2:=((p*sqr(a))/pt(db[ba].l,3))*(a+(3*b));
df.m1:=(p*a*sqr(b))/pt(db[ba].l,2);
df.m2:=-(p*b*sqr(a))/pt(db[ba].l,2);
end;
{***************************************************************************}
{procedure acerca;
begin
clrscr;
portada;
centra('Marc_95',2);
centra('Analisis Estructural II',7);
centra('U . P . A . E . P .',5);
centra('Marco Antonio Almeida Porras',9);
centra('Ing. Civil',11);
centra('Septimo Semestre',13);
centra('Matricula: 70118',15);
centra('Copyright (c) 1995 by C.A.M.A.P.',19);
centra('Ver. 1.00 Marc_95',20);
centra('pulse <Intro> para continuar...',23);Readln;
end; }
procedure pedir;
begin
clrscr;
portada;
centra('DATOS GENERALES',2);
escribe('numero de nodos:',10,9);
readln(di.n);
escribe('tipos de seccion:',10,11);
readln(di.s);
escribe('numero barras:',10,13);
readln(di.b);
escribe('estados de carga:',10,15);
readln(di.c);
centra('pulse <Intro> para continuar...',23);Readln;
end;
procedure seccion;
begin
clrscr;

portada;
centra('1.-Rec 2.-Redo 3.-Tub 4.-T 5.-I 6.-Cua 7.-Ang',22);
escribe('tp
modulo (E=t*m)
sec
parametros
I
,6,4);
for f:=1 to di.s do
begin
gotoxy(6,4+f);write(f);
gotoxy(14,4+f);read(dsa[f].e);
gotoxy(34,4+f);read(se);
case se of
1:rec;
2:red;
3:tu;
4:te;
5:ii;
6:cu;
7:an;
end;
dsa[f].i:=ds.i;
dsa[f].a:=ds.at;
gotoxy(51,4+f);write(dsa[f].i:10:4);
gotoxy(64,4+f);write(dsa[f].a:10:4);
end;
centra('pulse <Intro> para continuar...',23);Readln;
end;
procedure nudos;
begin
clrscr;
portada;
centra('Nudos libres:',2);
gotoxy(5,4);
write('nudo X (m) Y (m) X Y Z ');
for f:= 1 to di.n do
begin
gotoxy(6,4+f);write(f);
gotoxy(14,4+f);read(dn[f].x);
gotoxy(21,4+f);read(dn[f].y);
gotoxy(29,4+f);cf[1,f]:=0;write(cf[1,f]);
gotoxy(32,4+f);cf[2,f]:=0;write(cf[2,f]);
gotoxy(35,4+f);cf[3,f]:=0;write(cf[3,f]);
centra('pulse <Intro> para continuar...',23);Readln;
end;
clrscr;
portada;
centra('Nudos restringidos: ',2);
escribe('# nudos:',6,4);
read(q);
gotoxy(5,5);
write('nudo X (m) Y (m) X Y Z ');
for f:= 1 to q do
begin
gotoxy(6,5+f);readln(w);
gotoxy(14,5+f);write(dn[w].x:3:1);
gotoxy(21,5+f);write(dn[w].y:3:1);
gotoxy(29,5+f);read(cf[1,w]);
gotoxy(32,5+f);read(cf[2,w]);
gotoxy(35,5+f);read(cf[3,w]);

A '

end;
centra('pulse <Intro> para continuar...',23);Readln;
acu:=0;
for f:=1 to di.n do
begin
for q:=1 to 3 do
begin
if cf[q,f]=0
then
acu:=acu+1;
if cf[q,f]=0
then
ne[q,f]:=acu
else
ne[q,f]:=0
end;
end;
end;
procedure barras;
var
g:real;
begin
clrscr;
portada;
centra('Barras',2);
escribe('barra
Ni ,
Nj
sec
longitud (
m) ',6,4);
for f:=1 to di.b do
begin
gotoxy(8,4+f);write(f);
gotoxy(19,4+f);read(i);db[f].ndi:=i;x1:=dn[i].x;y1:=dn[i].y;
gotoxy(30,4+f);read(j);db[f].ndj:=j;x2:=dn[j].x;y2:=dn[j].y;
db[f].l:=sqrt(sqr(x2-x1)+sqr(y2-y1));
gotoxy(58,4+f);write(db[f].l:10:4);
gotoxy(39,4+f);readln(se);
db[f].c:=((x2-x1)/db[f].l);
db[f].s:=((y2-y1)/db[f].l);
db[f].e:=dsa[se].e;
db[f].i:=dsa[se].i;
db[f].a:=dsa[se].a;
g:=db[f].e/(2*(1+0));
db[f].fi:=(12*1.2*db[f].e*db[f].i)/(db[f].a*g*sqr(db[f].l));
end;
centra('pulse <Intro> para continuar...',23);Readln;
end;
procedure est_car;
var ni,nf,ac:integer;
n,v,m:real;
begin
clrscr;
portada;
for ca:=1 to di.c do

begin
clrscr;
portada;
gotoxy(6,2);write('estado de carga #:',ca);
centra('1.- Accion en Barra',6);
centra('2.- Accion en Nudo ',7);
for f:=1 to di.b do
begin
c[ca].bc[f].fo[1]:=0;
c[ca].bc[f].fo[2]:=0;
c[ca].bc[f].fo[3]:=0;
c[ca].bc[f].fo[4]:=0;
c[ca].bc[f].fo[5]:=0;
c[ca].bc[f].fo[6]:=0;
end;
for f:=1 to di.n do
begin
c[ca].bc[f].fe[1]:=0;
c[ca].bc[f].fe[2]:=0;
c[ca].bc[f].fe[3]:=0;
end;
repeat
centra('que tipo de Accion:',23);readln(ac);
case ac of
1:begin
clrscr;
portada;
gotoxy(6,2);write('estado de carga #:',ca);
centra('1.- UD 2.- FC ',21);
centra('estado:',23);readln(es);
escribe('Elemento: ',6,4);read(f);
case es of
'1':dis(f);
'2':con(f);
end;
c[ca].bc[f].fo[1]:=0{c[ca].bc[f].fo[1]+df.n1};
c[ca].bc[f].fo[2]:=c[ca].bc[f].fo[2]+df.v1;
c[ca].bc[f].fo[3]:=c[ca].bc[f].fo[3]+df.m1;
c[ca].bc[f].fo[4]:=0{c[ca].bc[f].fo[4]+df.n2};
c[ca].bc[f].fo[5]:=c[ca].bc[f].fo[5]+df.v2;
c[ca].bc[f].fo[6]:=c[ca].bc[f].fo[6]+df.m2;
end;
2:begin
clrscr;
portada;
gotoxy(6,2);write('estado de carga #:',ca);
escribe('Nudo: ',6,4);read(ni);
escribe(' x :',6,6);readln(n);
escribe(' y :',6,7);readln(v);
escribe(' z :',6,8);readln(m);
c[ca].bc[ni].fe[1]:=c[ca].bc[ni].fe[1]+n;
c[ca].bc[ni].fe[2]:=c[ca].bc[ni].fe[2]+v;
c[ca].bc[ni].fe[3]:=c[ca].bc[ni].fe[3]+m;
end;

end;
centra('otra carga S/N: ',23);readln(pr);
until (pr='n') or (pr='N')
end;
centra('pulse <Intro> para continuar...',23);Readln;
end;
{***************************************************************************}
procedure rigidez;
begin
for f:=1 to di.b do
begin
db[f].r[1,1]:=(db[f].e*db[f].a)/db[f].l;
db[f].r[1,2]:=0;
db[f].r[1,3]:=0;
db[f].r[1,4]:=-(db[f].e*db[f].a)/db[f].l;
db[f].r[1,5]:=0;
db[f].r[1,6]:=0;
db[f].r[2,1]:=0;
db[f].r[2,2]:=(12*db[f].e*db[f].i)/((1+db[f].fi)*pt(db[f].l,3));
db[f].r[2,3]:=(6*db[f].e*db[f].i)/((1+db[f].fi)*pt(db[f].l,2));
db[f].r[2,4]:=0;
db[f].r[2,5]:=-(12*db[f].e*db[f].i)/((1+db[f].fi)*pt(db[f].l,3));
db[f].r[2,6]:=(6*db[f].e*db[f].i)/((1+db[f].fi)*pt(db[f].l,2));
db[f].r[3,1]:=0;
db[f].r[3,2]:=(6*db[f].e*db[f].i)/((1+db[f].fi)*pt(db[f].l,2));
db[f].r[3,3]:=((4+db[f].fi)*db[f].i*db[f].e)/((1+db[f].fi)*db[f].l);
db[f].r[3,4]:=0;
db[f].r[3,5]:=-(6*db[f].e*db[f].i)/((1+db[f].fi)*pt(db[f].l,2));
db[f].r[3,6]:=((2-db[f].fi)*db[f].i*db[f].e)/((1+db[f].fi)*db[f].l);
db[f].r[4,1]:=-(db[f].e*db[f].a)/db[f].l;
db[f].r[4,2]:=0;
db[f].r[4,3]:=0;
db[f].r[4,4]:=(db[f].e*db[f].a)/db[f].l;
db[f].r[4,5]:=0;
db[f].r[4,6]:=0;
db[f].r[5,1]:=0;
db[f].r[5,2]:=-(12*db[f].e*db[f].i)/((1+db[f].fi)*pt(db[f].l,3));
db[f].r[5,3]:=-(6*db[f].e*db[f].i)/((1+db[f].fi)*pt(db[f].l,2));
db[f].r[5,4]:=0;
db[f].r[5,5]:=(12*db[f].e*db[f].i)/((1+db[f].fi)*pt(db[f].l,3));
db[f].r[5,6]:=-(6*db[f].e*db[f].i)/((1+db[f].fi)*pt(db[f].l,2));
db[f].r[6,1]:=0;
db[f].r[6,2]:=(6*db[f].e*db[f].i)/((1+db[f].fi)*pt(db[f].l,2));
db[f].r[6,3]:=((2-db[f].fi)*db[f].i*db[f].e)/((1+db[f].fi)*db[f].l);
db[f].r[6,4]:=0;
db[f].r[6,5]:=-(6*db[f].e*db[f].i)/((1+db[f].fi)*pt(db[f].l,2));
db[f].r[6,6]:=((4+db[f].fi)*db[f].i*db[f].e)/((1+db[f].fi)*db[f].l);
{***************************************************************************}
b[f].kg[1,1]:=sqr(db[f].c)*db[f].r[1,1]+sqr(db[f].s)*db[f].r[2,2];

b[f].kg[1,2]:=db[f].c*db[f].s*db[f].r[1,1]-db[f].s*db[f].c*db[f].r[2,2];
b[f].kg[1,3]:=-db[f].s*db[f].r[2,3];
b[f].kg[1,4]:=sqr(db[f].c)*db[f].r[1,4]+sqr(db[f].s)*db[f].r[2,5];
b[f].kg[1,5]:=db[f].c*db[f].s*db[f].r[1,4]-db[f].s*db[f].c*db[f].r[2,5];
b[f].kg[1,6]:=-db[f].s*db[f].r[2,6];
b[f].kg[2,1]:=db[f].c*db[f].s*db[f].r[1,1]-db[f].s*db[f].c*db[f].r[2,2];
b[f].kg[2,2]:=sqr(db[f].s)*db[f].r[1,1]+sqr(db[f].c)*db[f].r[2,2];
b[f].kg[2,3]:=db[f].c*db[f].r[2,3];
b[f].kg[2,4]:=db[f].c*db[f].s*db[f].r[1,4]-db[f].s*db[f].c*db[f].r[2,5];
b[f].kg[2,5]:=sqr(db[f].s)*db[f].r[1,4]+sqr(db[f].c)*db[f].r[2,5];
b[f].kg[2,6]:=db[f].c*db[f].r[2,6];
b[f].kg[3,1]:=-db[f].s*db[f].r[3,2];
b[f].kg[3,2]:=db[f].c*db[f].r[3,2];
b[f].kg[3,3]:=db[f].r[3,3];
b[f].kg[3,4]:=-db[f].s*db[f].r[3,5];
b[f].kg[3,5]:=db[f].c*db[f].r[3,5];
b[f].kg[3,6]:=db[f].r[3,6];
b[f].kg[4,1]:=sqr(db[f].c)*db[f].r[4,1]+sqr(db[f].s)*db[f].r[5,2];
b[f].kg[4,2]:=db[f].c*db[f].s*db[f].r[4,1]-db[f].s*db[f].c*db[f].r[5,2];
b[f].kg[4,3]:=-db[f].s*db[f].r[5,3];
b[f].kg[4,4]:=sqr(db[f].c)*db[f].r[4,4]+sqr(db[f].s)*db[f].r[5,5];
b[f].kg[4,5]:=db[f].c*db[f].s*db[f].r[4,4]-db[f].s*db[f].c*db[f].r[5,5];
b[f].kg[4,6]:=-db[f].s*db[f].r[5,6];
b[f].kg[5,1]:=db[f].c*db[f].s*db[f].r[4,1]-db[f].s*db[f].c*db[f].r[5,2];
b[f].kg[5,2]:=sqr(db[f].s)*db[f].r[4,1]+sqr(db[f].c)*db[f].r[5,2];
b[f].kg[5,3]:=db[f].c*db[f].r[5,3];
b[f].kg[5,4]:=db[f].c*db[f].s*db[f].r[4,4]-db[f].s*db[f].c*db[f].r[5,5];
b[f].kg[5,5]:=sqr(db[f].s)*db[f].r[4,4]+sqr(db[f].c)*db[f].r[5,5];
b[f].kg[5,6]:=db[f].c*db[f].r[5,6];
b[f].kg[6,1]:=-db[f].s*db[f].r[6,2];
b[f].kg[6,2]:=db[f].c*db[f].r[6,2];
b[f].kg[6,3]:=db[f].r[6,3];
b[f].kg[6,4]:=-db[f].s*db[f].r[6,5];
b[f].kg[6,5]:=db[f].c*db[f].r[6,5];
b[f].kg[6,6]:=db[f].r[6,6];
end;
end;
{***************************************************************************}
procedure fijacion;
begin
for ca:=1 to di.c do
begin
for f:=1 to di.b do
begin
c[ca].bc[f].fog[1]:=(db[f].c*c[ca].bc[f].fo[1]-db[f].s*c[ca].bc[f].fo[2
]);
c[ca].bc[f].fog[2]:=(db[f].s*c[ca].bc[f].fo[1]+db[f].c*c[ca].bc[f].fo[2
]);
c[ca].bc[f].fog[3]:=c[ca].bc[f].fo[3];
c[ca].bc[f].fog[4]:=(db[f].c*c[ca].bc[f].fo[4]-db[f].s*c[ca].bc[f].fo[5
]);
c[ca].bc[f].fog[5]:=(db[f].s*c[ca].bc[f].fo[4]+db[f].c*c[ca].bc[f].fo[5
]);
c[ca].bc[f].fog[6]:=c[ca].bc[f].fo[6];

end;
end;
end;
{***************************************************************************}
procedure inicializar;
begin
for ca:=1 to di.c do
begin
for f:=1 to acu do
begin
c[ca].foe[f]:=0;
c[ca].fee[f]:=0;
c[ca].pe[f]:=0;
c[ca].ue[f]:=0;
for q:=1 to acu do
ke[f,q]:=0;
end;
end;
end;
{***************************************************************************}
{*** operaciones para la estructura ***}
{***
foe[i]
***}
procedure opera;
begin
for ca:=1 to di.c do
begin
for f:=1 to di.b do
begin
for q:=1 to 6 do
begin
if q<=3 then
c[ca]. foe[ ne[ q,db[f].ndi ] ]:=c[ca].foe[ne[ q,db[f].ndi ]]+ c[ca
].bc[f].fog[ q ]
else
c[ca]. foe[ ne[ q-3,db[f].ndj ] ]:=c[ca].foe[ne[ q-3,db[f].ndj ]]+
c[ca].bc[f].fog[ q ]
end;
end;
end;
{***

{***

fee[i]
***}
for ca:=1 to di.c do
begin
for f:=1 to di.n do
begin
for q:=1 to 3 do
begin
c[ca].fee[ ne[ q,f ] ]:=c[ca].fee[ne[ q,f ]]+ c[ca].bc[f].fe[ q ]
end;
end;
end;

ke[i,j]
for f:=1 to di.b do
begin

***}

for q:=1 to 6 do
begin
for w:=1 to 6 do
begin
case q of
1,2,3:
begin
if w<=3 then
ke[ ne[ q,db[f].ndi ] , ne[ w,db[f].ndi ] ]:=ke[ne[ q,db[f].ndi ]
, ne[ w,db[f].ndi ] ]+ b[f].kg[q,w ]
else
ke[ ne[ q,db[f].ndi ] , ne[ w-3,db[f].ndj ] ]:=ke[ne[ q,db[f].ndi
] ,ne[ w-3,db[f].ndj ]]+ b[f].kg[q,w ]
end;
4,5,6:
begin
if w<=3 then
ke[ ne[ q-3,db[f].ndj ] , ne[ w,db[f].ndi ] ]:=ke[ne[ q-3,db[f].nd
j ] , ne[ w,db[f].ndi ] ]+ b[f].kg[q,w ]
else
ke[ ne[ q-3,db[f].ndj ] , ne[ w-3,db[f].ndj ] ]:=ke[ne[ q-3,db[f].
ndj ] ,ne[ w-3,db[f].ndj ]]+ b[f].kg[q,w ]
end;
end;
end;
end;
end;
for ca:=1 to di.c do
begin
for f:=1 to acu do
begin
c[ca].pe[f]:=c[ca].fee[f]-c[ca].foe[f];
end;
end;
end;
{***************************************************************************}
procedure solucionmatriz;
{

M e t o d o
A x = b
Ut D U x=b
D u = y
u y = b
D u x = y
}

Begin
Clrscr ;
for ca:=1 to di.c do
begin
For f := 1 To acu Do
For q := f To acu Do
Begin
a[f,q]:=ke[f,q];
A[q,f]:=a[f,q];
End ;
For f := 1 To acu Do
Begin

d e

C r o u t

B1[ f ] :=c[ca].pe[f] ;
End ;
{ Metodo de Crout Propiamente dicho }
For f:=1 to acu do
for q:=1 to acu do
begin
ut[f,q]:=0;
u[f,q]:=0;
end;
For f := 1 To acu Do
For q := f To acu Do
Begin
If f<>q Then
begin
U[ f ,q ] := Croutu( f ,q ) ;
ut[q,f]:=u[f,q]*ut[f,f];
end;
If f = q Then
begin
u[f,q]:=1;
ut[ f ,q ] := Croutd(f) ;
end
End ;
For f := 1 To acu Do
Y[ f ] := Calcy( f ) ;
For f := acu Downto 1 Do
x[ f ] := Calcx( f ,acu ) ;
For f := 1 To acu Do
Begin
c[ca].ue[f]:=x[f];
End ;
end;
end;
{***************************************************************************}
procedure uglobal_local;
begin
for ca:=1 to di.c do
begin
for f:=1 to di.b do
begin
for q:=1 to 6 do
begin
if q<=3 then
c[ca].bc[f].ug[ q ]:= c[ca].ue[ ne[ q,db[f].ndi ] ]
else
c[ca].bc[f].ug[ q ]:=c[ca].ue[ ne[ q-3,db[f].ndj ] ]
end;
end;
for f:=1 to di.b do
begin

c[ca].bc[f].u[1]:=db[f].c*c[ca].bc[f].ug[1]+db[f].s*c[ca].bc[f].ug[2];
c[ca].bc[f].u[2]:=-db[f].s*c[ca].bc[f].ug[1]+db[f].c*c[ca].bc[f].ug[2];
c[ca].bc[f].u[3]:=c[ca].bc[f].ug[3];
c[ca].bc[f].u[4]:=db[f].c*c[ca].bc[f].ug[4]+db[f].s*c[ca].bc[f].ug[5];
c[ca].bc[f].u[5]:=-db[f].s*c[ca].bc[f].ug[4]+db[f].c*c[ca].bc[f].ug[5];
c[ca].bc[f].u[6]:=c[ca].bc[f].ug[6];
end;
end;
end;
{***************************************************************************}
procedure solucion_barra;
begin
for ca:=1 to di.c do
begin
for f:=1 to di.b do
begin
for q:=1 to 6 do
begin
c[ca].bc[f].uk[q]:=0;
end;
end;
for f:=1 to di.b do
begin
for q:=1 to 6 do
begin
for w:=1 to 6 do
begin
c[ca].bc[f].uk[q]:=c[ca].bc[f].uk[q]+(db[f].r[q,w]*c[ca].bc[f].u[w])
;
end;
end;
end;
for f:=1 to di.b do
begin
for q:=1 to 6 do
begin
c[ca].bc[f].fe[q]:=c[ca].bc[f].uk[q]+c[ca].bc[f].fo[q]
end;
end;
for f:=1 to di.b do
begin
c[ca].bc[f].feg[1]:=db[f].c*c[ca].bc[f].fe[1]-db[f].s*c[ca].bc[f].f
e[2];
c[ca].bc[f].feg[2]:=db[f].s*c[ca].bc[f].fe[1]+db[f].c*c[ca].bc[f].f
e[2];
c[ca].bc[f].feg[3]:=c[ca].bc[f].fe[3];
c[ca].bc[f].feg[4]:=db[f].c*c[ca].bc[f].fe[4]-db[f].s*c[ca].bc[f].f
e[5];
c[ca].bc[f].feg[5]:=db[f].s*c[ca].bc[f].fe[4]+db[f].c*c[ca].bc[f].f
e[5];
c[ca].bc[f].feg[6]:=c[ca].bc[f].fe[6];
end;
for f:=1 to di.b do
begin
c[ca].ng[1,db[f].ndi]:=c[ca].ng[1,db[f].ndi]+c[ca].bc[f].feg[1];
c[ca].ng[2,db[f].ndi]:=c[ca].ng[2,db[f].ndi]+c[ca].bc[f].feg[2];

c[ca].ng[3,db[f].ndi]:=c[ca].ng[3,db[f].ndi]+c[ca].bc[f].feg[3];
c[ca].ng[1,db[f].ndj]:=c[ca].ng[1,db[f].ndj]+c[ca].bc[f].feg[4];
c[ca].ng[2,db[f].ndj]:=c[ca].ng[2,db[f].ndj]+c[ca].bc[f].feg[5];
c[ca].ng[3,db[f].ndj]:=c[ca].ng[3,db[f].ndj]+c[ca].bc[f].feg[6];
end;
end;
end;
{***************************************************************************}
procedure datos;
var
z,w,q,op:integer;
begin
repeat
clrscr;
portada;
centra('Resultados',2);
escribe('1.- Datos generales',6,6);
escribe('2.- Desplazamientos',6,7);
escribe('3.- Elementos mecanicos',6,8);
escribe('4.- Reacciones',6,9);
escribe('5.- Imprimir',6,10);
escribe('0.- Salir',6,11);
centra('Opcion:',23);readln(op);
case op of
1:begin
clrscr;
portada;
centra('DATOS GENERALES',2);
gotoxy(10,9);
write('numero de nodos:');
write(di.n);
gotoxy(10,11);
write('tipos de seccion:');
write(di.s);
gotoxy(10,13);
write('numero barras:');
write(di.b);
gotoxy(10,15);
write('estados de carga:');
write(di.c);
centra('pulse <Intro> para continuar...',23);Readln;
{clrscr;
for ca:=1 to di.c do
begin
writeln('Estado de carga #:',ca);
for f:=1 to di.b do
begin
writeln(lst,'barra #: ',f);
writeln(lst,' ',db[f].l:10:4);
writeln(lst,'inercia: ',db[f].i:10:4);
writeln(lst,'E: ',db[f].e:10:4);
writeln(lst,'Coseno: ',db[f].c:10:4);
writeln(lst,'Seno: ',db[f].s:10:4);
writeln(lst,'nodo: ',db[f].ndi:10);
writeln(lst,'x1: ',db[f].x1:10:4);
writeln(lst,'y1: ',db[f].y1:10:4);
writeln(lst,' fuerzas de fijacion');

writeln(lst,'ni: ',db[f].ni:10:4);
writeln(lst,'vi: ',db[f].vi:10:4);
writeln(lst,'mi: ',db[f].mi:10:4);
writeln(lst,'nodo: ',db[f].ndj:10);
writeln(lst,'x2: ',db[f].x2:10:4);
writeln(lst,'y2: ',db[f].y2:10:4);
writeln(lst,' fuerzas de fijacion');
writeln(lst,'nj: ',db[f].nj:10:4);
writeln(lst,'vj: ',db[f].vj:10:4);
writeln(lst,'mj: ',db[f].mj:10:4);
writeln(lst,'
');
end;
readln;
end;}
end;
2:begin
for ca:=1 to di.c do
begin
clrscr;
portada;
gotoxy(30,2);write('condicion #:',ca);
gotoxy(30,4);write('Desplazamientos');
gotoxy(10,7);write('X (cm) : ');
gotoxy(30,7);write('Y (cm) : ');
gotoxy(55,7);write('Z (rad): ');
for f:=1 to di.n do
begin
gotoxy(5,7+f);write('N:',f);
gotoxy(10,7+f);write(c[ca].ue[ne[1,f]]*100:2:7);
gotoxy(30,7+f);write(c[ca].ue[ne[2,f]]*100:2:7);
gotoxy(55,7+f);write(c[ca].ue[ne[3,f]]:2:7);
end;
gotoxy(25,23);write('pulse <Intro> para continuar');
readln;
end;
end;
3:begin
for ca:=1 to di.c do
begin
for f:=1 to di.b do
begin
clrscr;
portada;
gotoxy(30,2);write('condicion #:',ca);
gotoxy(8,4);write('Barra #:',f);

gotoxy(21,4);write('l (M) : ',db[f].l:5:2);


gotoxy(50,4);write('I (M4) : ',db[f].i:4:6);
gotoxy(21,5);write('A (M): ',db[f].a:4:6);
gotoxy(50,5);write('E (TM): ',db[f].e:8:2);
gotoxy(12,6);write('Nudo i');
gotoxy(11,7);write(db[f].ndi:5);
gotoxy(9,8);write(db[f].x1:5:2,' , ');
gotoxy(16,8);write(db[f].y1:5:2);}

gotoxy(8,10);write('N (T) : ',c[ca].bc[f].fe[ 1 ]:10:4);


gotoxy(8,11);write('V (T) : ',c[ca].bc[f].fe[ 2 ]:10:4);
gotoxy(8,12);write('M(TM): ',c[ca].bc[f].fe[ 3 ]:10:4);

gotoxy(49,6);write('Nudo j');
gotoxy(48,7);write(db[f].ndj:5);
gotoxy(46,8);write(db[f].x2:5:2,' , ');
gotoxy(53,8);write(db[f].y2:5:2);}
gotoxy(45,10);write('N (T) : ',c[ca].bc[f].fe[ 4 ]:10:4);
gotoxy(45,11);write('V (T) : ',c[ca].bc[f].fe[ 5 ]:10:4);
gotoxy(45,12);write('M(TM): ',c[ca].bc[f].fe[ 6 ]:10:4);
gotoxy(25,23);write('pulse <Intro> para continuar');
readln;
end;
end;
end;
4:begin
for ca:=1 to di.c do
begin
clrscr;
portada;
gotoxy(30,2);write('condicion #:',ca);
centra('R E A C C I O N E S ',4);
gotoxy(10,5);write('X (Ton) : ');
gotoxy(30,5);write('Y (Ton) : ');
gotoxy(55,5);write('Z (TM) : ');
for f:=1 to di.n do
begin
K:=cf[1,f]+cf[2,f]+cf[3,f];
if k>0 then
begin
gotoxy(10,5+f);write(c[ca].ng[1,f]:2:7);
gotoxy(30,5+f);write(c[ca].ng[2,f]:2:7);
gotoxy(55,5+f);write(c[ca].ng[3,f]:2:7);
gotoxy(5,5+f);write('N:',f);
end;
end;
centra('pulse <Intro> para continuar',23);readln;
end;
end;
5:begin
clrscr;
portada;
for ca:=1 to di.c do
begin
for f:=1 to di.b do
begin
writeln('barra #: ',f);
writeln('fog');
for q:=1 to 6 do
begin
Write( '' ) ;
Write( c[ca].bc[f].fog[ q ]:10:4 ) ;

Writeln( '' ) ;
end;
writeln('
');
writeln('fo');
for q:=1 to 6 do
begin
Write( '' ) ;
Write( c[ca].bc[f].fo[ q ]:10:4 ) ;
Writeln( '' ) ;
end;
readln;
clrscr;
gotoxy(1,2);
for z:=1 to 6 do
begin
Write( '' ) ;
for w:=1 to 6 do
begin
Write( db[f].r[ z ,w ]:10:4 ) ;
end;
Writeln( '' ) ;
end;
gotoxy(1,10);
for z:=1 to 6 do
begin
Write( '' ) ;
for w:=1 to 6 do
begin
Write( b[f].kg[ z ,w ]:10:4 ) ;
end;
Writeln( '' ) ;
end;
readln;
end;
end;
end;
6:begin
clrscr;
for ca:=1 to di.c do
begin
writeln('Fee');
for q:=1 to acu do
begin
Write( '' ) ;
Write( c[ca].fee[ q ]:10:4 ) ;
Writeln( '' ) ;
end;
readln;
writeln('Foe');
for q:=1 to acu do
begin

Write( '' ) ;
Write( c[ca].foe[ q ]:10:4 ) ;
Writeln( '' ) ;
end;
readln;
writeln('p');
for q:=1 to acu do
begin
Write( '' ) ;
Write( c[ca].pe[ q ]:10:4 ) ;
Writeln( '' ) ;
end;
readln;
writeln('Ue');
for q:=1 to acu do
begin
Write( '' ) ;
Write( c[ca].ue[ q ] ) ;
Writeln( '' ) ;
end;
readln;
clrscr;
write('ke');
gotoxy(2,3);
for z:=1 to acu do
begin
Write( '' ) ;
for w:=1 to acu do
begin
Write( ke[ z ,w ]:10:4 ) ;
end;
Writeln( '' ) ;
end;
readln;
end;
end;
7:begin
for ca:=1 to di.c do
begin
clrscr;
for f:=1 to di.b do
begin
writeln('barras #:',f);
writeln('fo');
for q:=1 to 6 do
begin
Write( '' ) ;
Write( c[ca].bc[f].fe[ q ]:10:4 ) ;
Writeln( '' ) ;
end;
readln;
writeln('u');
for q:=1 to 6 do
begin
Write( '' ) ;
Write( c[ca].bc[f].ug[ q ]:10:15 ) ;

Writeln( '' ) ;
end;
readln;
end;
end;
end;
5:begin
clrscr;
portada;
centra('Imprimiento',2);
centra('Elementos Mecanicos',12);
for ca:=1 to di.c do
begin
writeln(lst,#27#69,#27#41#1,'Condicion #: ',ca);
for f:=1 to di.b do
begin
writeln(lst,#27#69,#27#41#1,'barra #: ',f);
writeln(lst,#27#70,'longitud (M) : ',db[f].l:10:4);
writeln(lst,#27#70,'inercia (M^4): ',db[f].i:5:6);
writeln(lst,#27#70,'area (M)
: ',db[f].a:10:4);
writeln(lst,#27#70,'E (TM)
: ',db[f].e:10:4);
writeln(lst,#27#69,'nodo: ',db[f].ndi:5);
writeln(lst,#27#69,'fuerzas de equilibrio');
writeln(lst,#27#70,'N (T) : ',c[ca].bc[f].fe[ 1 ]:10:4);
writeln(lst,#27#70,'V (T) : ',c[ca].bc[f].fe[ 2 ]:10:4);
writeln(lst,#27#70,'M(TM): ',c[ca].bc[f].fe[ 3 ]:10:4);
writeln(lst,#27#69,'nodo: ',db[f].ndj:5);
writeln(lst,#27#69,' fuerzas de equilibrio');
writeln(lst,#27#70,'N(T) : ',c[ca].bc[f].fe[ 4 ]:10:4);
writeln(lst,#27#70,'V(T) : ',c[ca].bc[f].fe[ 5 ]:10:4);
writeln(lst,#27#70,'M(TM): ',c[ca].bc[f].fe[ 6 ]:10:4);
writeln(lst,'
');
end;
centra('pulse <Intro> para continuar',23);readln;
clrscr;
portada;
centra('Imprimiento',2);
centra('Desplazamieentos',12);
writeln(lst,'
');
writeln(lst,#27#69,#27#41#1,'Condicion #: ',ca);
writeln(lst,#27#69,' Desplazamientos');
for f:=1 to di.n do
begin
writeln(lst,#27#69,'Nudo:',f);
writeln(lst,#27#70,'X(cm) : ',c[ca].ue[ne[1,f]]*100:2:7);
writeln(lst,#27#70,'Y(cm) : ',c[ca].ue[ne[2,f]]*100:2:7);
writeln(lst,#27#70,'Z(rad) : ',c[ca].ue[ne[3,f]]*100:2:7);
writeln(lst,'
');
end;
centra('pulse <Intro> para continuar',23);readln;
clrscr;
portada;
centra('Imprimiento',2);
centra('Reacciones',12);
writeln(lst,'
');
writeln(lst,#27#69,#27#41#1,'Condicion #: ',ca);
writeln(lst,#27#69,' R E A C C I O N E S');

for f:=1 to di.n do


begin
K:=cf[1,f]+cf[2,f]+cf[3,f];
if k>0 then
begin
writeln(lst,#27#69,'Nudo:',f);
writeln(lst,#27#70,'X(T) : ',c[ca].ng[1,f]:2:7);
writeln(lst,#27#70,'Y(T) : ',c[ca].ng[2,f]:2:7);
writeln(lst,#27#70,'Z(TM): ',c[ca].ng[3,f]:2:7);
end;
end;
centra('pulse <Intro> para continuar',23);readln;
end;
end;
end;
until op=0
end;
procedure menu;
begin
acerca;
clrscr;
vector1[1]:='Datos generales';
vector1[2]:='
Nodos
';
vector1[3]:='
Seccion
';
vector1[4]:='
Barras
';
vector1[5]:='
Cargas
';
vector1[6]:=' Analizar
';
vector1[7]:=' Resultados ';
vector1[8]:=' Acerca de... ';
vector1[9]:='
Salir
';
REPEAT
clrscr;
textbackground(1);
portada;
CENTRA('Analisis de Marcos "Marc_95"',2);
CENTRA('Mover el cursor...',23);
CENTRA('Marco Antonio Almeida Porras',5);
CENTRA('Analisis Eestructural II',7);
CENTRA('Ver. 1.00 Marc_95',9);
FOR j:=1 TO 9 DO
CENTRA(vector1[j],10+j);
OPCION:=1;
MOVIMIENTO:=' ';
ESCRI(10+OPCION,2,1,vector1[OPCION]);
REPEAT
MOVIMIENTO:=READKEY;
IF MOVIMIENTO=#0 THEN
MOVIMIENTO:=READKEY;
CASE MOVIMIENTO OF
#80:BEGIN

ESCRI(10+OPCION,1,2,vector1[OPCION]);
INC(OPCION);
IF (OPCION>9) THEN
OPCION:=1;
ESCRI(10+OPCION,2,1,vector1[OPCION]);
END;
#72:BEGIN
ESCRI(10+OPCION,1,2,vector1[OPCION]);
DEC(OPCION);
IF (OPCION<1) THEN
OPCION:=9;
ESCRI(10+OPCION,2,1,vector1[OPCION]);
END;
END;
textbackground(1);
UNTIL (MOVIMIENTO=#13) OR (MOVIMIENTO='Q');
CASE OPCION OF
1:pedir;
2:nudos;
3:seccion;
4:barras;
5:est_car;
6:begin
clrscr;
portada;
centra('" Marc_95 "',2);
centra('      " A N A L I Z A N D O "      ',13);
rigidez;
fijacion;
inicializar;
opera;
solucionmatriz;
uglobal_local;
solucion_barra;
end;
7:datos;
8:acerca;
9:exit;
end;
UNTIL MOVIMIENTO='q';
red;
READLN;
clrscr;
end;

begin
menu;
end.

You might also like