CHAPTER VI: BUSINESS AND HUMAN RIGHTS ACTION 10
PART 3: IMPLICATIONS OF THE GUIDING PRINCIPLES FOR LAW FIRMS 41
II. Developing and embedding a human rights policy commitment in a law firm – Guiding
La programación es un proceso de solución de problemas. Diferentes personas utilizan distintas técnicas para resolver problemas. Algunas técnicas están definidas de manera clara y son fáciles de seguir; resuelven el problema y dan una visión de cómo se alcanzó la solución. Esas técnicas de solución de problemas se pueden modificar con facilidad si el dominio del problema cambia.
Para ser un solucionador de problemas habilidoso, y por tanto, para convertirse en un progra- mador hábil, se deben utilizar buenas técnicas de solución de problemas. Una técnica común incluye analizar el problema, delinear sus requerimientos y diseñar los pasos; esto se denomina
algoritmo, cuyo fin es resolver el problema.
Algoritmo: proceso paso a paso de solución de problemas en donde se llega a una solución en
un intervalo finito.
En el entorno de programación, el proceso de solución de problemas comprende los siguientes pasos:
1. Analizar y delinear el problema y sus requerimientos de solución. 2. Diseñar un algoritmo para resolver el problema.
3. Implementar el algoritmo en un lenguaje de programación, como Java. 4. Verificar que el programa funciona.
5. Mantener el programa empleándolo, mejorándolo y modificándolo si el dominio del problema cambia.
En la figura 1-4 se resume este proceso de programación. Problema No hay error Error Error Intérprete Compilador Análisis Diseño de algoritmo Codificador Resultados Biblioteca Bytecode Cargador No hay error
Programación con el ciclo del problema: análisis- codificación-ejecución | 15
1
Para desarrollar un programa a fin de resolver un problema, se inicia analizándolo, después se delinea el problema y las opciones para una solución. A continuación se diseña el algoritmo; se escriben las instrucciones en un lenguaje de alto nivel o se codifica el programa y se ingresa este en un sistema de computadora.
Analizar el problema es el primer y más importante paso en el proceso. Este paso requiere que se haga lo siguiente:
t Comprender por completo el problema.
t Comprender los requerimientos del problema. Los requerimientos pueden in- cluir si el programa necesita interacción con el usuario, si manipula datos, si produce una salida y cómo luce esta. Si el programa manipula datos, el progra- mador debe saber cuáles son y cómo están representados. Para hacer esto, se necesita consultar datos de muestra.
t Si el programa produce una salida, se debe saber cómo se tienen que generar y formatear los resultados.
t Si el problema es complejo, se divide en subproblemas y se repiten los pasos 1 y 2 analizando y comprendiendo los requisitos de cada subproblema. También se necesita saber cómo se relacionan entre sí.
Después de analizar cuidadosamente el problema, el paso siguiente es diseñar un algoritmo para resolverlo. Si se divide el problema en subproblemas, se necesita diseñar un algoritmo para cada subproblema. Una vez que se haya diseñado un algoritmo se debe verificar su funciona- miento. En ocasiones esto se puede hacer empleando datos de muestra; en otras, es posible te- ner que realizar un análisis matemático para probar el funcionamiento del algoritmo. También es necesario integrar las soluciones de los subproblemas.
Después de haber diseñado el algoritmo y verificado su funcionamiento, el paso siguiente es convertir el algoritmo en un lenguaje de alto nivel. Para ingresar el programa en una compu- tadora se utiliza un editor de textos, asegurándose de que el programa siga la sintaxis del len- guaje. Para verificar la corrección de la sintaxis, se ejecuta el código a través de un compilador. Si el compilador genera mensajes de error, se deben identificar los errores en el código, resol- verlos y luego ejecutar de nuevo el código a través del compilador. Cuando se han eliminado todos los errores de sintaxis, el compilador genera el código de máquina (bytecode en Java). El paso final es ejecutar el programa. El compilador garantiza sólo que el programa sigue la sintaxis del lenguaje; no garantiza que el programa se ejecutará correctamente. Durante la eje- cución, el programa podría terminar de manera anormal debido a errores lógicos, como una división entre cero. Incluso si el programa termina normalmente, aún puede generar resultados erróneos. Ante estas circunstancias, se tiene que reexaminar el código, el algoritmo e incluso el análisis del problema.
Su experiencia global de programación se beneficiará si emplea tiempo suficiente para com- pletar minuciosamente el análisis del problema antes de intentar escribir las instrucciones de programación. Es usual que esto se haga en una hoja de papel empleando un bolígrafo o un lápiz. Tomar este enfoque cuidadoso para programar tiene una variedad de ventajas. Es mucho más fácil descubrir errores en un programa que esté bien analizado y diseñado. Además, un
E J E M P L O 1 - 2 EXAMPLE 2-1
En este ejemplo se diseña un algoritmo que calcule el salario mensual de un vendedor en una tienda departamental local.
Cada vendedor tiene un salario base y recibe un bono al final de cada mes, con base en los criterios siguientes: si el vendedor ha estado trabajando en la tienda durante cinco años o me- nos, el bono es de 10 dólares por cada año que haya trabajado. Si el vendedor ha estado en la tienda durante más de cinco años, el bono es de 20 dólares por cada año que haya trabajado. El vendedor puede obtener un bono adicional como sigue: si las ventas totales hechas por él durante el mes son mayores que o iguales a 5 000 dólares, pero menores que 10 000, recibe una comisión de 3% de las ventas. Si las ventas totales para el mes son al menos de 10 000 dólares, recibe una comisión de 6% de las ventas.
programa minuciosamente analizado y cuidadosamente diseñado es mucho más fácil de seguir y modificar. Incluso los programadores más experimentados pasan un considerable lapso ana- lizando un problema y diseñando un algoritmo.
A lo largo de este libro no sólo aprenderá las reglas para escribir programas en Java, sino también técnicas de solución de problemas. En cada capítulo se analizan varios problemas de programación, cada uno de los cuales está marcado claramente como un ejemplo de progra- mación. Los ejemplos de programación enseñan técnicas para analizar y resolver los problemas y también ayudan a comprender los conceptos explicados en el capítulo. Para obtener el bene- ficio completo de este libro, se recomienda que resuelva los ejemplos de programación que se encuentran al final de cada capítulo.
E J E M P L O 1 - 1 EXAMPLE 2-1
En este ejemplo se diseña un algoritmo para encontrar el perímetro y el área de un rectángulo. Para encontrar el perímetro y el área de un rectángulo, se necesita conocer la longitud y el ancho del rectángulo. El perímetro y el área del rectángulo se obtienen con las fórmulas siguientes:
SHULPHWUR ώORQJLWXGDQFKR DUHD ORQJLWXGώDQFKR
El algoritmo para encontrar el perímetro y el área del rectángulo es: 1. Se obtiene la longitud del rectángulo.
2. Se obtiene el ancho del rectángulo
3. Se encuentra el perímetro utilizando la ecuación siguiente: SHULPHWUR ώORQJLWXGDQFKR
4. Se encuentra el área empleando la ecuación siguiente:
Programación con el ciclo del problema: análisis- codificación-ejecución | 17
1
Para calcular el salario mensual del vendedor se necesita conocer el salario base, el número de años que ha estado trabajando en la compañía y las ventas totales hechas por él ese mes. Suponga que base- Salary denota el salario base, noOfServiceYears denota el número de años que el vendedor ha estado trabajando en la tienda, bonus denota el bono, totalSales denota las ventas totales hechas por el vendedor durante el mes y additionalBonus denota el bono adicional.
El bono se puede determinar así:
si (noOfServiceYears es menor que o igual a cinco) ERQXV ώQR2I6HUYLFH<HDUV
de lo contrario
ERQXV ώQR2I6HUYLFH<HDUV
Luego, se puede determinar el bono adicional del vendedor como sigue:
si (totalSales es mayor que o igual a 5000) additionalBonus = 0
de lo contrario
si (totalSales es mayor que o igual a 5000 y totalSales es menor que 10000) DGGLWLRQDO%RQXV WRWDO6DOHVώ
de lo contrario
DGGLWLRQDO%RQXV WRWDO6DOHVώ
Siguiendo el análisis anterior, ahora se puede diseñar el algoritmo para calcular el pago mensual del vendedor:
1. Obtener baseSalary.
2. Obtener noOfServiceYears.
3. Calcular el bono utilizando la fórmula siguiente:
si (noOfServiceYears es menor que o igual a cinco) ERQXV ώQR2I6HUYLFH<HDUV
de lo contrario
ERQXV ώQR2I6HUYLFH<HDUV
4. Obtener totalSales.
5. Calcular additionalBonus utilizando la fórmula siguiente:
si (totalSales es menor que 5000) additionalBonus = 0
de lo contrario
si (totalSales es mayor que o igual a 5000 y totalSales es menor que 10000)
DGGLWLRQDO%RQXV WRWDO6DOHVώ de lo contrario
DGGLWLRQDO%RQXV WRWDO6DOHVώ
6. Calcular el salario utilizando la ecuación siguiente:
E J E M P L O 1 - 3 EXAMPLE 2-1
En este ejemplo se diseña un algoritmo para realizar un juego de adivinar un número.
El objetivo es generar de manera aleatoria un entero mayor que o igual a 0 y menor que 100. Lue- go, invitar al jugador (usuario) a adivinar el número. Si el jugador adivina el número de manera correcta, dar salida a un mensaje apropiado. De lo contrario, verificar si el número supuesto es me- nor que el número aleatorio; si el número supuesto es menor que el número aleatorio generado, dar salida al mensaje, “su suposicion es menor que el numero. ¡Intente de nuevo!”; de lo contrario, dar salida al mensaje, “su suposicion es mayor que el numero. ¡Intente de nuevo!”. Luego, invitar al jugador a ingresar otro número. El jugador es invitado a adivinar el número aleatorio hasta que ingrese el número correcto.
El primer paso es generar un número aleatorio, como se describió antes. Java proporciona los medios para hacer esto, lo cual se explica en el capítulo 5. Suponga que num representa el número aleatorio y guess, el número supuesto por el jugador.
Después de que el jugador ingresa guess, se puede comparar guess con el número aleatorio como se explica:
si (guess es igual a num)
Imprimir "Supuso el numero correcto" de lo contrario
si guess es menor que num
Imprimir "Su suposicion es menor que el numero. ¡Intente de nuevo!" de lo contrario
Imprimir “Su suposicion es mayor que el numero. ¡Intente de nuevo!”
Ahora se puede diseñar un algoritmo como el siguiente: 1. Genere un número aleatorio y llámelo num.
2. Repita los pasos siguientes hasta que el jugador haya adivinado el número correcto: a. Invite al jugador a ingresar guess.
b. si (guess es igual a num)
Imprimir "Adivino el numero correcto" de lo contrario
si guess es menor que num
Imprimir "Su suposicion es menor que el numero. ¡Intente de nuevo!" de lo contrario
Imprimir "Su suposicion es mayor que el numero. ¡Intente de nuevo!"
En el capítulo 5 se escribe un programa que utiliza este algoritmo para realizar el juego de adivinar un número.