Você está na página 1de 8

Program Analise_Matricial;

uses crt;
const
no=10;

var
tecla:char;
nome_arquivo,nome_entrada,nome_saida,nome_verifica:string;
entrada,saida,veri:text;
x,E,Ine,qyi,qyf,L:array[1..no]of real;
carbar:array[1..4*no] of real;
NN,Nb,nnvic,nncarno,nbcc,MRS:integer;
ini,fim:array[1..no] of integer;
vinc:array[1..2*no] of integer;
carno,vcar,desloca,reac:array[1..2*no] of real;
SM:array[1..no,1..4,1..4] of real;
S:array[1..2*no,1..2*no] of real;

{ Descri das variaveis:


x - coordenada em x do no
E - Modulo de elsticidade
Nb - numero de barras
nbcc - numero debarras com carregamento distribuido
MRS - metodo de resolucao numerica do sistema linear}

{*********************************}

Procedure Criando_arquivo;

begin

Write('Entre com o nome do arquivo: ');


readln(nome_arquivo);
nome_entrada:=nome_arquivo+'.txt';
nome_saida:=nome_arquivo+'.sol';
nome_verifica:=nome_arquivo+'.ver';
writeln('O nome do arquivo de entrada �: ', nome_arquivo);
assign(entrada,nome_entrada);assign(saida,nome_saida);
assign(veri,nome_verifica);
reset(entrada);rewrite(saida);rewrite(veri);

end;

{**********************************}

Procedure Entrada_dados;

var
k,i:integer;

begin
writeln(saida);
writeln(saida,' Arquivo de entrada : ',nome_entrada);
writeln(saida);
repeat
read(entrada,tecla);
until(tecla=':');

readln(entrada,NN);
writeln(saida, 'UNIVERSIDADE FEDERAL DE RORAIMA');
writeln(saida,'DEPARTAMENTO DE ENGENHARIA CIVIL');
writeln(saida,'Numero de nos : ',NN:6);

repeat
read(entrada,tecla);
until(tecla=':');

for i:=1 to nn do readln(entrada,k,x[k]);


writeln(saida);
writeln(saida,' NO X[NO] ');
writeln(saida);
for i:=1 to nn do writeln(saida,i:5,x[i]:10:2);
repeat
read(entrada,tecla);
until(tecla=':');
readln(entrada,nb);
repeat
read(entrada,tecla);
until(tecla=':');

for i:= 1 to nb do readln(entrada,k,ini[k],fim[k],E[k],Ine[k]);


writeln(saida);writeln(saida);
writeln (saida,' BARRA INICIO FIM E Inerci');
writeln(saida);
for i:=1 to nb do writeln(saida, i:5,Ini[i]:10, fim[i]:10,E[i]:12:1,Ine[i]:12:6);

For i:= 1 to 2*nn do vinc[i]:=0;

repeat
read(entrada,tecla);
until(tecla=':');
read(entrada,nnvic);
writeln(saida, ' NO des.linear des. rotacao tipo ');

for i:= 1 to nnvic do read(entrada, k,vinc[2*k-1],vinc[2*k]);


for i:= 1 to nn do begin
if (vinc[2*i-1]+vinc[2*i])<>0 then begin
write(saida, i:10, vinc[2*i-
1]:10, vinc[2*i]:10);
if (vinc[2*i-1]+vinc[2*i])=2
then writeln(saida,' engaste')

else writeln(saida,' apoio');


end;
end;

repeat
read(entrada,tecla);
until(tecla=':');
read(entrada,nncarno);
for i:= 1 to 2*nn do carno[i]:=0.0;
repeat
read(entrada,tecla);
until(tecla=':');
for i:=1 to nncarno do read(entrada, k, carno[2*k-1],carno[2*k]);
writeln(saida);writeln(saida);
writeln(saida, ' NO Forca Momento ');

for i:=1 to nb do begin


qyi[i]:=0.0;
qyf[i]:=0.0
end;
repeat
read(entrada,tecla);
until(tecla=':');
read(entrada,nbcc);
repeat
read(entrada,tecla);
until(tecla=':');
read(entrada, k , qyi[k],qyf[k]);

writeln(saida);writeln(saida);
writeln(saida, ' BARRA Qy inicial Qy final ');
for i:=1 to nb do writeln(saida, i , qyi[i]:10:2,qyf[i]:10:2);

repeat
read(entrada,tecla);
until(tecla=':');
read(entrada, MRS);
writeln(saida);writeln(saida);
if MRS= 1 then writeln(saida, ' Metodo iterativo de Gauss Saidel')
else writeln(saida, ' Metodo direto de Gauss ');
writeln;

end;

{*************************************}

Procedure Vetor_carregamento;
var
i:integer;
m1,m2,m3,m4:real;

begin
writeln(veri,'Estou passando por aqui');

writeln(veri,' BARRA L[i] ');

for I:=1 to nb do begin


L[i]:=Abs(x[fim[i]]-x[ini[i]]);
writeln(veri,i:5,L[i]:10:2);
end;
writeln(veri);

for i:=1 to nb do if abs(qyf[i])>=abs(qyi[i]) then begin

m1:= (1.0/2.0) * qyi[i] * L[i];


m2:= (1.0/6.0) * (qyf[i]-
qyi[i]) * L[i];
m3:= (-1.0/20.0) * (qyf[i]-
qyi[i]) * L[i];
m4:= (-1.0/30.0) * (qyf[i]-
qyi[i]) * L[i];

carbar[4*i-3]:=m1+m2+m3+m4;

m1:= (1.0/12.0) * (qyi[i]) *


sqr(L[i]);
m2:= (1.0/30.0) * (qyf[i]-
qyi[i]) * sqr(L[i]);

carbar[4*i-2]:=m1+m2;

m1:= (1.0/2.0) * qyi[i] * L[i];


m2:= (1.0/3.0) * (qyf[i]-
qyi[i]) * L[i];
m3:= (1.0/20.0) * (qyf[i]-
qyi[i]) * L[i];
m4:= (-1.0/30.0) * (qyf[i]-
qyi[i]) * L[i];

carbar[4*i-1]:=m1+m2+m3+m4;

m1:= (-1.0/12.0) * (qyi[i]) *


sqr(L[i]);
m2:= (1.0/20.0) * (qyf[i]-
qyi[i]) * sqr(L[i]);

carbar[4*i]:=m1+m2;

end
else begin

end;
writeln(veri);writeln(veri,' Vetor carga atuando na barra :');writeln(veri);
writeln(veri, ' Barra Vi Mi Vf Mf');
writeln(veri);
for i:=1 to nb do writeln(veri,i:5, carbar[4*i-3]:10:2,carbar[4*i-
2]:10:2,carbar[4*i-1]:10:2,carbar[4*i]:10:2);

for i:= 1 to 2*nn do vcar[i]:=0.0;

for i:= 1 to nb do begin


vcar[2*ini[i]-1]:= vcar[2*ini[i]-1] + carbar[ 4*i-3];
vcar[2*ini[i]]:= vcar[2*ini[i]] + carbar[ 4*i-2];
vcar[2*fim[i]-1]:= vcar[2*fim[i]-1] + carbar[ 4*i-1];
vcar[2*fim[i]]:= vcar[2*fim[i]] + carbar[ 4*i];
end;

for i:= 1 to 2*nn do vcar[i]:=vcar[i]+carno[i];

end;
Procedure Determinando_matriz_de_rigidez;
var
i,j,k:integer;

begin
for i:= 1 to 2*nn do
for j:= 1 to 2*nn do S[i,j]:=0.0;

for i:= 1 to nb do begin

{Determinando a matriz de rigidez de membro}

SM[i,1,1]:= 12.0*E[i]*Ine[i]/exp(3.0*ln(L[i]));
SM[i,1,2]:= 6.0*E[i]*Ine[i]/exp(2.0*ln(L[i]));
SM[i,1,3]:= SM[i,1,1];
SM[i,1,4]:= SM[i,1,2];
SM[i,2,1]:= SM[i,1,2];
SM[i,2,2]:= 4.0*E[i]*Ine[i]/L[i];
SM[i,2,3]:= -SM[i,2,1];
SM[i,2,4]:= 2.0*E[i]*Ine[i]/L[i];
SM[i,3,1]:= SM[i,1,3];
SM[i,3,2]:= SM[i,2,3];
SM[i,3,3]:= SM[i,1,1];
SM[i,3,4]:= SM[i,3,2];
SM[i,4,1]:= SM[i,1,4];
SM[i,4,2]:= SM[i,2,4];
SM[i,4,3]:= SM[i,3,4];
SM[i,4,4]:= SM[i,2,2];

{Alocando na de rigidez}

S[2*Ini[i]-1, 2*Ini[i]-1] := S[2*Ini[i]-1,2*Ini[i]-1] +


SM[i,1,1];
S[2*Ini[i]-1, 2*Ini[i]] := S[2*Ini[i]-1,2*Ini[i]] +
SM[i,1,2];
S[2*Ini[i]-1, 2*Fim[i]-1] := S[2*Ini[i]-1,2*Fim[i]-1] +
SM[i,1,3];
S[2*Ini[i]-1, 2*Fim[i]] := S[2*Ini[i]-1,2*Fim[i]] +
SM[i,1,4];
S[2*Ini[i], 2*Ini[i]-1] := S[2*Ini[i],2*Ini[i]-1] +
SM[i,2,1];
S[2*Ini[i], 2*Ini[i]] := S[2*Ini[i],2*Ini[i]] +
SM[i,2,2];
S[2*Ini[i], 2*Fim[i]-1] := S[2*Ini[i],2*Fim[i]-1] +
SM[i,2,3];
S[2*Ini[i], 2*Fim[i]] := S[2*Ini[i],2*Fim[i]] +
SM[i,2,4];
S[2*Fim[i]-1, 2*Ini[i]-1] := S[2*Fim[i]-1,2*Ini[i]-1] +
SM[i,3,1];
S[2*Fim[i]-1, 2*Ini[i]] := S[2*Fim[i]-1,2*Ini[i]] +
SM[i,3,2];
S[2*Fim[i]-1, 2*Fim[i]-1] := S[2*Fim[i]-1,2*Fim[i]-1] +
SM[i,3,3];
S[2*Fim[i]-1, 2*Fim[i]] := S[2*Fim[i]-1,2*Fim[i]] +
SM[i,3,4];
S[2*Fim[i], 2*Ini[i]-1] := S[2*Fim[i],2*Ini[i]-1] +
SM[i,4,1];
S[2*Fim[i], 2*Ini[i]] := S[2*Fim[i],2*Ini[i]] +
SM[i,4,2];
S[2*Fim[i], 2*Fim[i]-1] := S[2*Fim[i],2*Fim[i]-1] +
SM[i,4,3];
S[2*Fim[i], 2*Fim[i]] := S[2*Fim[i],2*Fim[i]] +
SM[i,4,4];
end;
writeln(veri);
writeln(veri, 'Matriz de rigidez de menbro ');
writeln(veri);
for i:= 1 to nb do begin
writeln(veri,' SM da barra', i:5, ' :');
for j:= 1 to 4 do begin
for k:= 1 to 4 do
write(veri,SM[i,j,k]:10:1);
writeln(veri);
end;

end;
writeln(veri);writeln(veri, ' Matriz de rigidez [S] :');

for i:= 1 to 2*nn do begin


for j:= 1 to 2*nn do write(veri,S[i,j]:10:2);
writeln(veri);
end;

end;

{*******************************}
procedure Prepara_sistema;
var
i,j:integer;

begin
for i:= 1 to 2*nn do if vinc[i]=1 then begin
for j:= 1 to 2*nn do begin
S[i,j]:= 0.0;
S[j,i]:= 0.0
end;
vcar[i]:=0.0;
S[i,i]:=1.0;
end;
writeln(veri);writeln(veri, ' Matriz de rigidez [S] preparada com o vetor
carregamento :'); writeln(veri);

for i:= 1 to 2*nn do begin


for j:= 1 to 2*nn do write(veri,S[i,j]:10:2);
writeln(veri,vcar[i]:15:2);
end;
end;

{************************************}

Procedure Resolvendo_sistema;
var
i,j,k:integer;
soma:real;
begin
for i:= 1 to 2*nn do desloca[i]:=0.0;
for i:= 1 to 200 do begin
for j:= 1 to 2*nn do begin
soma:=0.0;
for k:= 1 to 2*nn do if j<>k then
soma:=soma+S[j,k]*desloca[k];
desloca[j]:=(vcar[j]-soma)/S[j,j];
end;
end;

writeln(saida);writeln(saida,' NO Desl. em y Rotacao em


z');writeln(saida);

for i:= 1 to nn do writeln(saida,i:5,' ',desloca[2*i-1],' ',desloca[2*i]);


end;

Procedure Acoes_extremidade;

var

Extrema:array[1..4*no] of real;
i,j,k:integer;
Auxiliar,Aux:array[1..4]of real;
soma:real;

begin
for i:= 1 to nb do begin
Aux[1]:=desloca[2*Ini[i]-1];
Aux[2]:=desloca[2*Ini[i]];
Aux[3]:=desloca[2*Fim[i]-1];
Aux[4]:=desloca[2*Fim[i]];
for j:=1 to 4 do begin
soma:=0.0;
for k:=1 to 4 do soma:=soma+SM[i,j,k]*Aux[k];
Auxiliar[j]:=soma;
end;
Extrema[4*i-3]:=Auxiliar[1]-carbar[4*i-3];
Extrema[4*i-2]:=Auxiliar[2]-carbar[4*i-2];
Extrema[4*i-1]:=Auxiliar[3]-carbar[4*i-1];
Extrema[4*i] :=Auxiliar[4]-carbar[4*i];
end;

writeln(saida);
writeln(saida, ' BARRA Vi Mi Vf Mf ');
writeln(saida);
for i:= 1 to nb do writeln(saida,i:5,Extrema[4*i-3]:15:4,Extrema[4*i-
2]:15:4,Extrema[4*i-1]:15:4,Extrema[4*i]:15:4);

for i:= 1 to 2*nn do reac[i]:=0.0;

for i:=1 to nb do begin


reac[2*Ini[i]-1]:=reac[2*Ini[i]-1]+Extrema[4*i-3];
reac[2*Ini[i]] :=reac[2*Ini[i]] +Extrema[4*i-2];
reac[2*Fim[i]-1]:=reac[2*Fim[i]-1]+Extrema[4*i-1];
reac[2*Fim[i]] :=reac[2*Fim[i]] +Extrema[4*i];
end;
writeln(saida);
writeln(saida, ' NO V(N) M(Nm) ');
for i:= 1 to nn do writeln(saida,I:5,reac[2*i-1]:15:2, reac[2*i]:15:2);

end;

begin
clrscr;
Criando_arquivo;
Entrada_dados;
Vetor_carregamento;
Determinando_matriz_de_rigidez;
Prepara_sistema;
Resolvendo_sistema;
Acoes_extremidade;
readln;
close(saida);close(veri);

end.

Você também pode gostar