Jump to content


Eagle_Eye's Content

There have been 1 items by Eagle_Eye (Search limited from 20/04/2023)


Ordernar por                Order  

#1005846 Ajuda A Programar Em Pascal!

Posted by Eagle_Eye on 01/12/2010, 13:13 in Dúvidas Gerais

Boa tarde amigos! Eu estou a escrever um programa em pascal (com o compilador freepascal 0.64a) através de varios procedimentos em que se pretende calcular a "flecha" de um função, que equivale à distancia entre os zeros e o mínimo ou máximo e precisava da ajuda de alguem que percebesse disto.

{«««««««««««««««««««««««««««« INTRODUÇÃO DOS DADOS DA VIGA »»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»}

Procedure IntDados_Viga(Var L:Real;b,K,E,MI,Beta,Alfa,Lambda:Real);

Begin
Repeat
TextColor(White);
Write('Indique a largura da viga "b"= ');
TextColor(LightGreen);
Readln(B);
If (b<=0) then Erro1
Until (b>0);

Repeat
TextColor(White);
Write('Indique o modulo do solo "K"= ');
TextColor(LightGreen);
Readln(K);
If (K<=0) then Erro1
Until (K>0);

Repeat
TextColor(White);
Write('Modulo da elasticidade "E"= ');
TextColor(LightGreen);
Readln(E);
If (E<=0) then Erro1
Until (E>0);

Repeat
TextColor(White);
Write('Indique o momento de inercia "MI"= ');
TextColor(LightGreen);
Readln(MI);
If (MI<=0) then Erro1
Until (MI>0);

Beta:=K*b;
Alfa:=sqrt(sqrt(Beta/(4*E*MI)));
Lambda:=2*Pi/Alfa;

Repeat
TextColor(White);
Write('Indique o comprimento da viga "L" maior que',2.5*Lambda:6:1,'= ');
TextColor(LightGreen);
Readln(L);
If (L<=2.5*Lambda) then Erro2 ('O comprimento da viga insuficiente!');
Until L>2.5*Lambda;

End;
{«««««««««««««««««««««««««««« INTRODUÇÃO DOS DADOS DA CARGA »»»»»»»»»»»»»»»»»»»»»»»»»»»»»»}

Procedure IntDados_Carga(N:Integer; VAR P,a,x:Real; L:Real);

Var i:Integer;

Begin
Repeat
Writeln;
Writeln;
TextColor(White);
Write('Numero de cargas (n) a aplicar= ');
TextColor(LightGreen);
Readln(N);
If (N<1) then Erro2 ('O número de cargas a aplicar tem que ser maior ou igual a 1');
Until (N>=1);

For i:=1 to N do begin
TextColor(White);
Write('Valor da carga P',i:1,'= ');
TextColor(LightGreen);
Readln(P);

Repeat
TextColor(White);
Write('Distancia entre a origem e o ponto de aplicacao da Carga a',i:1,'= ');
TextColor(LightGreen);
Readln(a);
If (a<0) or (a>L) then Erro1
Until (a>=0) and (a<=L);

Repeat
TextColor(White);
Write('Seccao onde pretende obter o valor da flecha x',i:1,'= ');
TextColor(LightGreen);
Readln(x);
If (x<=0) or (x>L) then Erro1
Until (x>0) and (x<=L);
Writeln;
End;

End;

{««««««««««««««««««««««««« NUMERO DE SECCOES EQUIDISTANTES »»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»}

Procedure Num_SecEqui(var NEQ:Integer);

Begin
Repeat
TextColor(White);
Write('Indique o numero de seccoes equidistantes (NEQ)= ');
TextColor(LightGreen);
Readln(NEQ);
If(NEQ<0) or (NEQ>Max) then Erro2 ('Atencao: NEQ>0 e NEQ<=100000!');
Until(NEQ>=0) and (NEQ<=Max);
End;
{««««««««««««««««« CALCULO DA FLECHA E DA DISTANCIA DA FLECHA À ORIGEM »»»»»»»»»»»»»»»»»»»}

Procedure Calculo_Flecha(NEQ:Integer;L,P,a,x,Beta,Alfa:Real);

Var Q,B1,B2,Fx:Real;
i:Integer;

Begin
Q:=(P*Alfa)/(2*Beta);
B1:=Alfa*(a-x);
B2:=Alfa*(x-a);
dx:=L/(NEQ);

For i:=0 to NEQ do begin
If(x>=0) and (x<=a) then
Fx:=Q*exp(-B1)*(sin(Alfa*(a-x))+cos(Alfa*(a-x)));
If(x>a) and (x<=L) then
Fx:=Q*exp(-B2)*(sin(Alfa*(x-a))+cos(Alfa*(x-a)));
x:=i*dx;
end;
End;

{«««««««««««««««««««««««««««« RESULTADOS DO CALCULO DA FLECHA »»»»»»»»»»»»»»»»»»»»»»»»»»»»}

Procedure Resultados_Flecha();

Begin
Write;
Readln;
End;

{««««««««««««««««««««««««««««««««« CALCULO DE ZEROS »»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»}

Procedure Calculo_Zeros(Beta,Alfa,a,xA,xB,Erro:Real;MaxIteracoes:Integer);

Var xMedio:Real;
FxA,FxMedio:Real;
i:Integer;

Begin
Write('Em construcao');
Readln;
end;

{««««««««««««««««««««««««««««««««««« ABRIR GRAFICO »»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»}

Procedure AbrirGrafico();

Begin
Write('Em construcao');
Readln;
End;

{««««««««««««««««««««««««««««««««« GRAFICO DA FLECHA »»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»}

Procedure Grafico_Flechas();

Begin
Write('Em construcao');
Readln;
End;

{««««««««««««««««««««««««««««««««« SAIR DO PROGRAMA »»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»}

Procedure SairPrograma(var Sair:Char);

Begin
Repeat
Writeln;
TextColor(22);
Write('Pretende Continuar o Programa (S/N)? ');
Sair:=Readkey;
Sair:=UpCase(Sair);
Until Sair IN ['S','N']
End;

{=======================================================================================}
{################################ BLOCO PRINCIPAL###################################
{=======================================================================================}


Begin
Moldura(9);
Password;
Writeln;
TextColor(LightBlue);
Gotoxy(55,22);
Writeln('Continuar Programa.....');
REPEAT UNTIL Keypressed;

Clrscr;
IntDados_Viga(L,b,K,E,MI,Beta,Alfa,Lambda);
IntDados_Carga(N,P,a,x,L);
Num_SecEqui(NEQ);
Calculo_Flecha(NEQ,L,P,a,x,Beta,Alfa);
End.


Preciso da vossa ajuda no ponto 4 (Nao consigo perceber como fazer este passo)

4) Para cada secção de (0 a NEQ) calcular:
4.1) Distância x[ i ] à origem O;
4.2) Flecha F[ i ] para a distância x[ i ];

SERA QUE ALGUEM ME CONSEGUE AJUDAR? OBRIGADO!




IPB Skin By Virteq