fork download
  1.  
  2.  
  3. #include <iostream> // Cargo librerías (colecciones de funciones ya hechas que hacen cositas): "iostream" me permite sacar texto
  4. #include <cmath> // y números por el terminal, para que puedas ver el valor de pi, y "cmath" es una colección de funciones
  5. #include <fstream> // matemáticas que necesito, como elevar al cuadrado y hacer la raiz cuadrada.
  6.  
  7. using namespace std; // A efectos práticos, esto es para no tener que poner "std" todo el rato.
  8.  
  9. int main(){ // ¡Comenzamos!
  10.  
  11. // Imprimimos en el terminal... la bienvenida ;)
  12.  
  13. cout<<endl<<endl;
  14. cout<<" ╔═╗ ┬ ┬┌─┐┌┐┌┌┬┐┬ ┬┌┬┐ ╔═╗┬─┐┌─┐┌─┐┌┬┐┬ ┬┬─┐┌─┐"<<endl;
  15. cout<<" ║═╬╗│ │├─┤│││ │ │ ││││ ╠╣ ├┬┘├─┤│ │ │ │├┬┘├┤"<<endl;
  16. cout<<" ╚═╝╚└─┘┴ ┴┘└┘ ┴ └─┘┴ ┴ ╚ ┴└─┴ ┴└─┘ ┴ └─┘┴└─└─┘"<<endl;
  17. cout<<" ______________________________________________________________________ "<<endl<<endl;
  18. cout<<" PRESENTA... "<<endl;
  19. cout<<endl;
  20. cout<<" ╔═╗┌─┐┬ ┌─┐┬ ┬┬ ┌─┐ ┌┬┐┌─┐ ╔═╗┬ ╔═╗┌─┐┬ ┬┌─┐┌─┐┌┐┌┌─┐┌─┐"<<endl;
  21. cout<<" ║ ├─┤│ │ │ ││ │ │ ││├┤ ╠═╝│ ─── ╠═╝│ ││ ││ ┬│ │││││ │└─┐"<<endl;
  22. cout<<" ╚═╝┴ ┴┴─┘└─┘└─┘┴─┘└─┘ ─┴┘└─┘ ╩ ┴ ╩ └─┘┴─┘┴└─┘└─┘┘└┘└─┘└─┘"<<endl;
  23.  
  24. cout<<endl<<" Dividiendo perímetros entre diametros desde 2017"<<endl<<endl;
  25.  
  26. cout<<"_____________________________________________________________________________________________"<<endl<<endl;
  27. cout<<" ADVERTENCIA "<<endl;
  28. cout<<"Si está usando este código en un compilador online, puede ser que utilizar un número excesivo"<<endl;
  29. cout<<" de lados haga que el cálculo necesite tanto tiempo para ser computado que el compilador lo"<<endl;
  30. cout<<" aborte automáticamente. En ese caso, pruebe un número menor."<<endl;
  31.  
  32.  
  33. ////////////////////////////////////////////////////////////////////////////////////////////
  34. ////////////////////////////////////////////////////////////////////////////////////////////
  35. ////////////////////////////////////////////////////////////////////////////////////////////
  36.  
  37. int n = 12345 ; // NÚMERO DE LADOS DEL POLÍGONO. ¡CAMBIAD ESTO!
  38.  
  39. ///////////////////////////////////////////////////////////////////////////////////////////
  40. ///////////////////////////////////////////////////////////////////////////////////////////
  41. //////////////////////////////////////////////////////////////////////////////////////////
  42.  
  43. // Se expulsa tal número por terminal:
  44.  
  45. cout<<endl<<" ╔════════════════════════════════════════════════════════════════════════════════════════╗";
  46. cout<<endl<<" ║ Número de lados máximo del polígono : "<<n;
  47. cout<<endl<<" ╚════════════════════════════════════════════════════════════════════════════════════════╝";
  48.  
  49. double r=1; // Este es RADIO DE LA CIRCUNFERENCIA. Puedes cambiarlo; el valor de pi no se ve afectado.
  50.  
  51. double A; // Defino los Perímetros de los polígonos inscritos y circunscritos.
  52. double B;
  53.  
  54. A=4*sqrt(2)*r; // Cargo los perímetros de un CUADRADO inscrito (A) y circunscrito (B). Estos valores pueden ser fácilmente
  55. B=8*r; // obtenidos con el teorema de pitagoras, no pi required.
  56.  
  57. double m=4; // Este es el número de lados de los polígonos con los que estamos trabajando.
  58.  
  59. while (m*2<=n) { // BUCLE. Si el número de lados del polígono a generar supera el número impuesto por usuario, para.
  60.  
  61. B=2*A*B/(A+B); // Calculo de los perímetros con el doble de lados. A cada vuelta los valores de A y B se sobreeescriben.
  62. A=sqrt(A*B);
  63.  
  64. m=m*2; // El número de lados se duplica en cada vuelta.
  65.  
  66. } // Fin de BUCLE
  67.  
  68. double pi=( A/2/r + B/2/r )/2; // Calculamos pi como la media de los valores de pi de cada perimetro...
  69. double err = abs( A/2/r - B/2/r )/2; // ... y el error como la resta.
  70.  
  71. cout.precision(15); // Estos son el número de digitos que quiero que se expulsen por pantalla. Puedes aumentarlo si quieres.
  72.  
  73. // Sacamos los resultados por pantalla para disfrute del usuario:
  74.  
  75. cout<<endl<<" ╔════════════════════════════════════════════════════════════════════════════════════════╗";
  76. cout<<endl<<" ║ Con un polígono de "<<m<<" lados, obtenemos:";
  77. cout<<endl<<" ║";
  78. cout<<endl<<" ║ "<<"Pi = "<<pi<<" +/- "<<err;
  79. cout<<endl<<" ║";
  80. cout<<endl<<" ║ "<<"o, dicho de otra manera, el valor de pi se encuentra entre";
  81. cout<<endl<<" ║ "<<pi+err<<" y "<<pi-err;
  82. cout<<endl<<" ╚════════════════════════════════════════════════════════════════════════════════════════╝"<<endl<<endl;
  83.  
  84.  
  85. return 0; // Y hemos terminado. Cerramos el chiringuito.
  86.  
  87. }
  88.  
Success #stdin #stdout 0s 4364KB
stdin
Standard input is empty
stdout

                       ╔═╗ ┬ ┬┌─┐┌┐┌┌┬┐┬ ┬┌┬┐  ╔═╗┬─┐┌─┐┌─┐┌┬┐┬ ┬┬─┐┌─┐
                       ║═╬╗│ │├─┤│││ │ │ ││││  ╠╣ ├┬┘├─┤│   │ │ │├┬┘├┤
                       ╚═╝╚└─┘┴ ┴┘└┘ ┴ └─┘┴ ┴  ╚  ┴└─┴ ┴└─┘ ┴ └─┘┴└─└─┘
            ______________________________________________________________________     

                                          PRESENTA...                                  

              ╔═╗┌─┐┬  ┌─┐┬ ┬┬  ┌─┐  ┌┬┐┌─┐  ╔═╗┬       ╔═╗┌─┐┬  ┬┌─┐┌─┐┌┐┌┌─┐┌─┐
              ║  ├─┤│  │  │ ││  │ │   ││├┤   ╠═╝│  ───  ╠═╝│ ││  ││ ┬│ │││││ │└─┐
              ╚═╝┴ ┴┴─┘└─┘└─┘┴─┘└─┘  ─┴┘└─┘  ╩  ┴       ╩  └─┘┴─┘┴└─┘└─┘┘└┘└─┘└─┘

                       Dividiendo perímetros entre diametros desde 2017

_____________________________________________________________________________________________

                                         ADVERTENCIA                                     
Si está usando este código en un compilador online, puede ser que utilizar un número excesivo
 de lados haga que el cálculo necesite tanto tiempo para ser computado que el compilador lo
               aborte automáticamente. En ese caso, pruebe un número menor.

  ╔════════════════════════════════════════════════════════════════════════════════════════╗
  ║                 Número de lados máximo del polígono : 12345
  ╚════════════════════════════════════════════════════════════════════════════════════════╝
  ╔════════════════════════════════════════════════════════════════════════════════════════╗
  ║                Con un polígono de 8192 lados, obtenemos:
  ║
  ║                       Pi = 3.14159269209226  +/-  1.15507386100333e-07
  ║
  ║                o, dicho de otra manera, el valor de pi se encuentra entre
  ║                       3.14159280759965   y   3.14159257658487
  ╚════════════════════════════════════════════════════════════════════════════════════════╝