fork download
  1. /* package whatever; // don't place package name! */
  2.  
  3. import java.util.*;
  4. import java.lang.*;
  5. import java.io.*;
  6.  
  7. /* Name of the class has to be "Main" only if the class is public. */
  8. class Ideone
  9. {
  10. public static void main (String[] args) throws java.lang.Exception
  11. {
  12. // your code goes here
  13. /*
  14.  
  15.   ██████╗ ██╗ ██╗ █████╗ ███╗ ██╗████████╗██╗ ██╗███╗ ███╗ ███████╗██████╗ █████╗ ██████╗████████╗██╗ ██╗██████╗ ███████╗
  16.  ██╔═══██╗██║ ██║██╔══██╗████╗ ██║╚══██╔══╝██║ ██║████╗ ████║ ██╔════╝██╔══██╗██╔══██╗██╔════╝╚══██╔══╝██║ ██║██╔══██╗██╔════╝
  17.  ██║ ██║██║ ██║███████║██╔██╗ ██║ ██║ ██║ ██║██╔████╔██║ █████╗ ██████╔╝███████║██║ ██║ ██║ ██║██████╔╝█████╗
  18.  ██║▄▄ ██║██║ ██║██╔══██║██║╚██╗██║ ██║ ██║ ██║██║╚██╔╝██║ ██╔══╝ ██╔══██╗██╔══██║██║ ██║ ██║ ██║██╔══██╗██╔══╝
  19.  ╚██████╔╝╚██████╔╝██║ ██║██║ ╚████║ ██║ ╚██████╔╝██║ ╚═╝ ██║ ██║ ██║ ██║██║ ██║╚██████╗ ██║ ╚██████╔╝██║ ██║███████╗
  20.   ╚══▀▀═╝ ╚═════╝ ╚═╝ ╚═╝╚═╝ ╚═══╝ ╚═╝ ╚═════╝ ╚═╝ ╚═╝ ╚═╝ ╚═╝ ╚═╝╚═╝ ╚═╝ ╚═════╝ ╚═╝ ╚═════╝ ╚═╝ ╚═╝╚══════╝
  21.  
  22.   PRESENTA
  23.   _____________________________________________________________________________________________
  24.   ,
  25.   '| |\/| _´_|_ _ _| _ _| _ /\ _ _ ´ _ _ _ _| _ _ /|~) _ |´ _ _ _ _ _\
  26.   _|_. | |(/_ | (_)(_|(_) (_|(/_ /~~\| (_||_||| | |(/_(_|(/__\ | |~ (_)||(_|(_)| |(_)_\ |
  27.   | \ _| /
  28.  
  29.  Qué pasa chavales, muy buenas a todos, aquí Crespo comentando (xD willy pls). Con este código, escrito en C++, vamos a hacer que
  30.  este ordenador calcule pi utilizando el método que nuestro Antiguos usaban: calculando polígonos de lado 2*n (dos veces n).
  31.  Si quieres saber las ideas básicas de este algoritmo o no sabes como coj***s has llegado aquí y qué es este código
  32.  hablandome así wtf, te recomiendo pasarte por YouTube y verte este vídeo
  33.  --> https://y...content-available-to-author-only...u.be/DQ5qqHukkAc <--.
  34.  Vamos ahora a la miga: Imagina que tenemos DOS polígonos de "2n" lados: Uno inscrito dentro de una circunferencia de radio "r"
  35.  (es decir, cuyos vertices tocan la circunferencia, está dentro del circulo) y otro circunscrito (es decir, cuyos lados tocan
  36.  la circunferencia, están por fuera del circulo).
  37.  En cualquier polígono siempre puedo tirar dos líneas desde el centro a dos vértices contiguos y formar un triángulo
  38.  (el menor que se puede formar de esta manera):
  39.  
  40.  
  41.   _____________________ (B)
  42.   \ d | /
  43.   \________|________/ h2
  44.   (A) \ l | /
  45.   \ | /
  46.   \ |r /
  47.   h1 \ | /
  48.   \ | /
  49.   \ | /
  50.   \ | /
  51.   \ / <----------- al ángulo del triángulo vamos a llamarlo "ang"
  52.   .
  53.   centro (O)
  54.  ...donde:
  55.  
  56.   * r --> radio del circunferencia.
  57.   * h2 --> distancia centro-vertice (OB) del poligono que está CIRCUNSCRITO (que es el poligono está por fuera del círculo,
  58.   con los lados tocando la circunferencia).
  59.   * h1 --> distancia centro-vertice (OA) del polígono que está INSCRITO (que es el poligono está dentro del círculo,
  60.   con los vértices tocando la circunferencia).
  61.   * l --> es la MITAD del lado del poligono interno.
  62.   * d --> es la MITAD del lado del poligono externo.
  63.   * ang --> angulo formado por OA y OB. Si el poligono tiene n lados, entonces
  64.   sabemos cuanto vale: una vuelta completa son 2*pi, luego si tiene n lados,
  65.  
  66.   ang = 2*pi/n
  67.  
  68.  Si no ves un carajo del gráfico te recomiendo que estires el tamaño de tu ventana, te llevarás una sorpresa --->
  69.  También es bastante recomendable que, si te quiere enterar bien de esto, te lo dibujes en un papel. Really.
  70.  
  71.  Dos definciones más: sea...
  72.  
  73.   * A_n --> el perímetro del polígono de n lados inscrito.
  74.   * B_n --> el perímetro del polígono de n lados cricunscrito.
  75.  
  76.  A las cuentas: vamos a calcular cuanto vale "l" y cuanto vale "d". Los necesitaremos para saber cuanto son los perímetros
  77.  que es lo que buscamos, ohú. Por trigonometría básica (definición de seno), "l" verifica:
  78.  
  79.   l = r * sin( pi/n )
  80.  
  81.  ... y "d" verifica:
  82.  
  83.   d = r * tan( pi/n )
  84.  
  85.  Por lo tanto los respectivos perímetros serán el número de lados, n, por el lado, 2l y 2d respectivamente:
  86.  
  87.   A_n = 2 * n * r * sin( pi/n ) B_n = 2 * n * r * tan( pi/n ) = A_n / cos(pi/n)
  88.  
  89.  Entonces, el perímetro de un polígono con el doble de lados debe verficar:
  90.  
  91.   A_2n = 4 * n * r * sin( pi/2n ) B_2n = 4 * n * r * tan( pi/2n ) = A_2n / cos(pi/2n)
  92.  
  93.  El objetivo, ahora, es dejar A_2n y B_2n en función de A_n y B_n, es decir, que no dependamos de calcular ángulos (que
  94.  requieren de pi) para saber cuanto vale los perímetros. De este modo partiendo de un polígono muy sencillo cuyas dimensiones puedan
  95.  ser cálculados usando identidades trigonometricas muy sencillas, podemos ir generando los polígonos de más y más lados.
  96.  
  97.  No voy a escribir explicitamente como poner unos en función de los otros; es un desarrollo largo y tengo vídeos que hacer! Pero
  98.  si queréis intentarlo, usad todas las identidades trigonométricas que podáis, especialmente las del angulo doble y ángulo mitad ;)
  99.  
  100.  El resultado es:
  101.  
  102.   B_2n = 2 * A_n * B_n / ( A_n + B_n )
  103.   A_2n = raiz cuadrada de { A_n * B_2n }
  104.  
  105.  Dado que A se acerca al perimetro de la circunferencia desde valores menores y B desde valores mayores, podemos usar estos para
  106.  calcular los errores del método. Es decir, que, una vez paremos en un cierto número de lados, tomaremos la media de ambos pi's
  107.  calculados con los diferentes perímetros como el valor de este, y la diferencia de estos como el error que estamos comentiendo;
  108.  así tendremos el rango de valores en lo que el verdadero pi se encuentra.
  109.  
  110.  Quiero agradecer ENORMEMENTE a Diego Soler Polo por ayudarme a encontrar este algoritmo. Sin él, muchos aspectos de este vídeo
  111.  no serían posibles... y este código menos.
  112.  
  113.  
  114. */
  115.  
  116.  
  117. #include <iostream> // Cargo librerías (colecciones de funciones ya hechas que hacen cositas): "iostream" me permite sacar texto
  118. #include <cmath> // y números por el terminal, para que puedas ver el valor de pi, y "cmath" es una colección de funciones
  119. #include <fstream> // matemáticas que necesito, como elevar al cuadrado y hacer la raiz cuadrada.
  120.  
  121. using namespace std; // A efectos práticos, esto es para no tener que poner "std" todo el rato.
  122.  
  123. int main(){ // ¡Comenzamos!
  124.  
  125. // Imprimimos en el terminal... la bienvenida ;)
  126.  
  127. cout<<endl<<endl;
  128. cout<<" ╔═╗ ┬ ┬┌─┐┌┐┌┌┬┐┬ ┬┌┬┐ ╔═╗┬─┐┌─┐┌─┐┌┬┐┬ ┬┬─┐┌─┐"<<endl;
  129. cout<<" ║═╬╗│ │├─┤│││ │ │ ││││ ╠╣ ├┬┘├─┤│ │ │ │├┬┘├┤"<<endl;
  130. cout<<" ╚═╝╚└─┘┴ ┴┘└┘ ┴ └─┘┴ ┴ ╚ ┴└─┴ ┴└─┘ ┴ └─┘┴└─└─┘"<<endl;
  131. cout<<" ______________________________________________________________________ "<<endl<<endl;
  132. cout<<" PRESENTA... "<<endl;
  133. cout<<endl;
  134. cout<<" ╔═╗┌─┐┬ ┌─┐┬ ┬┬ ┌─┐ ┌┬┐┌─┐ ╔═╗┬ ╔═╗┌─┐┬ ┬┌─┐┌─┐┌┐┌┌─┐┌─┐"<<endl;
  135. cout<<" ║ ├─┤│ │ │ ││ │ │ ││├┤ ╠═╝│ ─── ╠═╝│ ││ ││ ┬│ │││││ │└─┐"<<endl;
  136. cout<<" ╚═╝┴ ┴┴─┘└─┘└─┘┴─┘└─┘ ─┴┘└─┘ ╩ ┴ ╩ └─┘┴─┘┴└─┘└─┘┘└┘└─┘└─┘"<<endl;
  137.  
  138. cout<<endl<<" Dividiendo perímetros entre diametros desde 2017"<<endl<<endl;
  139.  
  140. cout<<"_____________________________________________________________________________________________"<<endl<<endl;
  141. cout<<" ADVERTENCIA "<<endl;
  142. cout<<"Si está usando este código en un compilador online, puede ser que utilizar un número excesivo"<<endl;
  143. cout<<" de lados haga que el cálculo necesite tanto tiempo para ser computado que el compilador lo"<<endl;
  144. cout<<" aborte automáticamente. En ese caso, pruebe un número menor."<<endl;
  145.  
  146.  
  147. ////////////////////////////////////////////////////////////////////////////////////////////
  148. ////////////////////////////////////////////////////////////////////////////////////////////
  149. ////////////////////////////////////////////////////////////////////////////////////////////
  150.  
  151. int n = 12345 ; // NÚMERO DE LADOS DEL POLÍGONO. ¡CAMBIAD ESTO!
  152.  
  153. ///////////////////////////////////////////////////////////////////////////////////////////
  154. ///////////////////////////////////////////////////////////////////////////////////////////
  155. //////////////////////////////////////////////////////////////////////////////////////////
  156.  
  157. // Se expulsa tal número por terminal:
  158.  
  159. cout<<endl<<" ╔════════════════════════════════════════════════════════════════════════════════════════╗";
  160. cout<<endl<<" ║ Número de lados máximo del polígono : "<<n;
  161. cout<<endl<<" ╚════════════════════════════════════════════════════════════════════════════════════════╝";
  162.  
  163. double r=1; // Este es RADIO DE LA CIRCUNFERENCIA. Puedes cambiarlo; el valor de pi no se ve afectado.
  164.  
  165. double A; // Defino los Perímetros de los polígonos inscritos y circunscritos.
  166. double B;
  167.  
  168. A=4*sqrt(2)*r; // Cargo los perímetros de un CUADRADO inscrito (A) y circunscrito (B). Estos valores pueden ser fácilmente
  169. B=8*r; // obtenidos con el teorema de pitagoras, no pi required.
  170.  
  171. double m=4; // Este es el número de lados de los polígonos con los que estamos trabajando.
  172.  
  173. while (m*2<=n) { // BUCLE. Si el número de lados del polígono a generar supera el número impuesto por usuario, para.
  174.  
  175. 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.
  176. A=sqrt(A*B);
  177.  
  178. m=m*2; // El número de lados se duplica en cada vuelta.
  179.  
  180. } // Fin de BUCLE
  181.  
  182. double pi=( A/2/r + B/2/r )/2; // Calculamos pi como la media de los valores de pi de cada perimetro...
  183. double err = abs( A/2/r - B/2/r )/2; // ... y el error como la resta.
  184.  
  185. cout.precision(15); // Estos son el número de digitos que quiero que se expulsen por pantalla. Puedes aumentarlo si quieres.
  186.  
  187. // Sacamos los resultados por pantalla para disfrute del usuario:
  188.  
  189. cout<<endl<<" ╔════════════════════════════════════════════════════════════════════════════════════════╗";
  190. cout<<endl<<" ║ Con un polígono de "<<m<<" lados, obtenemos:";
  191. cout<<endl<<" ║";
  192. cout<<endl<<" ║ "<<"Pi = "<<pi<<" +/- "<<err;
  193. cout<<endl<<" ║";
  194. cout<<endl<<" ║ "<<"o, dicho de otra manera, el valor de pi se encuentra entre";
  195. cout<<endl<<" ║ "<<pi+err<<" y "<<pi-err;
  196. cout<<endl<<" ╚════════════════════════════════════════════════════════════════════════════════════════╝"<<endl<<endl;
  197.  
  198.  
  199. return 0; // Y hemos terminado. Cerramos el chiringuito.
  200.  
  201. }
  202.  
  203.  
  204.  
  205.  
  206.  
  207.  
  208.  
  209. }
  210. }
Compilation error #stdin compilation error #stdout 0s 0KB
stdin
Standard input is empty
compilation info
Main.java:117: error: illegal character: '#'
#include <iostream>  // Cargo librer?as (colecciones de funciones ya hechas que hacen cositas): "iostream" me permite sacar texto
^
Main.java:118: error: illegal character: '#'
#include <cmath>     // y n?meros por el terminal, para que puedas ver el valor de pi, y "cmath" es una colecci?n de funciones
^
Main.java:117: error: not a statement
#include <iostream>  // Cargo librer?as (colecciones de funciones ya hechas que hacen cositas): "iostream" me permite sacar texto
         ^
Main.java:119: error: illegal character: '#'
#include <fstream>   // matem?ticas que necesito, como elevar al cuadrado y hacer la raiz cuadrada.
^
Main.java:118: error: not a statement
#include <cmath>     // y n?meros por el terminal, para que puedas ver el valor de pi, y "cmath" es una colecci?n de funciones
         ^
Main.java:121: error: ';' expected
using namespace std;  // A efectos pr?ticos, esto es para no tener que poner "std" todo el rato.
     ^
Main.java:123: error: ';' expected
int main(){           // ?Comenzamos!
        ^
Main.java:127: error: not a statement
    cout<<endl<<endl;
              ^
Main.java:128: error: not a statement
    cout<<"                       ??? ? ??????????? ????  ???????????????? ???????"<<endl;
                                                                                   ^
Main.java:129: error: not a statement
    cout<<"                       ????? ??????? ? ? ????  ?? ???????   ? ? ??????"<<endl;
                                                                                  ^
Main.java:130: error: not a statement
    cout<<"                       ???????? ???? ? ???? ?  ?  ???? ???? ? ?????????"<<endl;
                                                                                   ^
Main.java:131: error: not a statement
    cout<<"            ______________________________________________________________________     "<<endl<<endl;
                                                                                                         ^
Main.java:132: error: not a statement
    cout<<"                                          PRESENTA...                                  "<<endl;
                                                                                                   ^
Main.java:133: error: not a statement
    cout<<endl;
        ^
Main.java:134: error: not a statement
    cout<<"              ???????  ???? ??  ???  ??????  ????       ???????  ????????????????"<<endl;
                                                                                             ^
Main.java:135: error: not a statement
    cout<<"              ?  ????  ?  ? ??  ? ?   ????   ????  ???  ???? ??  ?? ?? ????? ????"<<endl;
                                                                                             ^
Main.java:136: error: not a statement
    cout<<"              ???? ????????????????  ??????  ?  ?       ?  ??????????????????????"<<endl;
                                                                                             ^
Main.java:138: error: not a statement
    cout<<endl<<"                       Dividiendo per?metros entre diametros desde 2017"<<endl<<endl;
                                                                                               ^
Main.java:140: error: not a statement
    cout<<"_____________________________________________________________________________________________"<<endl<<endl;
                                                                                                               ^
Main.java:141: error: not a statement
    cout<<"                                         ADVERTENCIA                                     "<<endl;
                                                                                                     ^
Main.java:142: error: not a statement
    cout<<"Si est? usando este c?digo en un compilador online, puede ser que utilizar un n?mero excesivo"<<endl;
                                                                                                         ^
Main.java:143: error: not a statement
    cout<<" de lados haga que el c?lculo necesite tanto tiempo para ser computado que el compilador lo"<<endl;
                                                                                                       ^
Main.java:144: error: not a statement
    cout<<"               aborte autom?ticamente. En ese caso, pruebe un n?mero menor."<<endl;
                                                                                       ^
Main.java:159: error: not a statement
    cout<<endl<<"  ??????????????????????????????????????????????????????????????????????????????????????????";
              ^
Main.java:160: error: not a statement
    cout<<endl<<"  ?                 N?mero de lados m?ximo del pol?gono : "<<n;
                                                                            ^
Main.java:161: error: not a statement
    cout<<endl<<"  ??????????????????????????????????????????????????????????????????????????????????????????";
              ^
Main.java:189: error: not a statement
    cout<<endl<<"  ??????????????????????????????????????????????????????????????????????????????????????????";
              ^
Main.java:190: error: not a statement
    cout<<endl<<"  ?                Con un pol?gono de "<<m<<" lados, obtenemos:";
                                                           ^
Main.java:191: error: not a statement
    cout<<endl<<"  ?";
              ^
Main.java:192: error: not a statement
    cout<<endl<<"  ?                       "<<"Pi = "<<pi<<"  +/-  "<<err;
                                                                    ^
Main.java:193: error: not a statement
    cout<<endl<<"  ?";
              ^
Main.java:194: error: not a statement
    cout<<endl<<"  ?                "<<"o, dicho de otra manera, el valor de pi se encuentra entre";
                                     ^
Main.java:195: error: not a statement
    cout<<endl<<"  ?                       "<<pi+err<<"   y   "<<pi-err;
                                                               ^
Main.java:196: error: not a statement
    cout<<endl<<"  ??????????????????????????????????????????????????????????????????????????????????????????"<<endl<<endl;
                                                                                                                    ^
34 errors
stdout
Standard output is empty