{"id":9814,"date":"2021-03-31T09:07:19","date_gmt":"2021-03-31T07:07:19","guid":{"rendered":"https:\/\/www.giusseppe.net\/blog\/?p=9814"},"modified":"2021-03-25T18:17:54","modified_gmt":"2021-03-25T17:17:54","slug":"un-numero-son-palabras","status":"publish","type":"post","link":"https:\/\/www.giusseppe.net\/blog\/archivo\/2021\/03\/31\/un-numero-son-palabras\/","title":{"rendered":"Un n\u00famero son palabras"},"content":{"rendered":"<p><img decoding=\"async\" class=\"aligncenter size-full wp-image-9815\" src=\"https:\/\/www.giusseppe.net\/blog\/wp-content\/uploads\/2021\/03\/pienletras.png\" alt=\"\" width=\"100%\" srcset=\"https:\/\/www.giusseppe.net\/blog\/wp-content\/uploads\/2021\/03\/pienletras.png 1158w, https:\/\/www.giusseppe.net\/blog\/wp-content\/uploads\/2021\/03\/pienletras-300x260.png 300w, https:\/\/www.giusseppe.net\/blog\/wp-content\/uploads\/2021\/03\/pienletras-693x600.png 693w, https:\/\/www.giusseppe.net\/blog\/wp-content\/uploads\/2021\/03\/pienletras-768x665.png 768w\" sizes=\"(max-width: 1158px) 100vw, 1158px\" \/><\/p>\n<p>Qu\u00e9 mejor demostraci\u00f3n de que un n\u00famero son palabras que un traductor de n\u00fameros a palabras, as\u00ed, tan absurdo como este que intenta transformar los n\u00fameros (d\u00edgitos) en palabras, especialmente orientado a crear un libro con las palabras de unos cuantos (indeterminados) decimales de n\u00fameros irracionales, pues hay pocas cosas m\u00e1s irracionales que este proyecto absurdo.<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"c\">\/********************************************************\r\n    Proyecto tres14 (escrito en C)\r\n    realizado por Giusseppe Dom\u00ednguez\r\n    a partir del d\u00eda 8 de diciembre de 2019\r\n********************************************************\/\r\n\r\n#include &lt;stdio.h&gt;\r\n#include &lt;string.h&gt;\r\n#include &lt;stdlib.h&gt;\r\n#include &lt;time.h&gt;\r\n#include &lt;ctype.h&gt;\r\n#define OK 1\r\n#define KO 0\r\n#define MAX_LONG 10 \/\/ Longitud m\u00e1xima de nombre de d\u00edgito\r\n\r\nint firma();\r\nint digitea(char caracter);\r\nint nombranumero(int idioma, char caracter, char *nombre);\r\nint instrucciones(char *comando);\r\n\r\nint main(int argc, char *argv[])\r\n{\r\n  int i, idioma=0;\r\n  char nombrenumero[MAX_LONG], caracter;\r\n  FILE *fp;\r\n \r\n  if ((argc &lt; 2) || (argc &gt; 3)) { instrucciones(argv[0]); } \/\/ Faltan argumentos\r\n  else if (argc == 2) { \/\/ N\u00famero desde l\u00ednea de comando\r\n    for (i=0; i&lt;strlen(argv[1]); i++) {\r\n      caracter=argv[1][i];\r\n      if(! nombranumero(idioma, caracter, nombrenumero)) { instrucciones(argv[0]); return KO; }\r\n      puts(nombrenumero);\r\n    }\r\n  }\r\n  else if (argc == 3) { \/\/ N\u00famero en fichero argv[2]\r\n    if ( (! isdigit(argv[1][0])) || ((idioma = digitea(argv[1][0])) &gt; 1) ) {\r\n      printf(\"[ERROR] No conocemos el idioma: %s\\n\", argv[1]);\r\n      instrucciones(argv[0]);\r\n    } \r\n    else if ((fp = fopen(argv[2],\"r\")) == NULL) {\r\n      printf(\"[ERROR] intentando abrir el archivo %s\\n\", argv[2]);\r\n      instrucciones(argv[0]);\r\n    }\r\n    else {\r\n      while ((caracter = fgetc(fp)) != EOF) {\r\n        if (caracter != '\\n') { \/\/ Ignoramos los saltos de l\u00ednea\r\n          if (! nombranumero(idioma, caracter, nombrenumero)) { instrucciones(argv[0]); return KO; }\r\n          printf(\"%s \", nombrenumero);\r\n        }\r\n      }\r\n    }\r\n  }\r\n  printf(\"\\n\");\r\n  firma();\r\n  return OK;\r\n}\r\n\r\n\r\n\/******************************************\r\n  La funci\u00f3n instrucciones hace lo que su nombre\r\n  indica: Imprime las instrucciones del programa.\r\n******************************************\/\r\nint instrucciones(char *comando) {\r\n    printf(\"\\nUtilizaci\u00f3n: %s [n\u00famero_positivo] [idioma fichero]\\n\\n\", comando);\r\n    puts(\"Si introducimos un nombre de fichero, el primer par\u00e1metro indica el idioma\");\r\n    puts(\"Idioma puede ser:\");\r\n    puts(\"\\t0 - Espa\u00f1ol\");\r\n    puts(\"\\t1 - Ingl\u00e9s\");\r\n}\r\n\r\n\/******************************************\r\n  La funci\u00f3n nombranumero nombra el n\u00famero\r\n  contenido en el caracter (si procede, claro)\r\n  y devuelve error si no lo consigue.\r\n  idioma = 0 (espa\u00f1ol)\r\n           1 (ingl\u00e9s)\r\n******************************************\/\r\nint nombranumero(int idioma, char caracter, char *nombre) {\r\n  int digito;\r\n  static int nomascomas=0; \/\/ Para no encontrar m\u00e1s de una coma en un argumento\r\n  \/\/ char *numeros[] = { \"cero\", \"uno\", \"dos\", \"tres\", \"cuatro\", \"cinco\", \"seis\", \"siete\", \"ocho\", \"nueve\" };\r\n  char *numeros[2][MAX_LONG] = {\r\n    { \"cero\", \"uno\", \"dos\", \"tres\", \"cuatro\", \"cinco\", \"seis\", \"siete\", \"ocho\", \"nueve\" },\r\n    { \"zero\", \"one\", \"two\", \"three\", \"for\", \"five\", \"six\", \"seven\", \"eigth\", \"nine\" }\r\n  };\r\n  char *coma[] = { \"coma\", \"point\" };\r\n\r\n  if ((caracter == ',') || (caracter == '.')) {\r\n    strcpy(nombre, coma[idioma]);\r\n    if (++nomascomas &gt; 1) {\r\n      printf(\"Un n\u00famero no puede tener m\u00e1s de una coma\\n\");\r\n      return KO;\r\n    }\r\n    return OK;\r\n  }\r\n  else if (isdigit(caracter)) {\r\n    digito = digitea(caracter);\r\n    strcpy(nombre, numeros[idioma][digito]);\r\n    return OK;\r\n  }\r\n  printf(\"[ERROR] |%c| No es un caracter v\u00e1lido en un n\u00famero positivo\\n\", caracter);\r\n  strcpy(nombre, \"ERROR\");\r\n  return KO;\r\n}\r\n\/******************************************\r\n  La funci\u00f3n digitea devuelve un n\u00famero entero\r\n  a partir del caracter (char) proporcionado\r\n******************************************\/\r\nint digitea(char caracter)\r\n{\r\n  int digito;\r\n  digito = (int) (caracter + '0');\r\n  digito -= 96;\r\n  return digito;\r\n}\r\n\r\n\r\nint firma()\r\n{\r\n  time_t tiempo = time(0);\r\n  struct tm *tiempolocal = localtime(&amp;tiempo);\r\n  char txt_firma[128];\r\n  strftime(txt_firma,128,\"\\nGiusseppe Dom\u00ednguez, a las %H:%M. M-%Y%m%d\\n\",tiempolocal);\r\n  printf(\"%s\\n\",txt_firma);\r\n  return OK;\r\n}\r\n<\/pre>\n","protected":false},"excerpt":{"rendered":"<p>Qu\u00e9 mejor demostraci\u00f3n de que un n\u00famero son palabras que un traductor de n\u00fameros a palabras, as\u00ed, tan absurdo como este que intenta transformar los n\u00fameros (d\u00edgitos) en palabras, especialmente orientado a crear un libro con las palabras de unos cuantos (indeterminados) decimales de n\u00fameros irracionales, pues hay pocas cosas m\u00e1s irracionales que este proyecto &#8230; <a title=\"Un n\u00famero son palabras\" class=\"read-more\" href=\"https:\/\/www.giusseppe.net\/blog\/archivo\/2021\/03\/31\/un-numero-son-palabras\/\">Read more<span class=\"screen-reader-text\">Un n\u00famero son palabras<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[232,128],"tags":[88,248,101,91,287,130,105,137],"class_list":["post-9814","post","type-post","status-publish","format-standard","hentry","category-programable","category-proyectos","tag-arte","tag-edicion","tag-matematicas","tag-poesia","tag-programable","tag-proyectos-2","tag-tecnologia","tag-tonterias"],"_links":{"self":[{"href":"https:\/\/www.giusseppe.net\/blog\/wp-json\/wp\/v2\/posts\/9814","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.giusseppe.net\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.giusseppe.net\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.giusseppe.net\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.giusseppe.net\/blog\/wp-json\/wp\/v2\/comments?post=9814"}],"version-history":[{"count":1,"href":"https:\/\/www.giusseppe.net\/blog\/wp-json\/wp\/v2\/posts\/9814\/revisions"}],"predecessor-version":[{"id":9816,"href":"https:\/\/www.giusseppe.net\/blog\/wp-json\/wp\/v2\/posts\/9814\/revisions\/9816"}],"wp:attachment":[{"href":"https:\/\/www.giusseppe.net\/blog\/wp-json\/wp\/v2\/media?parent=9814"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.giusseppe.net\/blog\/wp-json\/wp\/v2\/categories?post=9814"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.giusseppe.net\/blog\/wp-json\/wp\/v2\/tags?post=9814"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}