Você está na página 1de 14

TECNOLÓGICO NACIONAL DE MÉXICO

INSTITUTO TECNOLÓGICO DE DURANGO

PROGRAMACIÓN

UNIDADES:

 4: MODULARIDAD
 5: USO DE BIBLIOTECAS O LIBRERÍAS DEL LENGUAJE

ALUMNOS:

DALILA FERNANDA LEYVA FIGUEROA

LUCIO ARTURO ROMAN BAILON

IBARRA ESPINO RAUL

FERNANDA CECILIA DIAZ ALVAREZ 1°X

PROFESOR: ISIDRO AMARO RODRÍGUEZ

23 DE MAYO DE 2019
UNIDAD 4 “MODULARIDAD”

La modularidad es una opción importante para la escalabilidad y comprensión de


programas, además de ahorrar trabajo y tiempo en el desarrollo.
4.1 Optimización de código
Optimización de código constituye un elemento importante en el desarrollo de una
aplicación que, aunque no asegure su éxito total, proporciona mejoras
considerables que permiten un mayor acercamiento a este. Su objetivo principal
radica en maximizar la eficiencia temporal y espacial de los programas permitiendo
reorganizar el código de manera limpia, correcta y eficiente. Con el propósito de
esclarecer aspectos como el momento, el lugar y la forma de realizar la optimización
del código. La mejora obtenida con la optimización, considerando como criterios
más comunes el ahorro en el tamaño del código, la reducción del tiempo de
ejecución y la mejora de las necesidades del espacio para los datos del programa.
Elementos tomados en cuenta para optimizar
 Coste temporal (Ct): tiempo de ejecución.
 Coste espacial (Ce): espacio de memoria utilizado.
En las rutinas que se ejecutan con mayor frecuencia, es decir, en las que obedecen
la regla 90-10, lo cual significa que siempre hay un 10% del código que se ejecuta
el 90% del tiempo. Para identificar estas rutinas se pueden utilizar las siguientes
técnicas:
Sesiones de profiling: Procedimientos que se efectúan para de conocer cuánto
tiempo demora la ejecución de un programa en cada instrucción.
Sentido común: Depende principalmente de los conocimientos y experiencia del
programador.
¿Cómo optimizar?
Optimizaciones que reducen la estructura:
 Reutilización de expresiones comunes: regularmente tiende a favorecer el
Ct.
Ejemplo básico:
a=b+c a=b+c
d=a-d d=a-d
e = (b + c) *d e = a*d
 Pre-calcular expresiones constantes: tiende a favorecer el( Ct.)
Ejemplo básico:
i=2+3 i=5
j=4 j=4
f = j + 2.5 f = 6.5
 Reducir propagación de copias: tiende a favorecer el (Ce). Ante
instrucciones f = a, como se verá en el ejemplo básico, sustituir todos los
usos de f por a.
Ejemplo básico:
a=3+i a=3+i
f=a b=a+c
b=f+c d=a+m
d=a+m m=a+d
m=f+d

 Eliminar redundancias en acceso matrices: tiende a favorecer el Ct.


//Cod. fuente:
A: array [1...4, 1...6, 1...8] of integer
A[i,j,5] := A[i,j,6] + A[i,j,4]
//Sin optimización:
1. direc(A[i,j,5]) = direc(A[1,1,1]) + (i-1)*6*8 + (j-1)*8 + (5-1)
2. direc(A[i,j,6]) = direc(A[1,1,1]) + (i-1)*6*8 + (j-1)*8 + (6-1)
//Con optimización:
k := direc(A[1,1,1]) + (i-1)*6*8 + (j-1)*8
direc(A[i,j,5]) = k + 4
direc(A[i,j,6]) = k + 5
 Eliminar el código muerto: tiende a favorecer tanto el Ct y Ce.
 Reducir declaración de variables innecesarias dentro de bucles: tiende a
favorecer tanto el Ct y Ce.
 4.2 Descomposición funcional (top-dow).
Top-Down, significa, partir de lo más general hacia lo más detallado. Es un proceso
análogo al de armar un rompecabezas en el sentido de ver primero la imagen ver
primero el concepto o la imagen general, y a partir de allí comenzar a detectar dónde
va cada pieza dentro de la imagen. La diferencia es el recorrido jerárquico y modular
que se realiza en su elaboración.
El diseño descendente es una técnica que permite diseñar la solución de un
problema con base en la modularización o segmentación dándole un enfoque de
arriba hacia abajo (Top Down Desing). Esta solución se divide en módulos que se
estructuran e integran jerárquicamente, como si fuera el organigrama de una
empresa.
4.3 Rutinas, funciones y procedimientos.
Las rutinas de matlab resuelven problemas de condiciones iniciales para conjunto
de ecuaciones diferenciales acopladas. Recordemos que una ecuación diferencial
ordinaria de primer orden con condición inicial toma la forma.
Existen cinco tipos de rutinas en matlab: ode45, ode23, ode113, ode115s, ode23s;
cada una de las cuales pueden usarse si ciertas condiciones se satisfacen, las
rutinas pueden cambiar dependiendo de la versión de Matlab.
Ode45: Primera rutina que se debe intentar en un problema.es una rutina explicita
de un paso variable con orden 4-5 adecuada para problemas que n o son rígidos y
que requieren cierta precisión.
Ode23: Rutina explicita de runge-kutta de orden 2-3, usado cuando no se requiere
gran precisión. O cuando la función f (t, y) no es una función suave.
Ode113: Rutina de multifase de Adams-bashforth-mouton de ordenes 1-13
Conveniente para problemas que no son rígidos y cuando el nivel de precisión es
moderado o alto. Se usa también cuando las funciones f (t, y) provoca que el
tiempo de computo sea alto. No usar cuando la función f (t, y) no sea suave
(discontinuidades o derivadas de orden menor discontinuas.)
Ode23s: Es una rutina implícita de un tipo Rosebrock modificado de oreden2.
Adecuado para problemas rígidos donde una precisión mínima es adecuada o
cuando f (t, y) no es una función continua. Debemos recordar que un problema
rígido es un problema donde las constantes de tiempo subyacentes varían en
distintos órdenes de magnitud.
Ode15s: Es una rutina implícita de multifase que usa diferenciación numérica y su
orden varia en 1-5. Es conveniente para problemas rígidos que requieren de una
precisión moderada.es la rutina que se debe intentar cuando la rutina ode45 o no
funciona o su eficiencia deja mucho que desear.
Una función es una expresión que toma uno o más valores llamados
argumentos y produce un valor que se llama resultado.
Una función puede devolver un resultado que puede ser una cadena, un número o
un valor de tipo lógico (verdadero o falso), esto hace que en los lenguajes de
programación, debamos especificar de qué tipo es una función. Una función será
de tipo numérica cuando devuelva un número y será de tipo alfanumérica o string
cuando devuelva una cadena, la llamada a una función será siempre:
Variable nombre_función (parámetros)
Procedimientos.
Hemos visto que las funciones se utilizan para devolver como resultado un valor,
sin embargo, en ocasiones necesitaremos devolver más de un resultado o también
ejecutar las mismas líneas de código varias veces en un algoritmo (como por
ejemplo una ordenación, etc.)
En estas situaciones la función no es apropiada y se utilizarán los procedimientos
(también llamados subrutinas).
Notemos que el objetivo de los procedimientos es ayudar en la modularidad del
programa y evitar la repetición de instrucciones ya que estas se pueden escribir en
un procedimiento solo una vez y llamar al procedimiento cuantas veces sea
necesario.
4.4 Paso de argumentos (Programa de ejemplo)
En ciencias de la computación, un parámetro es una variable utilizada para recibir
valores de entrada en una rutina, subrutina o método. Dichos valores, que serán
enviados desde la rutina invocante, son llamados argumentos. La subrutina usa los
valores asignados a sus parámetros para alterar su comportamiento en tiempo de
ejecución. La mayor parte de los lenguajes de programación pueden definir
subrutinas que aceptan cero o más argumentos.
Existen formas de pasar un argumento a una función (subrutina) o procedimiento:
por valor, por referencia, por resultado, por valor-resultado y por nombre.
Paso por valor-El paso de parámetros por valor consiste en copiar el contenido de
la variable que queremos pasar en otra dentro del ámbito local de la subrutina,
consiste pues en copiar el contenido de la memoria del argumento que se quiere
pasar a otra dirección de memoria, correspondiente al argumento dentro del ámbito
de dicha subrutina. Se tendrán dos valores duplicados e independientes, con lo que
la modificación de uno no afecta al otro.
Paso por referencia-El paso de parámetros por referencia consiste en proporcionar
a la subrutina a la que se le quiere pasar el argumento la dirección de memoria del
dato. En este caso se tiene un único valor referenciado (o apuntado) desde dos
puntos diferentes, el programa principal y la subrutina a la que se le pasa el
argumento, por lo que cualquier acción sobre el parámetro se realiza sobre la misma
posición de memoria.
El paso de la dirección de memoria debe ser transparente al programador. Los
lenguajes que permiten tratar con direcciones de memoria, como C, permiten
simular el paso de argumentos por referencia, sin disponer realmente de esta
característica.
Paso por valor resultado-Es un tipo poco usado en los lenguajes de programación
actuales. Se basa en que dentro de la función se trabaja como si los argumentos
hubieran sido pasados por valor pero al acabar la función los valores que tengan los
argumentos serán copiados a las variables que pertenecían.
Este tipo puede ser simulado en cualquier lenguaje que permita el paso de valores
por referencia de la siguiente forma:
void EjemploValorRes(int& a1, int& a2, int& a3) {
int aux1 = a1, aux2 = a2, aux3 = a3;
// código trabajando con aux1, aux2 y aux3
a1 = aux1; a2 = aux2; a3 = aux3; // (Dependiendo del compilador la copia se
realiza en un sentido o en el otro)
Tal y como indica el ejemplo de simulación de valor-resultado, el orden de copia
depende del compilador, lo que implica que la misma función pueda dar resultados
diferentes según el compilador usado.
O podemos tomar otro ejemplo:

1 int addition(int a, int b)


2 {
3 return (a + b);
4 }
5 int main()
6 {
7 int x = 10;
8 int y = 20;
9 int z;
10
11 z = addition(x, y);
12 }

Los parámetros a y b declarados en la línea 1 son válidos únicamente en la


expresión de la línea 3. Las variables x, y y z, por su lado, son válidas en el cuerpo
de la función main (líneas 7 a 11).
El ámbito de las variables x, y y z (ámbito llamador), y el de las
variables a y b (ámbito llamado) son totalmente diferentes. El ámbito llamador
desaparece temporalmente cuando se invoca la función desde la línea 11. Durante
esa ejecución, el ámbito llamado es el visible. Al terminar la función, el ámbito
llamado desaparece y se recupera el ámbito llamador.
La comunicación entre estos dos ámbitos se realiza en la línea 11. Antes de
comenzar la ejecución de la función, los valores de las variables del ámbito llamador
son copiados sobre las variables del ámbito llamado.
Cuando termina la ejecución de la función, la expresión de la llamada en la línea 11
se reemplaza por el valor devuelto. En la siguiente figura se ilustra este
procedimiento para el ejemplo anterior.

El paso de parámetros y la devolución de resultado en las funciones C se realiza por


valor, es decir, copiando los valores entre los dos ámbitos.
Las variables locales de la función (incluidos los parámetros) desaparecen al
término de la función, por lo que cualquier valor que se quiera guardar, debe ser
devuelto como resultado.
UNIDAD 5 “USO DE BIBLIOTECAS O LIBRERÍAS DEL LENGUAJE”

 5.1. Funciones matemática.

MATLAB proporciona una gran cantidad de funciones matemáticas elementales


estándar, incluidas abs, sqrt, exp y sin. Tomar la raíz cuadrada o el logaritmo de
un número negativo no es un error; el resultado complejo apropiado se produce
automáticamente. MATLAB también ofrece muchas funciones matemáticas más
avanzadas, como las funciones de Bessel y la función gamma. La mayoría de
estas funciones aceptan argumentos complejos. Para obtener una lista de las
funciones matemáticas elementales, escriba

help elfun

Para obtener una lista de funciones matemáticas y matriciales más avanzadas,


escriba

help specfun

help elmat

Algunas de las funciones, como sqrt y sin, están integradas. Las funciones
integradas forman parte del núcleo de MATLAB y por eso son muy eficientes, pero
los detalles computacionales no son accesibles. Otras funciones están
implementadas en el lenguaje de programación de MATLAB; por lo tanto, sus
detalles computacionales sí son accesibles.

Existen algunas diferencias entre las funciones integradas y las demás funciones.
Por ejemplo, en el caso de las funciones integradas, no se puede ver el código. En
otras funciones, el código es visible, e incluso se puede modificar.

Existen varias funciones especiales que proporcionan valores de constantes útiles.


 5.2. Funciones de números aleatorios.

MATLAB es un programa técnico que puede realizar aritmética, cálculo, cálculos,


álgebra lineal, figura de trazado, procesamiento de señales y cientos de otras
aplicaciones. Su versatilidad proviene de sus miles de funciones preprogramadas
incorporadas. Una de esas funciones es "randn". Ordénale a la función el número
de filas y columnas de datos que desees y crea una matriz de valores aleatorios
donde los valores caen en una distribución "normal" o en "curva de campana"
alrededor de una media. No puedes dar a "randn" los límites mínimo y máximo
directamente, pero lo que puedes hacer en su lugar es estirar su salida en
cualquier rango que necesites.

Ejemplo:

Genere una matriz de 5 por 5 de números aleatorios distribuidos uniformemente


entre 0 y 1.

r = rand(5)

r = 5×5

0.8147 0.0975 0.1576 0.1419 0.6557


0.9058 0.2785 0.9706 0.4218 0.0357
0.1270 0.5469 0.9572 0.9157 0.8491
0.9134 0.9575 0.4854 0.7922 0.9340
0.6324 0.9649 0.8003 0.9595 0.6787
 5.3. Funciones gráficas.

Gráficas de líneas

Para crear gráficas de líneas bidimensionales, use la función plot. Por ejemplo,
grafique el valor de la función seno de 0 a 2π

x = 0:pi/100:2*pi;
y = sin(x);
plot(x,y)

Gráficas tridimensionales

Comúnmente, las gráficas tridimensionales muestran una superficie definida por


una función de dos variables, z = f(x,y).

Para evaluar z, primero cree un conjunto de puntos (x,y) en el dominio de la


función usando meshgrid.

[X,Y] = meshgrid(-2:.2:2);
Z = X .* exp(-X.^2 - Y.^2);
Luego, cree una gráfica de superficie.

surf(X,Y,Z)
Las funciones surf y mesh muestran superficies en tres dimensiones. surf muestra
las líneas de conexión y las caras de la superficie en color. mesh produce
superficies de malla que colorean solo las líneas que conectan los puntos de
definición.

Subdiagramas

La función subplot permite visualizar varias gráficas en distintas subregiones de la


misma ventana.

Las primeras dos entradas de subplot indican la cantidad de diagramas en cada


fila y columna. La tercera entrada especifica qué diagrama está activo. Por
ejemplo, cree cuatro diagramas en una cuadrícula de 2 por 2 dentro de una
ventana de una figura.

t = 0:pi/10:2*pi;
[X,Y,Z] = cylinder(4*cos(t));
subplot(2,2,1); mesh(X); title('X');
subplot(2,2,2); mesh(Y); title('Y');
subplot(2,2,3); mesh(Z); title('Z');
subplot(2,2,4); mesh(X,Y,Z); title('X,Y,Z');
 5.4. Funciones definidas por el programador.

Las funciones que se han utilizado ahora son funciones que el lenguaje de
programación ha predefinido en sus bibliotecas o librería. Sin embargo, también es
posible que el programador defina y utilice sus propias funciones.

Definición de funciones:

Las funciones definidas por el programador se escriben “fuera” de la función main.


Si se recuerda, uno de los objetivos del uso de las funciones es la
descomposición de problemas complejos y el trabajo en grupo. El siguiente es un
ejemplo de una definición de una función. Se utiliza antes de presentar la sintaxis
formal de modo que nos podamos familiarizar con la terminología.

Uso de funciones definidas por el programador

Cuando se utilizan funciones predefinidas es necesario incluir a la biblioteca o


librería que contiene su definición. Por ejemplo, si se usa la función pow, es
necesario incluir math.h
Algo similar es necesario para funciones definidas por el programador. Ese algo es
que, después de las directivas include pero antes de la función main, es necesario
escribir el prototipo de la función. El prototipo de la función no es más que el
encabezado muestra cómo se podría utilizar en un programa una función definida
por el programador.

BIBLIOGRFÍA:

https://la.mathworks.com/help/matlab/learn_matlab/expressions.html

https://techlandia.com/utilizar-randn-matlab-generar-numeros-aleatorios-limites-
como_201471/

https://la.mathworks.com/help/matlab/learn_matlab/plots.html

https://la.mathworks.com/help/matlab/ref/rand.html

Você também pode gostar