Support independent publishing: buy this book on Lulu.

 

 
  PRIMERO DE INGENIEROS INDUSTRIALES
UNIVERSIDAD POLITÉCNICA DE CARTAGENA

FUNDAMENTOS DE INFORMÁTICA.

PROGRAMACIÓN EN C.

Pedro María Alcover Garau

PRIMERO DE INGENIEROS TÉCNICOS INDUSTRIALES

   

0. Presentación.
1. Introducción y conceptos generales.
2. Codificación numérica.
3. Codificación interna de la información.
4. Lenguaje C.
5. Modelos de representación.
6. Tipos de datos y variables en C.
7. Funciones de entrada y salida por consola.
8. Estructuras de control.
9. Ámbito y vida de las variables.
10. Arrays numéricos: vectores y matrices.
11. Caracteres y cadenas de caracteres.
12. Punteros.
13. Funciones.
14. Asignación dinámica de memoria.
15. Algunos usos con funciones.
16. Estructuras estáticas de datos y definición de tipos.
17. Gestión de archivos.

 

CODIFICACIÓN NUMÉRICA

 

Los números significan y codifican cantidades.

En la línea inmediatamente anterior hemos dibujado una serie de puntos negros. Cuántos son esos puntos es una cuestión que en nada depende del sistema de numeración.

En nuestro sistema habitual de codificación numérica (base 10) diremos que tenemos 7 puntos. Si trabajáramos en base binaria, o base dos, diríamos que tenemos 111 puntos. Lo importante es que tanto la codificación 7 (en base diez) como la codificación 111 (en base dos) significan la misma cantidad.

Y es que trabajar en base 10 no es la única manera de codificar cantidades. Ni tampoco es necesariamente la mejor.

 

Fundamentos matemáticos para un sistema de numeración. Bases, dígitos y cifras.

Todo número viene expresado en una base .

Una base es un conjunto finito y ordenado de signos.

Sus propiedades pueden resumirse en las tres siguientes:

·         El primer elemento de la base es el cero.

·         Los sucesivos elementos ordenados de la base son tales que cualquier elemento es igual a su inmediato anterior más uno.

·         El máximo valor de la base es igual al cardinal de la base menos uno.

La base , por ejemplo, está formada por los siguientes elementos:

En cada base, todo número entero  puede ser escrito de modo único en la forma

(2.1.)

donde  es un entero, y cada uno de los  son enteros que verifican

, para , y .

(2.2.)

A los coeficientes  se les llama dígitos del número . A la expresión (2.1.) se la llama expansión del número. El número habitualmente se representa como

(2.3.)

Cualquier número viene representado, en una base determinada, por una serie única de coeficientes  (ver 2.3.). A cada serie de coeficientes, que codifica un número de modo único en una determinada base, se le llama cifra.

En una cifra importa tanto la posición relativa de cada dígito dentro de ella, como el valor de cada uno de esos dígitos. Cuanto más larga pueda ser la serie de dígitos que se emplean para codificar, mayor será el rango de números que podrán ser representados. Por ejemplo, en base , si disponemos de tres dígitos podremos codificar 1000 valores diferentes (desde el 000 hasta el 999); si disponemos de cinco dígitos podremos codificar 10000 valores (desde el 00000 hasta el 99999).

Como se sabe, y como se desprende de esta forma de codificación, todo cero a la izquierda de estos dígitos supone un nuevo dígito que no aporta valor alguno a la cantidad codificada.

La expansión del número recoge el valor de cada dígito y su peso dentro de la cifra. El dígito  del número  puede tomar cualquier valor comprendido entre 0 y . Cuando se necesita codificar un número mayor o igual que el cardinal de la base () se requiere un segundo dígito , que también puede tomar sucesivamente todos los valores comprendidos entre 0 y . Cada vez que el dígito  debiera superar el valor  vuelve a tomar el valor inicial 0 y se incrementa en uno el dígito . Cuando el dígito  necesita superar el valor  se hace necesario introducir un tercer dígito  en la cifra, que también podrá tomar sucesivamente todos los valores comprendidos entre 0 y , incrementándose en uno cada vez que el dígito  debiera superar el valor . El dígito  “contabiliza” el número de veces que  alcanza en sus incrementos el valor superior a . El dígito  “contabiliza” el número de veces que  alcanza en sus incrementos el valor superior a . Por tanto, el incremento en uno del dígito  supone  incrementos del dígito . El incremento en uno del dígito  supone  incrementos del dígito , lo que a su vez supone  incrementos de . Y así, sucesivamente, el incremento del dígito  exige   incrementos en .

Todos los dígitos posteriores a la posición  codifican el número de veces que el dígito  ha recorrido de forma completa todos los valores comprendidos entre  0 y .

De todo lo dicho ahora se deduce que toda base es, en su sistema de numeración, base 10: Dos, en base binaria se codifica como 10; tres, en base 3, se codifica como 10; cuatro, en base 4, se codifica como 10…

 

Sistemas de numeración habituales en la informática

El sistema de numeración más habitual en nuestro mundo es el sistema decimal. Si buscamos un porqué a nuestra base 10 quizá deduzcamos que su motivo descansa en el número de dedos de nuestras dos manos.

Pero un ordenador no tiene manos. Ni dedos.

Como hemos visto en el capítulo anterior, el circuito electrónico básico de la memoria de los ordenadores, tal como hoy se conciben, está formado por una gran cantidad de circuitos electrónicos que tiene dos estados estables posibles.

¿Cuántos estados posibles?...: DOS.

Por eso, porque los ordenadores “sólo tienen dos dedos”, es por lo que ellos trabajan mejor en base dos. Es decir, sólo disponen de dos elementos para codificar cantidades. El primer elemento, por definición de base, es el valor cero. El segundo (y último) es igual al cardinal de la base menos uno y es igual al primer elemento más uno. Esa base está formada, por tanto, por dos elementos que llamaremos:

Otras bases muy utilizadas en programación (y que uso muy extendido en lenguajes de bajo nivel como el lenguaje C) son la base octal (o base ocho) y la base hexadecimal (o base dieciséis).

Lo de la base hexadecimal puede llevar a una inicial confusión porque no nos imaginamos qué dígitos podemos emplear más allá del dígito nueve. Para esa base se extiende el conjunto de dígitos haciendo uso del abecedario:

 

Sistema Binario

Aprender a trabajar en una base nueva no está exento de cierta dificultad. Habría que echar mano de nuestra memoria, de cuando éramos infantes y no sabíamos contar. No nos resultaba sencillo saber qué número viene (en base diez) después del noventa y nueve.

Noventa y ocho,… Noventa y nueve,… Noventa y diez.

¡No!: cien.

Trabajemos en base diez:

0

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

y… ¿en base dos?: después de cero el uno. Y después del uno… ¡el diez!

0

1

10

11

100

101

110

111

1000

1001

1010

1011

1100

1101

1110

1111

10000

10001

10010

10011

10100

10101

10110

10111

11000

11001

11010

11011

11100

11101

En ambos cuadros están codificadas las mismas cantidades. En base diez el primero, en base dos o base binaria el segundo.

Además de contar, es necesario aprender las operaciones matemáticas básicas. Al menos sumar y restar. De nuevo hay que volver a la infancia y aprender la aritmética básica de los clásicos cuadernos de sumas. Las reglas básicas para esas dos operaciones son:

0 + 0 = 0

 

0 – 0 = 0

0 + 1 = 1

 

0 – 1 = 1 “y debo 1”

1 + 0 = 1

 

1 – 0 = 1

1 + 1 = 0 “y llevo 1”

 

1 – 1 = 0

Y así, se puede practicar con sumas de enteros de más o menos dígitos:

10100

 

11101

 

1011011011

 

1010000110

 

100001001

+1110

 

+10111

 

+1100011

 

+1100001110

 

+11101001

100010

 

110100

 

1100111110

 

10110010100

 

111110010

Para las restas haremos lo mismo que cuando restamos en base diez: el minuendo siempre mayor que el sustrayendo: en caso contrario se invierten los valores y al resultado le cambiamos el signo:

10100

 

11101

 

1011011011

 

1100001110

 

100001001

-1110

 

-10111

 

-1100011

 

-1010000110

 

-11101001

00110

 

00110

 

1001111000

 

0010001000

 

000100000

 

Cambio de Base

Las cantidades que se codifican no dependen del sistema de codificación. Antes hemos visto los treinta primeros números naturales (comenzando por el cero) codificados en base diez y en base dos. ¿Cómo obtener, a partir de una cantidad codificada en base dos, su codificación en base diez? ¿Y viceversa?

Paso de base dos a base diez: Para este cambio de base es suficiente con desarrollar la expansión del número. Por ejemplo:

Paso de base diez a base dos: Para este cambio se divide el entero por dos (división entera), y se repite sucesivamente esta división hasta llegar a un cociente menor que la base. Simplemente vamos dividiendo por la base el número original y vamos repitiendo el procedimiento para los cocientes que vamos obteniendo.

Los restos de estas divisiones, y el último cociente, son los dígitos buscados (siempre deberán estar entre 0 y ). El último cociente es el dígito más significativo, y el primer resto el menos significativo.

Por ejemplo, en el ejemplo recogido en el cuadro 2.1. vemos que el valor 157 expresado en base diez  es, en base dos, 10011101.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

157

2