Ir ao conteúdo

Posts recomendados

Postado
 

Olá pessoal

Sou bem leigo na programação e estou precisando da ajuda de alguém que tenha disponibilidade.

Tenho um script de um programa que me auxilia a realizar o cálculo da energia cinética de uma gota de chuva. Só que está em Pascal e gostaria de colocá-lo em python para rodar sem precisar de nenhum programa 

 

Se alguém puder ajudar converter me ajudaria muito, vou utilizar em aulas, então mais pessoas serão beneficiadas. Se eu tiver o script em python depois posso tentar fazer um layout bonitinho para disponibilizar para eles 

Desde já agradeço. Segue o script em pascal

 

USES CRT;

Const
	g = 9.81;
Var
	TxTArq                               		: text;
	i, j, n                                 			: integer;
	ch, fixatela                          			: char;
	K1, K2, K3, K4, EcN, EcS, 
	tempoPrec, t, dt, V, tfim, alt, 
	L, hb, deltaD, Ca, vou, PS, D, Ip		: real;

Procedure Entra_Dados;
begin
	clrscr; 	gotoxy(8,8);
	writeln('   FORNECA OS SEGUINTES DADOS: ');
	write('- Intensidade de Precipitacão, mm h-1.......  I  = ');readln(Ip);
	write('- Diâmetro medio das gotas; mm............  D  = ' );readln(D);
	write('- Pressão nos bicos,  PSI, ........................  P  = ');readln(PS);
	write('- Altura  do  Bico, m, .............................. H  = ');readln(hb);
	write('- Duração da precipitação, h,......... T  =); readln(tempoPrec);
end;

Function f ( a, b: real): real;
begin
	f :=  g - C2 * sqr(v) 
end;

Procedure Calcula_Velocidade;
begin
	t:= 0;
	dt:= 0.001;
	tfim:= 2;
	alt:= hb - 0.30;
	C2 := EXP(ln(0.4671)-0.9859 * ln(D));
	vou:= 0;
	vou:= 0.95 * sqrt((2 * 9.81) * (PS * (10/14.2)));
	v:= vou;
	deltaD:= 0;
	WHILE (t <= tfim) and (alt >= 0) do
	begin
		K1 := dt * f(t,v);
		K2 := dt * f(t + dt/2, v + K1/2);
		K3 := dt * f(t + dt/2, v + K2/2);
		K4 := dt * f(t + dt  , v + K3);
		t := t + dt;
		v := v + (1/6) * (K1 + 2 * K2 + 2 * K3 + K4);
		deltaD := v * dt;
		alt := alt - deltaD;
	end;
end;


Procedure Calcula_Energias_Cinetica;
	begin
		L:= Ip * tempoPrec;
		EcS:= ((sqr(v)*L)/2);
		EcN :=((2.27093 * (Ln(Ip)) + 17.124)) * L;
	end; 


Procedure Mostra_Resultados;
begin
	clrscr;
	gotoxy(14,2);
	writeln('-------------------------------------------------------------------');
	writeln('  DADOS DE ENTRADA:');
	writeln('- Intensidade de Precipitação...............I = ', Ip:3:1,' mm h-1');
	writeln('- Diâmetro metro medio das gotas .....D50 =  ', D:3:2,' mm');
	writeln('- Pressão nos bicos............................. PS =  ',PS:3:1,' PSI.');
	writeln('- Altura  do Bico ............................... Hb =  ',Hb:3:1,' m');
	write('- Duração da precipitação, h,.................T=);
         readln(tempoPrec);
	writeln('-------------------------------------------------------------------');
	gotoxy(14,12);
	writeln('-------------------------------------------------------------------');
	writeln('  DADOS DE SAIDA:');
	writeln;
	writeln('- Velocidade Inicial da gota ..........  vou  = ', vou:3:2,' m s-1');
	writeln('- Velocidade Final da gota ..............Vf  =  ', V :3:2,' m s-1');
	writeln('- Energia Cinética Simulada......... EcS = ', Ecs :3:2,' J m-2');
	writeln('- Energia Cinética da Chuva......... EcN = ',Ecn :3:2,' J m-2');
	writeln('- Relação EcS / EcN ............RE = ',(Ecs/Ecn)*100:3:0,' %');
	writeln('-------------------------------------------------------------------');
end;



BEGIN
	clrscr;
	Entra_Dados;
	Calcula_velocidade;
	Calcula_Energias_Cineticas;
	Mostra_Resultados;
	Fixatela := readkey;
END.

 

  • Curtir 1
  • Membro VIP
Postado

@Jefferson Gomes Confessor, esse código não está compilando em Pascal. Faltou declarar umas variáveis e fechar algumas strings.

 

Tentei dar uma arrumada geral, segue:

{$CODEPAGE UTF8} //Uma forma de tentar conseguir imprimir palavras acentuadas
uses
  CRT;
const
  g = 9.81;
var
  //TxTArq: text;
  i, j, n: integer;
  //ch, fixatela: char;
  ch : char;
  C2, K1, K2, K3, K4, EcN, EcS, 
  tempoPrec, t, dt, V, tfim, alt, 
  L, hb, deltaD, Ca, vou, PS, D, Ip: real;

procedure Entra_Dados;
begin
  ClrScr; GotoXY(8,8);
  writeln('   FORNECA OS SEGUINTES DADOS: ');
  write  ('- Intensidade de Precipitacão, mm h-1.......  I  = '); readln(Ip);
  write  ('- Diâmetro medio das gotas; mm............  D  = ' ); readln(D);
  write  ('- Pressão nos bicos,  PSI, ........................  P  = '); readln(PS);
  write  ('- Altura  do  Bico, m, .............................. H  = '); readln(hb);
  write  ('- Duração da precipitação, h,......... T  ='); readln(tempoPrec);
end;

function f (a, b: real): real;
begin
  f := g - C2 * sqr(v) 
end;

procedure Calcula_Velocidade;
begin
  t := 0;
  dt := 0.001;
  tfim := 2;
  alt := hb - 0.30;
  C2 := EXP(ln(0.4671)-0.9859 * ln(D));
  vou := 0;
  vou := 0.95 * sqrt((2 * 9.81) * (PS * (10/14.2)));
  v := vou;
  deltaD := 0;
  while (t <= tfim) and (alt >= 0) do
  begin
    K1 := dt * f(t,v);
    K2 := dt * f(t + dt/2, v + K1/2);
    K3 := dt * f(t + dt/2, v + K2/2);
    K4 := dt * f(t + dt  , v + K3);
    t := t + dt;
    v := v + (1/6) * (K1 + 2 * K2 + 2 * K3 + K4);
    deltaD := v * dt;
    alt := alt - deltaD;
  end;
end;

procedure Calcula_Energias_Cinetica;
begin
  L := Ip * tempoPrec;
  EcS := ((sqr(v)*L)/2);
  EcN := ((2.27093 * (Ln(Ip)) + 17.124)) * L;
end; 

procedure Mostra_Resultados;
begin
  ClrScr;
  GotoXY(14,2);
  writeln('-------------------------------------------------------------------');
  writeln('  DADOS DE ENTRADA:');
  writeln('- Intensidade de Precipitação...............I = ', Ip:3:1,' mm h-1');
  writeln('- Diâmetro metro medio das gotas .....D50 =  ', D:3:2,' mm');
  writeln('- Pressão nos bicos............................. PS =  ', PS:3:1,' PSI.');
  writeln('- Altura  do Bico ............................... Hb =  ', Hb:3:1,' m');
  write  ('- Duração da precipitação, h,.................T='); readln(tempoPrec);
  writeln('-------------------------------------------------------------------');
  GotoXY(14,12);
  writeln('-------------------------------------------------------------------');
  writeln('  DADOS DE SAIDA:');
  writeln;
  writeln('- Velocidade Inicial da gota ..........  vou  = ', vou:3:2, ' m s-1');
  writeln('- Velocidade Final da gota ..............Vf  =  ', V:3:2, ' m s-1');
  writeln('- Energia Cinética Simulada......... EcS = ', Ecs :3:2, ' J m-2');
  writeln('- Energia Cinética da Chuva......... EcN = ', Ecn :3:2, ' J m-2');
  writeln('- Relação EcS / EcN ............RE = ', (Ecs/Ecn)*100:3:0, ' %');
  writeln('-------------------------------------------------------------------');
end;

BEGIN
  ClrScr;
  Entra_Dados;
  Calcula_velocidade;
  Calcula_Energias_Cinetica;
  Mostra_Resultados;
  ReadKey;
END.

 

 

Sobre a questão sobre converter (ou não) deixo para outros membros mais experientes tratarem. Favor aguardar.

 

 

  • Curtir 1
  • Amei 1
Postado

@Simon Viegas Justamente Simon, eu nao estava conseguindo rodar ele. Vi que além da minha duvida, você também tem ajudado a responder muitas outras aqui no site, então te agradeço muito viu. Só de ter corrigido esse erro para mim já foi de imensa ajuda. Muito obrigado mesmo.

E para futuros leitores, eu estava querendo transformá-lo em python para criar um layout mais receptivo.

  • Curtir 1
  • 7 meses depois...
Postado

@Jefferson Gomes Confessor Eu corrigi o programa em Pascal, está rodando e converti em Python, mas estão dando resultados diferentes.
Diferenças básicas: no Pascal a variáveis não são case-sensitive, já em Python são, encontrei esses problemas e resolvi, mas mesmo assim ainda dá erro no cálculo.

No Python usar variáveis globais não é recomendado, esse pode ser um dos problemas, tentei usar a palavra revervada 'global' nos procedimentos, mas mesmo assim, não calcula como o programa em Pascal.

E analisando mais a fundo a função 'f", tem os parâmetros 'a' e 'b', mas não são usados, 'f(a,b)' usa g e v, ambas convertidas em 'global', talvez seja ai o erro no cálculo.

Se você tiver a fórmula pura em "matematiquez" :), consigo corrigir pra você.

Mas resta saber se o programa em Pascal também está calculando certo, pois como eu disse a função 'f', não usa 'a' e 'b', mas são passados a ele.

Segue o programa em Pascal corrigido, compilei no FreePascal pra Linux e rodou, pra Windows não fiz, tem 20 anos q não uso ele :)!

Para Windows tem o Lazarus, versão do Delphi open source, você consegue compilar nele, inclusive depois fazer uma versão GUI e posteriormente uma versão para Android você consegue compilar nele também.

Segue a versão em Python 3.5+ na 2.x não roda!

Veja se descobre o erro, provavelmente é a função 'f'. Pois não ocorre a computação dos parâmetros passados.

Na versão Python deixei o código em Pascal comentado pra você ter uma referência.

Para comentar uma linha no Python use '#" (hashtag), pode ser usado no meio da linha, tudo q for escrito após será considerado comentário.

 

USES CRT;

Const
	g = 9.81;
Var
//	TxTArq : text;
//	i, j, n : integer;
//	ch, 
        Fixatela : char;
	K1, K2, K3, K4, EcN, EcS, 
	tempoPrec, t, dt, V, tfim, alt, 
//	L, hb, deltaD, Ca, vou, PS, D, Ip, : real;
	L, hb, deltaD, vou, PS, D, Ip, C2 : real;

Procedure Entra_Dados;
begin
//	clrscr; 
//        gotoxy(8,8);
	writeln('   FORNECA OS SEGUINTES DADOS: ');
	write('- Intensidade de Precipitacão, mm h-1.......  I  = ');readln(Ip);
	write('- Diâmetro medio das gotas; mm............  D  = ' );readln(D);
	write('- Pressão nos bicos,  PSI, ........................  P  = ');readln(PS);
	write('- Altura  do  Bico, m, .............................. H  = ');readln(hb);
	write('- Duração da precipitação, h,......... T  ='); readln(tempoPrec);
end;

Function f ( a, b: real): real;
begin
	f :=  g - C2 * sqr(v) 
end;

Procedure Calcula_Velocidade;
begin
	t:= 0;
	dt:= 0.001;
	tfim:= 2;
	alt:= hb - 0.30;
	C2 := EXP(ln(0.4671)-0.9859 * ln(D));
	vou:= 0;
	vou:= 0.95 * sqrt((2 * 9.81) * (PS * (10/14.2)));
	v:= vou;
	deltaD:= 0;
	WHILE (t <= tfim) and (alt >= 0) do
	begin
		K1 := dt * f(t,v);
		K2 := dt * f(t + dt/2, v + K1/2);
		K3 := dt * f(t + dt/2, v + K2/2);
		K4 := dt * f(t + dt  , v + K3);
		t := t + dt;
		v := v + (1/6) * (K1 + 2 * K2 + 2 * K3 + K4);
		deltaD := v * dt;
		alt := alt - deltaD;
	end;
end;


Procedure Calcula_Energias_Cinetica;
	begin
		L:= Ip * tempoPrec;
		EcS:= ((sqr(v)*L)/2);
		EcN :=((2.27093 * (Ln(Ip)) + 17.124)) * L;
	end; 


Procedure Mostra_Resultados;
begin
	clrscr;
//	gotoxy(14,2);
	writeln('-------------------------------------------------------------------');
	writeln('  DADOS DE ENTRADA:');
	writeln('- Intensidade de Precipitação...............I = ', Ip:3:1,' mm h-1');
	writeln('- Diâmetro metro medio das gotas .....D50 =  ', D:3:2,' mm');
	writeln('- Pressão nos bicos............................. PS =  ',PS:3:1,' PSI.');
	writeln('- Altura  do Bico ............................... Hb =  ',Hb:3:1,' m');
	write('- Duração da precipitação, h,.................T=');
         readln(tempoPrec);
	writeln('-------------------------------------------------------------------');
//	gotoxy(14,12);
	writeln('-------------------------------------------------------------------');
	writeln('  DADOS DE SAIDA:');
	writeln;
	writeln('- Velocidade Inicial da gota ..........  vou  = ', vou:3:2,' m s-1');
	writeln('- Velocidade Final da gota ..............Vf  =  ', V :3:2,' m s-1');
	writeln('- Energia Cinética Simulada......... EcS = ', Ecs :3:2,' J m-2');
	writeln('- Energia Cinética da Chuva......... EcN = ',Ecn :3:2,' J m-2');
	writeln('- Relação EcS / EcN ............RE = ',(Ecs/Ecn)*100:3:0,' %');
	writeln('-------------------------------------------------------------------');
end;

BEGIN
	clrscr;
	Entra_Dados;
	Calcula_velocidade;
	Calcula_Energias_Cinetica;
	Mostra_Resultados;
	Fixatela := readkey;
END.

 

Resultado do programa em Pascal:

-------------------------------------------------------------------
  DADOS DE ENTRADA:
- Intensidade de Precipitação...............I = 1.0 mm h-1
- Diâmetro metro medio das gotas .....D50 =  1.00 mm
- Pressão nos bicos............................. PS =  1.0 PSI.
- Altura  do Bico ............................... Hb =  1.0 m
- Duração da precipitação, h,.................T=1
-------------------------------------------------------------------
-------------------------------------------------------------------
  DADOS DE SAIDA:

- Velocidade Inicial da gota ..........  vou  = 3.53 m s-1
- Velocidade Final da gota ..............Vf  =  4.07 m s-1
- Energia Cinética Simulada......... EcS = 8.29 J m-2
- Energia Cinética da Chuva......... EcN = 17.12 J m-2
- Relação EcS / EcN ............RE =  48 %
-------------------------------------------------------------------

 

Python 3.5+

# USES CRT;
#from math import exp, log
from math import exp, log, sqrt
from os import system

# A função log sem o segundo parametro é o ln do Pascal, se quiser log10, é só fazer log( valor, 10)
def log10(valor):
    return log(valor,10)

# Funcao para limpar a tela, no Linux é diferente do Windows, Comente a linha do SO q você não quer
def clrscr():
    system('clear') # Linux
    #system('cls') # Windows
    
#Const
g = 9.81
#Var
TxTArq = ''
#i, j, n = 0 
# : integer;
#//	ch, 
Fixatela = '' # : char;
K1 = K2 = K3 = K4 = EcN = EcS = tempoPrec = t = dt = v = V = tfim = alt = L = hb = deltaD = vou = PS = Ip = C2 = 0.0 #: real;
Ip = D = 1.0

#writeln, write = print

#Procedure Entra_Dados;
def Entra_Dados():
#begin
    global Ip, D, PS, hb, tempoPrec
#//	clrscr;
    clrscr()
#//        gotoxy(8,8);
    print('   FORNECA OS SEGUINTES DADOS: ');
    Ip = float(input('- Intensidade de Precipitacão, mm h-1.......  I  = '))
    D = float(input('- Diâmetro medio das gotas; mm............  D  = ' ))
    print(f'D={D}')
    PS = float(input('- Pressão nos bicos,  PSI, ........................  P  = '))
    hb = float(input('- Altura  do  Bico, m, .............................. H  = '))
    tempoPrec = float(input('- Duração da precipitação, h,......... T  ='))
#end;

#Function f ( a, b: real): real;
def f( a, b):
#begin
#	f :=  g - C2 * sqr(v) 
    global C2, g, v
    return  g - C2 * sqrt(v) 
#end;

#Procedure Calcula_Velocidade;
def Calcula_Velocidade():
#begin
    global t, dt, tfim, alt, C2, vou, v, deltaD, K1, K2, K3, K4, alt
    t = 0;
    dt = 0.001;
    tfim = 2;
    alt = hb - 0.30;
    C2 = exp(log(0.4671)-0.9859 * log(D))
#    vou:= 0;
    vou = 0.95 * sqrt((2 * 9.81) * (PS * (10/14.2)));
    v = vou;
    deltaD = 0;
#    WHILE (t <= tfim) and (alt >= 0) do
    while (t <= tfim) and (alt >= 0):
#	begin
        K1 = dt * f(t,v);
        K2 = dt * f(t + dt/2, v + K1/2);
        K3 = dt * f(t + dt/2, v + K2/2);
        K4 = dt * f(t + dt  , v + K3);
        t = t + dt;
        v = v + (1/6) * (K1 + 2 * K2 + 2 * K3 + K4);
        deltaD = v * dt;
        alt = alt - deltaD;
#	end;
#end;

#Procedure Calcula_Energias_Cinetica;
def Calcula_Energias_Cinetica():
#	begin
    global L, EcS, EcN, Ip, tempoRec
    L = Ip * tempoPrec;
    EcS = ((sqrt(v)*L)/2);
    EcN = ((2.27093 * (log(Ip)) + 17.124)) * L;
#	end; 

#Procedure Mostra_Resultados;
def Mostra_Resultados():
#begin
#	clrscr;
    clrscr()
#//	gotoxy(14,2);
    global tempoRec
    print('-------------------------------------------------------------------');
    print('  DADOS DE ENTRADA:');
    print(f'- Intensidade de Precipitação...............I = {Ip:3.1f}  mm h-1');
    print(f'- Diâmetro metro medio das gotas .........D50 = {D:3.2f} mm');
    print(f'- Pressão nos bicos........................PS = {PS:3.1f} PSI.');
    print(f'- Altura  do Bico .........................Hb = {hb:3.1f} m');
#        readln(tempoPrec);
    tempoPrec = float(input(f'- Duração da precipitação, h,.............. T ='))
#	writeln('-------------------------------------------------------------------');
#//	gotoxy(14,12);
    print('-------------------------------------------------------------------');
    print('  DADOS DE SAIDA:');
    print(f'- Velocidade Inicial da gota ............vou = {vou:3.2f} m s-1');
    print(f'- Velocidade Final da gota ...............Vf = {v:3.2f} m s-1');
    print(f'- Energia Cinética Simulada..............EcS = {EcS:3.2f} J m-2');
    print(f'- Energia Cinética da Chuva..............EcN = {EcN:3.2f} J m-2');
    print(f'- Relação EcS / EcN ......................RE = {((EcS/EcN)*100):4.1f} %');
    print('-------------------------------------------------------------------');
#end;

#BEGIN
#	clrscr;
clrscr()
Entra_Dados()
Calcula_Velocidade()
Calcula_Energias_Cinetica()
Mostra_Resultados()
Fixatela = input()
#END.

 

Resultado em Python, veja q estão diferentes.

-------------------------------------------------------------------
  DADOS DE ENTRADA:
- Intensidade de Precipitação...............I = 1.0  mm h-1
- Diâmetro metro medio das gotas .........D50 = 1.00 mm
- Pressão nos bicos........................PS = 1.0 PSI.
- Altura  do Bico .........................Hb = 1.0 m
- Duração da precipitação, h,.............. T =1
-------------------------------------------------------------------
  DADOS DE SAIDA:
- Velocidade Inicial da gota ............vou = 3.53 m s-1
- Velocidade Final da gota ...............Vf = 4.99 m s-1
- Energia Cinética Simulada..............EcS = 1.12 J m-2
- Energia Cinética da Chuva..............EcN = 17.12 J m-2
- Relação EcS / EcN ......................RE =  6.5 %
-------------------------------------------------------------------

 

Espero ter ajudado!

[]'s

calc_energia_cinetica_gota_de_chuva.zip

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

LANÇAMENTO!

eletronica2025-popup.jpg


CLIQUE AQUI E BAIXE AGORA MESMO!