Edición de un número
Introducción
El problema de la edición de un número entero ya se ha tratado en el capítulo «Recursividad». Este capítulo es corto y presenta ejercicios que usan las técnicas de edición de un número entero para resolver algunos problemas simples. La sección «Edición de un número entero en una base cualquiera» empieza por resolver completamente un ejercicio planteado en el capítulo «Iteración». La sección «Conversión de las direcciones de Internet» trata del mismo problema, pero complicado por la naturaleza de los números que hay que convertir. La sección «Conversión de un número entero en números romanos» plantea un ejercicio no resuelto en el libro, pero puede encontrar la solución completa en los elementos disponibles para descargar, asociados a este libro, desde la página Información. La sección «Verificación de identificadores de empresas» presenta los algoritmos que permiten verificar la validez de los identificadores de empresas y de sus instalaciones. Igualmente, la sección «Verificación de los identificadores de libros» trata el problema para los códigos ISBN y EAN.
Edición de un número entero en una base cualquiera
Este problema ya se planteó en el capítulo «Recursividad»; en la sección «Números y cadenas de caracteres: edición de un número entero» se presentaba el problema y un ejercicio pedía una primera solución. En esta sección, el ejercicio se resuelve completamente. La sección «Número de cifras de un número entero» calcula la cantidad de cifras de un número entero expresado en una base B cualquiera. La sección «Resolución del problema de edición» resuelve el problema propiamente dicho y la sección «Resolución del problema recíproco» hace lo mismo para la conversión de un número expresado en una base B a la base diez.
1. Número de cifras de un número entero
Dado un número entero n, calcular el número de cifras de la representación de n en base B = diez. Señalar en primer lugar que podemos restringirnos a los números enteros positivos. El número de cifras de un número entero negativo es el número de cifras de su valor absoluto.
Obtener las cifras de un número entero es un problema que se resolverá en la siguiente sección. Sin embargo, ya podemos ver que se pueden obtener sucesivamente mediante una serie de divisiones entre B = diez. Se divide el número n y luego, sucesivamente, todos los cocientes obtenidos hasta llegar a un cociente nulo. La cantidad de cifras es el número de divisiones. Vamos a verlo en un ejemplo.
Ejemplo
Calcular el número de cifras de 325 expresado en base diez.
Solo tenemos que dividir 325 entre 10:
-
la primera división da 32 y el resto 5;
-
la segunda división da 3 y el resto 2;
-
la tercera división da 0 y el resto 3.
Tres divisiones han permitido alcanzar un cociente nulo. El número de cifras buscado es 3.
También hay que destacar que se puede detener la iteración cuando el cociente de una división se convierte en estrictamente inferior al divisor.
Escribir este algoritmo es fácil y podemos pasar directamente a la solución definitiva. Sin embargo, tendremos que estar atentos a los casos límites desarrollando el análisis del problema.
Algoritmo 1: Número... |
Conversión de las direcciones de Internet
1. Conversión de un número entero en dirección «Internet Protocol»
En las secciones anteriores hemos visto cómo convertir un número entero en su representación en una base B < 37. Este límite se imponía porque no disponemos de un conjunto de símbolos fácil de memorizar para representar todas las cifras de una base B ≥ 37. En esta sección vamos a ver cómo resolver esta dificultad en un ejemplo habitual en informática.
a. Introducción
Cada uno de los componentes activos de una red informática (ordenador, switch, router, etc.) está identificado de una forma única mediante un número entero positivo de n bytes, es decir, 8n bits, denominado su dirección del protocolo de Internet (Internet Protocol o IP). Según la norma IPv4, una dirección IP es tal que n = 4, es decir, 32 bits. Entonces, una dirección IPv4 es un número entero A tal que 0 ≤ A < 232 = 4 294 967 296. Así, por ejemplo, un ordenador de la red tiene como dirección IP el número entero 2 886 342 405 en base diez.
Toda comunicación entre dos componentes activos de una red usa sus direcciones IP para identificarlos y así distinguir sin ambigüedad el emisor y el receptor del mensaje entre los otros componentes. Es evidente que para un ser humano es difícil recordar las direcciones de los componentes de una red cuando su número consta de varias unidades. Entonces adoptamos otra convención de representación de las direcciones para simplificar estas referencias.
Como una dirección está formada por cuatro bytes, convenimos en representar cada dirección IPv4 por el valor en base diez de cada uno de sus cuatro bytes. Cada byte está separado del siguiente por un punto. Así, la dirección del ejemplo anterior se convierte en:
2 886 342 40510 ≡ 172.10.23.5
El valor en base diez de un byte (8 bits) es un número entero positivo v que verifica:
0 ≤ v < 28 = 256
Así, los componentes de la representación «humana» de una dirección IPv4 son las cifras, expresadas en base diez, de su representación en base B = 256. Dicho de otra manera, para este ejemplo...
Conversión de un número entero en números romanos
Ejercicio 4: Conversiones de un número entero en número romano |
1. Dado un número entero positivo, definir un algoritmo que exprese este número en números romanos.
2. Estudiar la conversión recíproca.
Ejemplos
1912 = 'MCMXII'
1999 = 'MCMXCIX'
Como de costumbre, este problema no está completamente definido. El análisis deberá aportar las especificaciones necesarias.
Solución
La solución de este ejercicio no se ha desarrollado aquí por motivos de espacio. Encontrará una solución completamente analizada y redactada en los elementos asociados a este libro disponibles para descargar desde la página Información.
Verificación de identificadores de empresas
Imaginemos una codificación que permite identificar cada empresa mediante un número entero de 9 cifras en base diez al que llamaremos CODIGO_ENT. Cada establecimiento de una empresa se identifica, en relación con esta empresa, mediante un número entero de 5 cifras en base diez llamado Número interno de clasificación o NIC. Al agrupar el número CODIGO_ENT de una empresa y el NIC de uno de sus establecimientos, como si se tratara de una concatenación, se obtiene un número de 14 cifras CODIGO_ET.
Ejemplo
La empresa PUBLITRONIC se identifica por los siguientes números:
CODIGO_ENT: 319 937 454
NIC : 000 35
CODIGO_ET : 319 937 454 000 35
Para que los CODIGO_ENT y CODIGO_ET sean válidos, deben respetar la siguiente norma:
La suma de las cifras de posición impar sumada con la suma de las cifras de posición par multiplicadas por dos es un múltiplo de 10.
Las posiciones están aumentadas, en cada caso, de derecha a izquierda. La primera cifra de la derecha, es decir, la cifra de las unidades, tiene la posición 1. Cuando el doble de una cifra de posición par da un resultado superior o igual a 10, sus cifras se suman. Para los identificadores de la empresa PUBLITRONIC...
Verificación de los identificadores de libros
Un libro se identifica mediante un número llamado ISBN (International Standard Book Number). Es un número de 10 cifras que identifica la zona geográfica o lingüística de edición, el editor en esta zona y, por supuesto, el libro en este editor. Desde hace algunos años, la introducción de los códigos de barras ha hecho evolucionar este identificador hasta un número de 13 cifras, el EAN (European Article Numbering) del sistema mundial de identificación unívoca de objetos.
La estructura de un ISBN viene dada por la tabla que aparece a continuación para un ejemplo que tiene el valor 0-8436-1072-7.
Número de grupo |
Prefijo de editor |
Número de título |
Control |
0 |
8436 |
1072 |
7 |
El control de un ISBN consiste en hacer cálculos basados en la posición, es decir en la posición de la cifra en el número, y su valor. Las cifras de un ISBN están numeradas de 1 a 10 empezando por la cifra de las unidades, es decir, la cifra de control. Cada cifra está multiplicada por su posición y la suma de los productos obtenidos de esta manera se divide entre 11. El ISBN es válido cuando el resto de esta división es cero.
Ejemplo
Verificar la validez de 0-8436-1072-7.
Cifras : 0 8 4 3 6 1 0 7 2 7 ...
Resumen
Este capítulo ha propuesto actividades relacionadas con el problema de la edición de un número. Editar un número es determinar su representación en una base de numeración dada. Hemos estudiado sucesivamente el cálculo del número de cifras de un número entero, su edición como cadena de caracteres y el problema recíproco. Después hemos resuelto el problema de la representación de una dirección IP. Se ha presentado el problema de la representación de un número entero en números romanos y su solución completa está disponible para descargar desde la página Información. Las dos últimas secciones han estudiado algoritmos de verificación, usados en informática de gestión, para controlar la coherencia de la introducción de los identificadores de empresas o de libros.