Logo Studenta

programacion c ejercicios resueltos-12

¡Estudia con miles de materiales!

Vista previa del material en texto

6 | Capítulo 1: Repaso de programación y resolución de problemas
lenguaje de programación permite al programador cierta fl exibilidad en cómo se traduce un algorit-
mo. Dada esta fl exibilidad, las personas adoptan sus propios estilos al escribir programas, del mismo 
modo que lo hacen al escribir historias cortas o ensayos. Una vez que ya cuenta con algo de expe-
riencia en la programación, desarrolla un estilo propio. En todo el libro se ofrecen consejos prácticos 
acerca del buen estilo de programación.
Algunas personas intentan acelerar el proceso de programación al ir directamente de la defi ni-
ción del problema a la codifi cación del programa (véase la fi gura 1-3). Un atajo aquí es muy tentador 
y en principio parece ahorrar mucho tiempo. Sin embargo, por muchas razones que se irán hacien-
do obvias a medida que lea este libro, esta clase de atajo toma en realidad más tiempo y esfuerzo. 
Desarrollar una solución general antes de escribir un programa ayuda a manejarlo, mantener claros 
sus pensamientos y evitar errores. Si al comienzo no se da tiempo para razonar y pulir su algoritmo, 
utilizará tiempo extra en la depuración y revisión de su programa. Así que ¡piense primero y codifi -
que después! Mientras más pronto empiece a codifi car, más tiempo le llevará elaborar un programa 
que funcione.
Una vez que un programa se ha puesto en uso, a menudo es necesario modifi carlo. La modifi ca-
ción puede requerir arreglar un error descubierto durante el uso del programa o cambiar el programa 
en respuesta a cambios en los requisitos del usuario. Cada vez que se modifi ca el programa, es nece-
sario repetir las fases de resolución del problema e implementación para los aspectos del programa 
que cambian. Esta fase del proceso de programación se conoce como mantenimiento y explica la 
mayor parte del esfuerzo empleado en la mayoría de los programas. Por ejemplo, un programa que 
se implementa en unos cuantos meses podría requerir que sea mantenido en un periodo de muchos 
años. Así, es una inversión económica de tiempo desarrollar la solución del problema inicial y la 
implementación del programa de manera cuidadosa. Juntas, las fases de resolución del problema, 
implementación y mantenimiento constituyen el ciclo de vida del programa.
Además de resolver el problema, ejecutar el algoritmo y man-
tener el programa, la documentación es una parte importante del pro-
ceso de programación. La documentación incluye explicaciones 
escritas del problema que se está resolviendo y la organización 
de la solución, comentarios insertados dentro del programa mis-
mo y manuales del usuario que describen cómo usar el programa. 
Muchas personas distintas trabajan en la mayor parte de los pro-
gramas durante un largo periodo. Cada una de esas personas debe 
poder leer y entender el código.
Después de escribir un programa, se debe dar a la computadora la información o datos necesarios 
para resolver el problema. La información es cualquier conocimiento que puede ser comunicado, incluso 
ideas y conceptos abstractos como “la Tierra es redonda”. Los datos son la información en una forma 
que la computadora puede usar; por ejemplo, los números y letras constituyen las fórmulas que rela-
cionan el radio de la Tierra con su volumen y área superfi cial. Pero los datos no están restringidos a 
Documentación Texto y comentarios que facilitan a otros 
la comprensión, uso y modifi cación de un programa.
Información Cualquier conocimiento que puede ser 
comunicado.
Datos Información en forma que una computadora 
puede usar.
Figura 1-3 ¿Atajo de programación?
Problema
¿Atajo?
FASE DE RESOLUCIÓN DEL PROBLEMA
Algoritmo
FASE DE IMPLEMENTACIÓN
Programa
DALE01.indd 6DALE01.indd 6 4/12/06 18:47:294/12/06 18:47:29
 www.FreeLibros.me
números y letras. En la actualidad, las computadoras también procesan datos que representan sonido 
(que se reproducirá en las bocinas), imágenes gráfi cas (que se mostrarán en una pantalla de compu-
tadora o impresora), video (que se verá en un reproductor de DVD), etcétera.
1.1 Repaso de programación | 7
Bases teóricas
Representación binaria de datos 
En una computadora, los datos son representados electrónicamente por medio de pulsos de electricidad. 
Los circuitos eléctricos, en su forma más simple, están encendidos o apagados. Por lo común, un circuito en-
cendido se representa por el número 1; un circuito apagado se representa por el número 0. Cualquier clase 
de datos se puede representar mediante combinaciones de “unos” y “ceros” sufi cientes. Sólo se tiene que 
elegir la combinación que representa cada conjunto de datos que se está usando. Por ejemplo, se podría 
elegir de manera arbitraria el patrón 1101000110 para representar el nombre C++.
Los datos representados por “unos” y “ceros” están en forma binaria. El sistema de números binarios 
(base 2) utiliza sólo “unos” y “ceros” para representar números. (El sistema de números decimales [base 
10] emplea los dígitos 0 al 9.) La palabra bit (abreviatura para binary digit) se emplea con frecuencia para 
referirse a un solo 1 o 0. Así, el patrón 1101000110 tiene 10 bits. Un número binario con 10 bits puede re-
presentar 210 (1 024) patrones diferentes. Un byte es un grupo de 8 bits; puede representar 28 (256) patrones. 
Dentro de la computadora, cada carácter (como la letra A, la letra g o un signo de interrogación) se repre-
senta normalmente por un byte. Cuatro bits, o la mitad de un byte, se llama nibble o nybble —nombre que 
originalmente fue propuesto en tono de burla, pero ahora es terminología estándar—. Los grupos de 16, 32 
y 64 bits se llaman por lo general palabras (aunque a veces se emplean los términos palabra corta y palabra 
larga para hacer referencia a grupos de 16 y 64 bits, respectivamente).
El proceso de asignar patrones de bits a conjuntos de datos se llama codifi cación; se da el mismo nom-
bre al proceso de traducir un algoritmo en un lenguaje de programación. Los nombres son los mismos 
porque el único lenguaje que reconocían las primeras computadoras era de forma binaria. Así, en los prime-
ros días de las computadoras, programación signifi caba traducir datos y algoritmos en patrones de “unos” y 
“ceros”.
Los esquemas de codifi cación binarios aún se emplean en la computadora para representar tanto las 
instrucciones que sigue como los datos que utiliza. Por ejemplo, 16 bits pueden representar los enteros 
decimales de 0 a 216 – 1(65 535). Los caracteres pueden ser representados también por combinaciones de 
bits. En un esquema de codifi cación, 01001101 representa a M y 01101101 representa a m. Para representar 
números negativos, números reales, números en notación científi ca, sonido, gráfi cas y video son necesarios 
esquemas de codifi cación más complicados. En el capítulo 10 se examina en detalle la representación de 
números y caracteres en la computadora.
Los patrones de bits que representan datos varían de una computadora a otra. Incluso en la misma 
computadora, lenguajes de programación diferentes pueden usar representaciones binarias distintas para 
los mismos datos. Un solo lenguaje de programación puede incluso usar el mismo patrón de bits para re-
presentar diversas cosas en contextos distintos. (Las personas hacen esto también. La palabra formada por 
las cuatro letras tack [en idioma inglés] tiene diferentes signifi cados dependiendo de si habla acerca de tapi-
cería, navegación, coser a máquina, pintura o montar a caballo.) La cuestión es que los patrones de bits por 
sí mismos carecen de signifi cado. La manera en que se emplean los patrones es lo que les da su signifi cado.
Por fortuna, ya no es necesario trabajar con esquemas de codifi cación binarios. Hoy día el proceso de 
codifi car es normalmente sólo un asunto de escribir los datos con letras, números y símbolos. La compu-
tadora convierte de modo automático estas letras, números y símbolos a la forma binaria. Sin embargo, 
cuando trabaje con computadoras, se encontrará continuamente con números relacionadoscon potencias 
de 2 —números como 256, 32 768 y 65 536—, recordatorios de que el sistema de números binarios acecha 
en algún lugar cercano.
DALE01.indd 7DALE01.indd 7 4/12/06 18:47:314/12/06 18:47:31
 www.FreeLibros.me
8 | Capítulo 1: Repaso de programación y resolución de problemas
1.2 ¿Qué es un lenguaje de programación?
En la computadora, los datos —cualquiera que sea su forma— se almacenan y emplean en códigos 
binarios, cadenas de “unos” y “ceros”. Las instrucciones y datos se almacenan en la memoria de la 
computadora por medio de estos códigos binarios. Si usted examinara los códigos binarios que repre-
sentan instrucciones y datos en la memoria, no podría indicar la diferencia entre ellos; se distinguen 
sólo por la manera en que los usa la computadora. Esto hace posible que la computadora procese sus 
propias instrucciones como una forma de datos.
En los inicios del desarrollo de las computadoras, el único 
lenguaje de programación disponible era la instrucción primitiva 
integrada en cada máquina, el lenguaje de máquina o código de má-
quina.
Aun cuando la mayoría de las computadoras realizan la mis-
ma clase de operaciones, sus diseñadores eligen diferentes conjun-
tos de códigos binarios para cada instrucción. Por tanto, el código 
de máquina para una computadora no es el mismo que para otra.
Cuando los programadores usaron el lenguaje de máquina 
para programar, tuvieron que introducir códigos binarios para las 
distintas instrucciones, un proceso tedioso propenso a error. Además, sus programas eran difíciles de 
leer y modifi car. Con el tiempo, se desarrollaron los lenguajes ensambladores para facilitar el trabajo del 
programador.
Las instrucciones en un lenguaje ensamblador están en una forma fácil de recordar llamada ne-
motécnica. Las instrucciones características para la suma y la resta podrían parecerse a esto:
Lenguaje ensamblador Lenguaje de máquina
ADD 100101
SUB 010011
Aunque el lenguaje ensamblador es más fácil para que los humanos trabajen con él, la computado-
ra no puede ejecutar de modo directo las instrucciones. Uno de los descubrimientos fundamentales en la 
ciencia de la computación es que, debido a que una computadora puede procesar sus propias instruccio-
nes como una forma de datos, es posible escribir un programa para traducir las instrucciones del lengua-
je ensamblador en código de máquina. Esta clase de programa se 
llama ensamblador.
El lenguaje ensamblador es un paso en la dirección correcta, 
pero aún obliga a los programadores a pensar en términos de ins-
trucciones de máquina individuales. Finalmente, los científi cos de 
la computación desarrollaron lenguajes de programación de alto 
nivel. Estos lenguajes son más fáciles de usar que los lenguajes 
ensambladores o código de máquina porque se aproximan más al 
idioma inglés y a otros lenguajes naturales (véase la fi gura 1-4).
Un programa llamado compilador traduce los programas escri-
tos en algunos lenguajes de alto nivel (C++, Pascal, FORTRAN, 
COBOL, Modula-2 y Ada, por ejemplo) en lenguaje de máquina. Si usted escribiera un programa en 
un lenguaje de alto nivel, puede ejecutarlo en cualquier computadora que tenga un compilador apro-
piado. Esto es posible porque la mayoría de los lenguajes de alto nivel están estandarizados, lo que 
signifi ca que existe una descripción ofi cial del lenguaje.
Un programa en un lenguaje de alto nivel se llama programa fuente. Para el compilador, un progra-
ma fuente son sólo datos de entrada. Traduce el programa en un programa en lenguaje de máquina 
llamado programa objeto (véase la fi gura 1-5). Algunos compiladores producen también un listado (una 
copia del programa con mensajes de error y otra información insertada).
Un benefi cio de los lenguajes de alto nivel estandarizados es que permiten escribir en código 
portable (o independiente de la máquina). Según se destaca en la fi gura 1-5, un programa escrito en 
lenguaje ensamblador o lenguaje de máquina no es transportable de una computadora a otra. Debido 
Ensamblador Programa que traduce lenguaje ensambla-
dor en código de máquina.
Compilador Programa que traduce lenguaje de alto nivel 
en código de máquina.
Programa fuente Programa escrito en lenguaje de pro-
gramación de alto nivel.
Programa objeto Versión del lenguaje de máquina de un 
programa fuente.
Lenguaje de máquina Lenguaje conformado por ins-
trucciones en código binario, usado directamente por la 
computadora.
Lenguaje ensamblador Lenguaje de programación de 
bajo nivel en el que se emplea una ayuda nemotécnica 
para representar cada una de las instrucciones del lengua-
je de máquina para una computadora particular.
DALE01.indd 8DALE01.indd 8 4/12/06 18:47:404/12/06 18:47:40
 www.FreeLibros.me