http://www.cyta.com.ar/biblioteca/bddoc/bdlibros/construccion_programas/programar.pdf
Ver Captulos I, IV, V, VI, VII
Responsabilidades del programador
1) Usar estructuras de datos y tipos de datos adecuados al programa a desarrollar.
2) Construir soluciones a medida y no adaptar los problemas a soluciones preestablecidas.
(facturacin, sueldos, compras, ventas, etc.)
3) Ser capaz de analizar un problema hasta comprenderlo completamente.
4) Usar las herramientas disponibles pero evitando que una herramienta detenga o altere la
solucin de un problema. (ejs: grficos, el uso la web, bases de datos robustas)
Estilos de Programacin
1) Usar variables representativas al problema que est resolviendo. Tratar de no confundirse entre
variables en maysculas y variables en minsculas.
2) Optimizar las sentencias de control. (ciclos, decisiones)
Ej:
For I:=1 to n
For J:=i+1 to n
If x(i)<x(j) then
Else
Aux:=x(i)
X(i)=x(j)
X(j)=aux
Ej.2
If x>10
If x>200
If x>500
Tarifa=1.00
Else
Tarifa=0.5
Else
Tarifa=0
3) Documentar el programa.
4) Realice interfaces amigables y comprensibles para el usuario.
5) Hacer programas robustos.
Robustez de un programa
Un programa es robusto si se comporta razonablemente aun en circunstancias que no fueron anticipadas en
los requerimientos. Si se puede pensar en acontecimientos imprevistos, entonces hay que incluirlos en la
especificacin y se habla de correccin.
Robustez: Un programa es robusto cuando es capaz de manejar razonablemente situaciones inesperadas (que
falten archivos, que se acabe la memoria, que haya un error interno en el mismo programa), y minimiza el
dao producido por estas situaciones.
Optimizacin de algoritmos
Consiste en minimizar el tiempo de ejecucin o la cantidad de memoria utilizada
1)
2)
3)
4)
5)
6)
7)
Ej:
queda: y + x
y- x
Pruebas de Programas
Bibliografa:
Caja Negra: Pruebas en que se conoce la entrada y lo que debe ser la salida. Se prueba:
- Cada una de las opciones del programa.
- Valores tipos.
- Valores limites.
- Valores extremos.
- Valores de pertenencia y de no pertenencia.
- Valores especiales.
Herramientas para pruebas:
- Manuales.
- Uso de otros programas.
- Valores al azar.
Costos de algoritmos
Bibliografa: Estructura de datos y algoritmos Alfred V. Aho, John Hopcroft Editorial Adison Wesley.
Pginas: 16-27
Tiempo de Ejecucin de un programa
Cuando se resuelve un problema, existen dos objetivos que suelen contradecirse:
- Que el algoritmo sea fcil de entender, codificar y depurar.
- Que el algoritmo use eficientemente los recursos del ordenador, y que se ejecute con la mayor
rapidez posible.
El primer objetivo es ms razonable cuando el programa se va a usar una o pocas veces. El costo del tiempo
de programacin excede en mucho al costo del tiempo de ejecucin.
En cambio cuando una solucin se va a utilizar muchas veces, es importante centrarse en el segundo objetivo.
Con esto suponemos que un programa con tiempo de ejecucin n 2 es menor que un
programa con tiempo de ejecucin n3. Esto siempre es posible con tamao de entrada
grandes . Veamos en la siguiente tabla el ejemplo:
Tamao
n
1
2
3
10
20
50
Tiempo
100n
100
200
300
1000
2000
5000
Tiempo
5n2
5
20
45
500
2000
12500
Tiempo
n3/2
0.5
4
13.5
500
4000
62500
En conclusin:
1) Si el programa se va a utilizar solo algunas veces, el costo de escritura es el mas
importante. Debe elegirse el algoritmo ms fcil de utilizar.
2) No calcular el tiempo de ejecucin de un programa con entradas pequeas.
3) Un algoritmo eficiente pero complicado puede no ser apropiado para el
mantenimiento.
4) Existen algoritmos demasiados eficientes que necesitan ocupar almacenamiento
secundarios lentos que anulan su eficiencia.
5) En algoritmos numricos, la precisin y la estabilidad son tan importantes como la
eficiencia.
Calculo del tiempo de ejecucin de un programa
Se va a definir por notacin a Ti(n) como el tiempo de ejecucin de un fragmento de programa P i. . Entonces
O(fi(n)) es el mximo valor obtenido de todas las expresiones Ti(n) del programa.
Ejemplo
a)
Sean T1(n)=5 , T2(n)=7, T3(n)=3, T4(n)=6
O(f(n)) = max(T1(n)+ T2(n)+ T3(n)+ T4(n)) = T2(n)= 7
b)
O(f(n)) = (O(n), O(n3), O(n4)) = n4
Como se mide:?
1) El tiempo de ejecucin de cada sentencia de asignacin, lectura, escritura se toma como O(1).
2) El tiempo de ejecucin de cada sentencia condicional if-else-case, se mide como el mximo valor
obtenido que exista en cada condicin. La evolucin de cada condicin tiene un costo O(1).
3) El tiempo de ejecucin de un ciclo es el mximo valor obtenido del cuerpo del ciclo multiplicado
por el nmero de veces que se ejecuta el ciclo.
4) En el caso de procedimientos y funciones, el costo debe ser calculado evalundolo en forma
separada y luego comparar conjuntamente con el resto de los costos de las proposiciones del cuerpo
del programa a fin de obtener el mximo.