Guest User

renan

a guest
Feb 17th, 2010
167
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #include <stdio.h>
  2.  
  3. // Algoritmo de O'Beirne para determinar a data da P�scoa.
  4. // http://problemasteoremas.wordpress.com/2010/01/02/algoritmo-de-obeirne-em-10-passos-para-determinar-o-domingo-de-pascoa/
  5.  
  6. // copyleft 2010 Renan Birck <renan.ee.ufsm EM gmail.com>.
  7.  
  8.  
  9. int main(int argc,char *argv[]) {
  10. unsigned int ano, a, b,c, delta, eps, gama, h, mu, j, k, lambda, n, q, p;
  11. unsigned int tmp1;
  12.  
  13. if(argc == 1) {
  14. printf("Ano: ");
  15. scanf("%d",&ano);
  16. }
  17. else {
  18. ano = atoi(argv[1]);
  19. }
  20.  
  21. // 1. Divida-se X por 100 e anote-se o quociente B e o resto C.
  22.  
  23. b = ano/100;
  24. c = ano%100;
  25.  
  26. // 2. Tome-se 5b+c e divida-se por 19; chame-se A ao resto.
  27.  
  28. a = (5*b+c)%19;
  29.  
  30. // 3. Calcule-se 3(b+25) e divida-se por 4;
  31. // designe-se o quociente por delta e o resto por epsilon.
  32.  
  33. tmp1 = 3*(b+25);
  34. delta = tmp1/4;
  35. eps = tmp1%4;
  36.  
  37. // 4. Calcule-se 8(b+11) e divida-se por 25;
  38. // anote-se o valor do quociente (gama);
  39.  
  40. tmp1 = 8*(b+11);
  41. gama = (unsigned int)tmp1/25;
  42.  
  43. // 5. Calcule-se 19a+delta-gama e divida-se por 30;
  44. // anote-se o valor do resto (h);
  45.  
  46. h = (19*a+delta-gama)%30;
  47.  
  48. // 6. Calcule-se a + 11h e divida-se por 319; anote-se
  49. // o valor do quociente (mu);
  50.  
  51. mu = (a+11*h)/319;
  52.  
  53. // 7. Calcule-se 60(5-&#603;)+c e divida-se por 4;
  54. // anote-se o valor do quociente (j) e do resto (k);
  55.  
  56. tmp1 = 60*(5-eps)+c;
  57.  
  58. j = tmp1/4;
  59. k = tmp1%4;
  60.  
  61. // 8. Calcule-se 2j-k-h+&#956; e divida-se por 7; anote-se o valor do resto (&#955;);
  62.  
  63. lambda = ((2*j)-(k)-(h)+(mu))%7;
  64.  
  65. // 9. Calcule-se h-&#956;+&#955;+110 e divida-se por 30;
  66. // anote-se o valor do quociente (n) e do resto (q);
  67.  
  68. tmp1 = h-mu+lambda+110;
  69. n = tmp1/30;
  70. q = tmp1%30;
  71.  
  72. // 10. Calcule-se q+5-n e divida-se por 32;
  73. // o quociente deve ser nulo e ao resto chame-se p.
  74.  
  75. p = (q+5-n)%32;
  76.  
  77. printf("Dia da p�scoa: %d/%s/%d",(int)p,(int)n == 3?"mar�o":"abril",(int)ano);
  78.  
  79. }
  80.  
RAW Paste Data