pmp Escreveu:Bom dia!
Ontem, à noite, cheguei a nova solução:
E, de facto, dá a resposta correcta ao desafio do professor. Agora não cheguei lá pelo método mais ortodoxo, fiz algumas aproximações que ainda estou a tentar perceber a sua validade. Depois, se tiver certo, explico melhor.
jap Escreveu:pmp Escreveu:Bom dia!
Ontem, à noite, cheguei a nova solução:
E, de facto, dá a resposta correcta ao desafio do professor. Agora não cheguei lá pelo método mais ortodoxo, fiz algumas aproximações que ainda estou a tentar perceber a sua validade. Depois, se tiver certo, explico melhor.
A expressão está quase certa, mas só quase...
vbmaster Escreveu:jap Escreveu:pmp Escreveu:Bom dia!
(...)
E considera os segmentos de um metro?
Epah, devo estar com a cabeça toda atrofiada para ainda não ter feito um algoritmo disto... mas é que desocntar segmentos de um metro a 1,5 * 10 ^11 é puxado e demora eternidades a calcular... ou é suposto apenas resolvermos a fórmula no algoritmo?
#include <iostream>
#include <math.h>
using namespace std;
const double mt = 5.98e+24;
const double ms = 1.99e+30;
const double g = 6.67e-11;
double aceleraçao (double x)
{
return ((g * (ms + mt)) / pow(x,2));
}
double abc (double a, double b, double c)
{
// Resolve a equação quadrática
double delta = sqrt(pow(b,2) - 4 * a * c);
return ((-b - delta) / (2 * a));
}
int main ()
{
double L = 1.5e+11; // L = distância terra-sol
double tempo = 0;
double v0 = 0; //velocidadezero
double soma = 0;
for (L; L > 0; L -= 10000)
{
tempo = abc((-aceleraçao(L) / 2), -v0 , 10000);
v0 += (aceleraçao(L) * tempo);
soma += tempo;
}
cout << soma;
return 0;
}
jap Escreveu:
1) Podes explicar porque é que somaste a massa da Terra à do Sol na expressão da aceleração gravítica? Não é que isto faça grande diferença, pois a massa da Terra é insignificante comparada com a do Sol..,
vbmaster Escreveu:jap Escreveu:
Bem, a linha de pensamento não foi propriamente minha, mas é mais ou menos assim:
Temos a terra na extremida de uma estrada, de comprimento L (distância terra ao sol), e na outra extremidade o sol. Começamos a contar o tempo e a terra começa-se a aproximar do sol, mas o sol ligeiramente também se aproxima da terra, o que poderia levar a resultados errados se só considerasse a terra a aproximar-se do sol. Como tal,
Pensei no seguinte, uma particula material na extremidade da estrada, que se mova com a aceleraçao da terra mais a do sol, contando o tempo até acabar de percorrer a estrada. Assim evita-se o problema de o sol proventura mover-se na direcção da terra.
(...)
(define (aceleraçao distancia)
(/ (* 6.67e-11 (+ 1.99e30 5.98e24)) (expt distancia 2)))
(define (abc a b c)
(define (delta a b c)
(sqrt (+ (* b b) (* (- 4) a c))))
(/ (+ (- b) (- (delta a b c))) (* 2 a)))
(define (main L soma v0)
(define (auxiliar1 L soma v0 aceleraçaosistema)
(auxiliar2 L soma v0 (abc (/ (- aceleraçaosistema) 2) (- v0) 1e+4) aceleraçaosistema))
(define (auxiliar2 L soma v0 intervalo_tempo aceleraçaosistema)
(main L (+ soma intervalo_tempo) (+ v0 (* aceleraçaosistema intervalo_tempo))))
(if (< L (+ 6.96e+8 6.37e+6))
soma
(auxiliar1 (- L 1e+4) soma v0 (aceleraçao L))))
(define (problema)
(main 1.5e+11 0 0))
vbmaster Escreveu:(...)
Esta nova versão basicamente é bastante mais lenta, mas permite obter um resultado mais preciso (dentro das fórmulas física utilizadas, é claro).
(não tentem compreender isto)
vbmaster Escreveu:Estes dias não têm dado para mais, como tal fica aqui a versão scheme ainda com o mesmo algoritmo... amanhã já devo ter tempo para analisar a proposta do professor.
Esta niva versão basicamente é bastante mais lenta, mas permite obter um resultado mais preciso (dentro das fórmulas física utilizadas, é claro).
(não tentem compreender isto)
- Código: Seleccionar Todos
(define (aceleraçao distancia)
(/ (* 6.67e-11 (+ 1.99e30 5.98e24)) (expt distancia 2)))
(define (abc a b c)
(define (delta a b c)
(sqrt (+ (* b b) (* (- 4) a c))))
(/ (+ (- b) (- (delta a b c))) (* 2 a)))
(define (main L soma v0)
(define (auxiliar1 L soma v0 aceleraçaosistema)
(auxiliar2 L soma v0 (abc (/ (- aceleraçaosistema) 2) (- v0) 1e+4) aceleraçaosistema))
(define (auxiliar2 L soma v0 intervalo_tempo aceleraçaosistema)
(main L (+ soma intervalo_tempo) (+ v0 (* aceleraçaosistema intervalo_tempo))))
(if (< L (+ 6.96e+8 6.37e+6))
soma
(auxiliar1 (- L 1e+4) soma v0 (aceleraçao L))))
(define (problema)
(main 1.5e+11 0 0))
Andre França Escreveu:
AhJa' agora, nao sei se te interessa ou se ja ouviste falar, mas existem umas olimpiadas de informatica (Pascal, C, C++): http://ctp.di.fct.unl.pt/ONI/
No ano passado um dos nossos olimpicos de fisica (Rui Barbosa) ficou em 2º nas nacionais, foi ao mexico nas internacionais e ainda ganhou uma prata (foi uma prata, gama?) nas ibero-americanas.
(define (main L v dt ttotal)
(define (velocidade L v dt ttotal)
(define (aceleraçao L)
(/ (* 6.67e-11 (+ 1.99e30 5.98e24)) (expt L 2)))
(posiçao L (- v (* (- (aceleraçao L)) dt)) dt ttotal))
(define (posiçao L v dt ttotal)
(main (- L (* v dt)) v dt (+ ttotal dt)))
(if (< L 6.96e+8)
ttotal
(velocidade L v dt ttotal)))
(define (problema)
(main 1.5e+11 0 10 0))
Voltar para Problemas resolvidos
Utilizadores a navegar neste fórum: Nenhum utilizador registado e 1 visitante