Algoritmos y su Codificación en C++. Volumen 2

 César Liza Avila

 

PRESENTACION

 

 

 

Esta obra es la continuación de “Algoritmos y su Codificación en C++”, y viene a completar el vacío que existía respecto a temas que no tratamos en ella. Manejo de caracteres, arreglos bidimensionales, estructuras, uniones, enumeraciones, manipulación de bits, generación de números aleatorios, simulación, punteros, asignación dinámica de memoria, y archivos, son tratados mediante más de 81 ejemplos completos de programación. Asimismo, encontrará más de 140 ejercicios propuestos que le servirían para practicar lo aprendido, y que serán de valiosa ayuda para los docentes en la elaboración de prácticas y exámenes.

 

Para la compilación de los programas presentados en este libro, utilizamos el Microsoft Visual C++, en aplicaciones en modo consola, pero puede utilizar otros compiladores haciendo pequeñas modificaciones al código.

 

En este segundo volumen, no utilizamos los diagramas N/S, pues consideramos que el programador tiene la suficiente madurez lógica y puede estructurar la solución al problema para luego pasar a su codificación.

 

El primer capítulo, trata sobre las cadenas de caracteres, que son implementadas en C/C++ como arreglos, donde cada uno de sus elementos es un carácter. Es importante su estudio puesto que el hombre se comunica con palabras más que con números, y la computadora solo utiliza números para todo, inclusive para representar cada una de las letras, ya sea mediante el código ASCII o su sucesor el UNICODE.

 

Los arreglos bidimensionales o matrices, constituyen un elemento importante en matemáticas pues permiten resolver un amplio conjunto de problemas con muchísimas aplicaciones reales, así como almacenar datos que necesitan 2 dimensiones para ser identificados. El segundo capítulo, aborda este tema mediante numerosos ejemplos.

 

Las estructures, uniones y enumeraciones son tratadas en el tercer capítulo. Las estructuras son construcciones en C/C++, que permiten agrupar un conjunto de atributos de diferentes tipos de datos, en una única variable; las estructuras constituyen los predecesores de las clases. Las uniones definen en una misma zona de memoria uno o más elementos, permitiendo su ahorro; mientras que las enumeraciones hacen más claro nuestro programa, ya que podemos usar nombres en vez de números.

 

En el cuarto capítulo, mostramos cómo generar números aleatorios con distribuciones tales como Uniforme, Poisson, Exponencial, y Normal; abordando problemas mediante la técnica conocida como Simulación Montecarlo.

 

La manipulación de bits, la tratamos en el quinto capítulo, y es uno de mis favoritos, pues en él, mostramos cómo la computadora almacena y procesa internamente los datos operando sobre bits; además existen muy pocos libros que traten adecuadamente este tema, y lo tratan con escasos ejemplos. Este libro es la excepción pues mostramos diversas e interesantes aplicaciones.

 

Los datos que usamos y los programas que ejecutamos en una computadora, ocupan memoria. Mediante los punteros podemos acceder a cualquier zona de memoria asignada a nuestro programa. Asimismo, mostramos como usar la asignación dinámica, para reservar la memoria necesaria según como la vayamos necesitando. Estos temas son tratados en el sexto capítulo.

 

En el sétimo y último capítulo, mostramos cómo hacer persistentes nuestros datos en archivos; así como, analizar e interpretar los diversos formatos de almacenamiento, abriéndonos la puerta a un mundo de aplicaciones.

 

Espero que la presente, supere la acogida que tuvo el primer volumen. Le rogamos que cualquier crítica, sugerencia, o inquietud, la dirija a la siguiente dirección electrónica: creadores@hotmail.com, que gustosos la responderemos con el ánimo de mejorar cada día. Asimismo, le invitamos a visitar nuestra página web www.geocities.com/cesar_liza.

 

 

César Liza Avila

 

 

 

 

 

CONTENIDO

 

 

 

Presentación...............................................................................................7

 

 

CAPITULO 1: Cadenas de Caracteres……………….………………….…15

1.1             Muestre la tabla de códigos ASCII

1.2             Programa que  muestre el uso de las secuencias de escape

1.3             Convierta una palabra en mayúsculas a minúsculas

1.4             Muestre la suma de verificación de un mensaje

1.5             Dada una cadena numérica obtenga el número que representa

1.6             Lea una frase y muéstrela palabra por palabra

1.7             Cree su propia función para ingresar caracteres desde teclado

1.8             Encripte una cadena sumando sus ASCII con los de la clave

1.9             Encripte una cadena con una tabla de equivalencia

1.10         Diga como es alfabéticamente, una palabra respecto a otra

1.11         Programa que utiliza las macros y funciones provistas en ctype.h

1.12         Uso de las funciones estándar provistas en el archivo string.h

1.13         Diga si una palabra es palíndroma

 

 

CAPITULO 2: Arreglos Bidimensionales..…………………………..…….41

2.1            Lea una matriz con f filas y c columnas y luego la imprímala

2.2            Encuentre la transpuesta de una matriz

2.3            Genere una matriz identidad de orden n

2.4            Dada una matriz diga si ésta es una matriz triangular superior

2.5            Dada dos matrices obtenga la matriz ampliada

2.6            Inserte un vector en una columna determinada de una matriz

2.7            ¿Cuál es la producción mensual de un grupo de fábricas?

2.8            Posiciones a las que se mueve la reina en un tablero de ajedrez

2.9            Suma de dos matrices

2.10        Producto de dos matrices

2.11        Determinante de una matriz

2.12        Resuelva un sistema de ecuaciones simultáneas

2.13        Inversa de una matriz

2.14        Programa que juega “tres en raya

2.15        Lea un conjunto de palabras en una matriz y ordénelas

 

 

CAPITULO 3: Estructuras Uniones y Enumeraciones..………...….…..89

3.1              Suma de dos números complejos

3.2              ¿A cuánto debe venderse cada kilo para no ganar ni perder?

3.3              Encuentre el valor numérico de un polinomio f(x)

3.4              Busque una fecha y diga cuál fue su temperatura

3.5              Gestione los datos de un conjunto de alumnos

3.6              Programa que permita al usuario resolver un crucigrama

3.7              Defina, en una misma zona de memoria, un entero y un flotante

3.8              Pida un número de día de la semana, y muestre el nombre del día

3.9              Lea una moneda y diga a cuántos céntimos equivale

 

 

CAPITULO 4: Manipulación de Bits……………………………..…….….115

4.1              Muestra el uso de operadores a nivel de bits: ~, &, | , ^, << y >>

4.2              Lea un número, muestre sus bits tal como se ven en memoria

4.3              Encripte un mensaje por manipulación de bits con XOR

4.4              Programa que genera una baraja de cartas. Use campos de bits

4.5              Programa que lee una hora y obtiene el número que la representa

4.6              Lea un número que represente una fecha válida y obtenga la fecha

4.7              Lee una hora y da el número que la representa. Campos de Bits

4.8              Muestre cada bit de un punto flotante de simple precisión

4.9              Estándar IEEE 754 de un flotante de simple precisión

 

 

CAPITULO 5: Generación de Números Aleatorios y Simulación..….143

5.1.           Genera números aleatorios por el Método Congruencial Lineal

5.2.           Genera aleatorio discreto en [0, RAND_MAX], [0, a-1], y [a, b]

5.3.           Genera aleatorio en el intervalo continuo entre [0, 1] y [a, b]

5.4.           Caminata aleatoria de borrachito, a igual distancia de casa-cantina

5.5.           Ley Fuerte de los Grandes Números

5.6.           Calcule la integral definida de una función f(x), por simulación

5.7.           Calcule el valor de PI,  por simulación

5.8.           Obtenga los números ganadores del siguiente sorteo de La Tinka

5.9.           Genera aleatorios con Distribución Poisson y media lambda

5.10.      Genera aleatorios con Distribución Exponencial y media 1/µ

5.11.      Genera aleatorios con Distribución Normal

5.12.      Genera una permutación aleatoria (mezcla) de n elementos

5.13.      Genera combinación aleatoria de n elementos, en grupos de r

 

 

CAPITULO 6: Punteros y Asignación Dinámica de Memoria..………173

6.1              Declare variables y muestre sus direcciones de memoria

6.2              Función que intercambia dos valores

6.3              Lea coordenadas cartesianas, y conviértalas a polares

6.4              Direcciones de memoria que ocupan los elementos de un arreglo

6.5              Usando arreglos y punteros, lea n elementos y ordénelos

6.6              Lea una palabra y reemplace una letra por otra

6.7              Determine si una palabra es palíndroma

6.8              Concatene 2 palabras

6.9              Ordene los elementos de arreglo, usando un arreglo de punteros

6.10           Función que lee n empleados, usando un puntero a una estructura

6.11           Arreglo dinámico de n flotantes

6.12           Puntero a función

6.13           Función que intercambia dos valores. Use referencias

 

 

CAPITULO 7: Archivos..…………………………………………………….201

7.1            Lea una serie de caracteres y cree un archivo con ellos

7.2            Lea el nombre de un archivo y muestre su contenido por pantalla

7.3            Lea  un archivo y cópielo hacia otro

7.4            Divida un archivo en otros, similar al Hacha

7.5            Lea una serie de registros y guárdelos en un archivo

7.6            Construya un Visor Hexadecimal

7.7            Comprima un archivo por reducción de caracteres repetidos

7.8            Lista los archivos comprimidos en *.ZIP

7.9            Dada una carpeta, muestre los directorios y archivos que contiene