Etiquetas

BIENVENIDOS. AQUI ENCONTRARAS DIFERENTES CONTENIDOS

Todos como hijo de la tierra estamos destinados a protegerla. valora cada espacio en el que habitats, siembra conciencia en los demas y haz parte del cambio.

PIENSA

"La tierra proporciona lo suficiente para satisfacer las necesidades de cada hombre, pero no la codicia de cada hombre"-Gandhi.

ACTUA

"Todo lo que le ocurra a la tierra, le ocurrirá a los hijos de la tierra" Jefe indio Seattle.

ACTUALIDAD AMBIENTAL

"Temas relacionados con las problematicas ambientales del dia a dia - Distintos puntos de vistas."

CONCIENCIA

"El que nos encontremos tan a gusto en plena naturaleza proviene de que ésta no tiene opinión sobre nosotros - Jordi Bigues."

INGENIERIA AMBIENTAL

"Teorias, modelacion ambiental, articulos, alternativas de desarrollo sostenible - Desde la academia."

ARTICULOS ALGORITMO Y PROGRAMACION

Escritos sobre temas de programacion basica.

MUSICA

"Remixes, mix, remix, loops, y todo tipo de genero - DJ EL ESPECTRO."

INNOVACION Y TECNOLOGIA

"ESCRITOS Y DOCUMENTALES CON TEMAS QUE NOS INTERESAN SOBRE EL FUTURO DEL MUNDO TECNOLOGICO - ENLACES DE INTERES."

TEMAS DE INTERES GENERAL

"Diferentes tematicas que despiertan curiosidades - ENLACES DE INTERES."

domingo, 31 de mayo de 2015

14. Aplicaciones con matrices

Continuando con matrices, la importancia de esta forma matemática de representar objeto, cosas, variables es muy amplio que si nos pusiéramos a profundizar sobre el tema tocaría escribir un sinnúmero de artículos  más, pero lo que haremos es dar una breve información. La teoría matriz es ampliamente utilizada en la informática. Las bibliotecas gráficas como por ejemplo OpenGL se valen de transformaciones espaciales y de las matrices para representar gráficos 3D a 2D que luego se traducen a imagen en los monitores. 

También son muy útiles para agilizar algunas operaciones algebraicas que de otro modo serían tediosas de resolver de otro modo. Por ejemplo, calcular el valor n-ésimo (para un n muy grande) de la serie de fibonacci es impráctico por algoritmos recursivos, e iterativos. Lo mejor es optar por algoritmos basados en el principio divide y vencerás y en las matrices. 

Los sistemas de detección de rostros no podrían concebirse sin el aporte de las transformaciones espaciales, vectoriales y de las matrices.  En la programación lineal se emplea ampliamente los sistemas de ecuaciones e inecuaciones. Estos, como ya he dicho se resuelven velozmente mediante matrices.

En los videos juegos y sistemas de simulación se emplean muchas veces para representar de forma abstracta ciertas estructuras de datos que puedan representar algunas entidades del dominio en estudio. Por ejemplo, se puede representar o concebir el mapa de un terreno de un juego como una matriz. Como es el caso del juego buscaminas que se ha dado como ejemplo en clases de algoritmo para la temática de matrices.

Pero como no vamos a profundizar en el tema, veremos como se utilizan técnicas en Matlab para resolver distintos tipos de matrices; como sabemos Matlab está fundamentalmente orientado al trabajo y el cálculo matricial. Veremos que las operaciones están definidas para el trabajo con este tipo de elementos.

Por ejemplo, el siguiente comando define una matriz A de dimensión (3x3):
>> A=[1 2 3; 4 5 6; 7 8 9]
La respuesta del programa es:
         1 2 3
         4 5 6
         7 8 9
Podemos hacer las operaciones, suma (+), resta (-), multiplicación (*), producto punto (.*), exponencial (^), división (/) (\),  inversa (‘).
inv(A) da como resultado la matriz inversa de A.
det(A) da como resultado el determinante de A.
trace(A) da como resultado la traza de A.
rank(A) da el rango de A
eye(n) forma la matriz identidad de  tamaño (nxn)
zeros(m,n) forma una matriz de ceros de tamaño (mxn)
zeros(n) forma una matriz de ceros de tamaño (nxn)
ones(n) forma una matriz de unos de tamaño (nxn)
ones(m,n) forma una matriz de unos de tamaño (mxn)
rand: este comando genera números pseudoaleatorios distribuidos uniformemente entre 0 y 1. Cada llamada proporciona un nuevo número.
rand(n): genera una matriz de números pseudoaleatorios entre 0 y 1, con distribución uniforme, de tamaño nxn.
rand(m,n):  igual que en el caso anterior pero de tamaño mxn.
El operador (:) es de gran importancia en Matlab. Puede decirse que es un operador que respeta el rango. Veamos su utilidad con algunos ejemplos:
>> x=1:10
x =
     1     2     3     4     5     6     7     8     9    10
>> x=[0:2:10]
x =     0     2     4     6     8    10
A continuación veamos cómo podemos mostrar los elementos de T en el orden en que es almacenado. En primer lugar, asignemos un valor a T:
T=rand(4,2,3);
En el vector columna correspondiente, los elementos vienen dados en el orden en que son almacenados por:
for p=1:3
    for n=1:2
        for m=1:4
            disp(T(m,n,p));
        end
    end
end

Para obtener ayuda acerca de estas funciones, en la ventana de MatLab escribe help sub2indo help ind2sub. Para obtener ayuda mas detallada, escribe doc sub2ind o doc ind2sub.
Ejemplo
Escriba una matriz que de los puntos intercalados dentro de la matriz como se realiza en una tabla de ajedrez.
Void imprime_ajedrez(matrix,m,n)
                Variables:
 I: entero
                INICIO
                               PARA i DESDE 1 HASTA m CON_VARIACION +1
                                               SI i % 2 <> 0
                                                               Imprime_fila_intercalada(matrix, i, 1, n)
                                               DE_LO_CONTRARIO
                                                               Imprime_fila_intercalada(matrix,i,2,n)
                                               Fin(SI)
                               Fin(PARA)
                FIN
Fin(imprime_ajedrez)
Void imprime_fila_intercalada(matriz, fila, inicio, fin)
                Variables:
j: entero
                INICIO
                               PARA j DESDE inicio HASTA fin CON_VARIACION +2
                                               ESCRIBA(matriz[fila][j]
                               Fin(PARA)
                FIN
Fin(imprime_fila_intercalada)

Proceso en Matlab
function imprime_ajedrez(matriz,m,n)
                for i = 1:1:m
                               if mod(i,2) ~= 0
                                               imprima_fila_intercalada(matriz, i, 1, n);
        else
                                               imprima_fila_intercalada(matriz, i, 2, n);
        end
    end
end

Chequéate el siguiente  vídeo para que tenga una idea mas clara del trabajo con variables de tipo matricial en matlab.


POR CAMILO BORJA © 2015 ALL RIGHTS RESERVED. 

Fuentes consultadas.
Manipulación de matrices en Matlab.2015. kioskea.com. http://es.kioskea.net/faq/2991-manipulacion-basica-de-matrices-en-matlab.
Mnp@ofimatica.net. 2015. Manipulación básica de matrices en MatLabhttp://es.kioskea.net/faq/matlab-141#2991


jueves, 28 de mayo de 2015

13. Matrices

Como ya sea definido los arreglos es decir los vectores, en este escrito se enfatizara en las matrices que son unos de los temas más importantes en la programación, para una definición precisa en la programación  las matrices son un conjunto de variables, también llamado bloque, del mismo tipo que el considerado en matemática, y cuyo acceso se realiza por índices o líneas.

Una matriz puede almacenar distintas variables del mismo tipo en una estructura de datos de matriz. Para declarar una matriz  hay que especificar el tipo de sus elementos. Su manejo es igual que los vectores anteriormente tratados, los valores de las variables se llaman elementos, de la misma forma que en los arreglos y sus índices están compuestos por dos caracteres que indican su posición. Para poder acceder a un elemento se debe poner su posición compuesta de los dos índices.

Por ejemplo para la matriz A y la posición en la fila 1 y columna 2 se debe poner A[1][2], denotándose que el primer índice indica la posición de la fila y el segundo la posición de la columna.

Para acceder a todos los componentes de una matriz solo basta con utilizar una variable que sirva como índice sobre las filas cuyo valor cambie entre 1 y el número total de filas, y usar una variable que sirva como índice de las comunas, cuyo valor cambie entre 1 el número de columnas. Para esto nos valemos dos ciclos para anidados
5 3 1
4 4 2
3 5 5
for fila=1:3
for columna =1:3
notas(fila, columna)=input(‘Ingrese dato: ’);
end
end

Ejemplo
La universidad de Antioquia desea controlar los resultados de los alumnos en las distintas asignaturas de la facultad de Ingeniería. El programa debe ingresar las calificaciones de los alumnos y visualizar en pantalla la media de notas por alumno y la media de notas por asignatura. Las asignaturas están codificadas de 1 a 6 y hay 30 alumnos.
Solución: debemos trabajar con una tabla o matriz o arreglo bidimensional.
Suponga que quiero hacer la siguiente operación entra las matrices a y b. Cabe aclarar que las matrices tienen que ser de las mismas dimensiones, para este ejemplo se definieron dos matrices de 2x2. 
Código en Matlab
>> a=[2 .5;1 3];b=[2 1;.5 3]; %Declaración de las matrices.
>> a+b

ans =

    4.0000    1.5000
    1.5000    6.0000

Para una mejor profundización del tema chequéate el siguiente video.


POR CAMILO BORJA © 2015 ALL RIGHTS RESERVED. 


Fuentes consultadas.


[1] Fuente https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEidV44LSk3N3I6czUpLbygOdAy9PFwURnf6QcGgX7mFUzwu5kl6js9SimGQpt-R6-ODkgOs8H9WlzPn06tURhFdrLmvJ7eEvZQibGtBk4UMy-GI3aJCzY5uEkDpaC2cyABrNSAAo8KGeb4/s1600/matriz.png

matrices.documentopd. fhttp://www2.udearroba.co/pluginfile.php/89661/mod_resource/content/0/Modulo_14/las_matrices.pdf

miércoles, 20 de mayo de 2015

12. Aplicaciones con vectores

En el escrito anterior habíamos definido que es un vector que es analógicamente es un arreglo en programación, se continuara con otros conceptos de vectores, así como la definición de una bandera y su función en una estructura, además se desarrollara algunas aplicaciones de problemas en que se podrá evidenciar el uso de vectores como la mejor alternativa para el desarrollo de los programas.

Lo habitual es que un vector tenga una cantidad fija de memoria asignada, aunque dependiendo del tipo de vector y del lenguaje de programación un vector podría tener una cantidad variable de datos en el mismo programa. En este caso, se les denomina vectores dinámicos, en oposición, a los vectores con una cantidad fija de memoria asignada se los denomina vectores estáticos. El uso de vectores dinámicos requiere realizar una apropiada gestión de memoria dinámica. Un uso incorrecto de los vectores dinámicos, o mejor dicho, una mala gestión de la memoria dinámica, puede conducir a una fuga de memoria. Al utilizar vectores dinámicos siempre habrá que liberar la memoria utilizada cuando ésta ya no se vaya a seguir utilizando.

Habiendo definido los vectores de una forma general, aunque existen libros que definen muchos tipos de vectores, hasta el momento nos conformaremos con los conceptos que hemos visto, ya que en todos los artículos hemos hablado de programación en una forma básica y en paralelo con el lenguaje de programación de MATLAB.

Ahora bien. Cuando se diseñan algoritmos que incluyen estructuras de control repetitivas, existen ciertas variables que cumplen una función específica en cada iteración del ciclo; las más comunes son: las variables contadoras, las variables acumuladoras y las variables bandera.

¿Pero que es una Variables bandera?
¡Pues fácil! Una variable bandera es utilizada dentro de la condición del ciclo, ya sea sin negar, negada o conectada con una expresión booleana, ¿Cómo así booleana?, ¡pues fácil! En datos lógicos que puede representar valores de lógica binaria.  Para determinar cuándo un ciclo se sigue iterando o cuando no. De esta manera una variable bandera debe ser de tipo booleano.

Ejemplo. Realizar un programa que lea una serie de números reales y los sume. El programa debe preguntar al usuario cuando desea ingresar un siguiente dato y si el usuario responde que no desea ingresar más datos el programa debe confirmar la respuesta. Si el usuario desea continuar ingresando datos se debe seguir solicitando datos y si el usuario confirma su deseo de salir, el programa debe mostrar la suma de los datos leídos y terminar.

Especificación:
Donde, datos es la colección de n números reales que el usuario ingresa hasta que decide no continuar ingresando datos y sumaÎ R es la suma de dichos números.

Algoritmo Solución

bandera: booleano
suma: real
dato: real
c: caracter
bandera := verdadero
suma := 0.0
mientras (bandera) hacer
escriba( “Ingrese un dato:” )
leer (dato)
suma := suma + dato
escriba( “Desea continuar ingresando datos (S/N):” )
lea( c )
si (c = ‘N’ | c = ‘n’) entonces
escriba( “Realmente desea salir (S/N):” )
lea( c )
si (c = ‘S’ | c = ‘s’) entonces
bandera := falso
Fin (si)
Fin (si)
Fin_mientras
escriba( “La suma es:”)
escriba( suma )

Vale la pena recordar que una variable del tipo booleano toma valores de verdad y por lo tanto, por sí sola es una expresión lógica. Adicionalmente, la expresión lógica bandera = verdadero es equivalente a la expresión lógica bandera.

A continuación vas a ver una serie de aplicaciones donde se evidencia la utilización de vectores para dar solución a cada problema.

Ejercicio 1
Escriba un algoritmo que muestre por pantalla el contenido de un vector. Los valores de las componentes de vector se introducen por teclado (hasta que introduzca el numero 0). 
 Algoritmo
Variables
  Entero: i, num
  Vector Entero: a
Inicio
  i = 0
  Escriba(“Introduzca un valor de una componente del vector o 0
para finalizar”)
  Lea (num)
  Mientras (num <> 0) hacer ¡Relleno el vector con los valores
leídos desde teclado
  a[i] = num
  i = i+1
  Fin (Mientras)
  i = i - 1
  Mientras (i >= 0) hacer
  Escriba a[i]
  i = i-1
  Fin (Mientras)
Fin

Ejercicio 2
Considere una encriptación de mensajes muy antigua inventada por Isaac newton, la cual se basa en que a cada letra de un mensaje se le asocia un número (el orden en el abecedario), luego se suma al número de  cada letra otro número la clave y el resultado es una nueva letra, mira en el abecedario. Por ejemplo, el mensaje “cruzad el rubicon”, se transformaría en “dsvabeUfmUsvcjdpo” si le sumo el número clave 1 a  cada letra (ya que la primera letra del mensaje cifrado, la ‘d’, es la que va tras la ‘c’, etc.). Note que la ch, ll, ñ no existen, y que después de la ‘z’ va la ‘a’. Además los espacios en blanco se convierten en letras U  si la clave es 1, en V si es 2, etc.  Para ello, elabore en pseudocódigo un algoritmo que a partir de un texto (cadena de caracteres leída por  teclado) imprima texto cifrado con la clave entera, también leída desde teclado. Pista: Dentro del bucle que debe recorrer todas las letras del texto, use la siguiente fórmula para encriptar: 
Texto_encriptado[i] =(texto_original[i]-'a'+clave)%26+'a';  /*26 es el número de letras del alfabeto ASCII*/
Algoritmo Encriptación
Constante
 Entero: LetrasASCII, N ¡N es la longitud del texto  
Variable
 Entero: i, clave
 Vector Caracter: texto_encriptado, texto_original
Inicio
 LetrasASCII = 26
 Escriba(“Leer el texto a encriptar:”)
 Para i<-0 hasta N-1 hacer
  Lee texto_original[i]
 Fin (Para)
 Para i<-0 hasta N-1 hacer
  texto_encriptado[i] =(texto_original[i]-'a'+clave)%26+'a')
 Fin (Para )
 Escriba( “El texto encriptado es:”)
 Para i<-0 hasta N-1 hacer
  Escriba( texto_encriptado[i] )
 Fin (Para)
Fin

POR CAMILO BORJA © 2015 ALL RIGHTS RESERVED. 

Fuentes consultadas.

INTRODUCCIÓN A LA ALGORITMICA (FUNDAMENTOS DE INFORMÁTICA). (Curso 03-04). 2011.E.U.P. Universidad de Sevilla
Tipos de variables .Conceptos.2014. cursos.ingenieria.

Alegsa. Definición bandera algoritmos.informatica.2015

viernes, 8 de mayo de 2015

11.Vectores-Arreglos

Hasta el momento hemos visto una serie de estructuras de control, por lo tanto vamos a partir de un concepto que realmente  implícitamente se ha trabajado y continuaremos el enfoque a los vectores es decir empezaremos a aplicar las distintas estructuras a estos algoritmos. Cuando se procesa un algoritmo con muchos datos y le pedimos a este una información que se ha escrito hace un tiempo y queremos que este  lleve un orden establecido internamente, pues esto se puede lograr con las estructuras de arreglo, una estructura de este tipo es una manera de almacenar información en un computador de manera que puedan ser usados de una manera eficiente. Una selección cuidadosa de la estructura permitirá usar un algoritmo más eficiente. Una estructura bien diseñada permitirá efectuar una variedad de operaciones, usando un mínimo de tiempo de ejecución y espacio de memoria. Con una definición más concisa de la estructura de arreglo es el área de memoria con una variedad de posiciones y cada posiciones tiene un valor asociado (numero). El arreglo de una dimensión se conoce como vector. Realmente los arreglos pueden ser de muchas dimensiones, pero también de diferentes tipos así como se pueden hacer diferentes operaciones con ellas, pero por ahora nos quedaremos con lo que hemos definido.


En la siguiente figura se muestra un arreglo de enteros con 10 elementos.







Como nuestra estructura va estar contenida por vectores de diversas dimensiones, entonces definiremos que es un vector en algoritmo, aun básicamente este cumple las misma funciones matemáticas que se pueden hacer en operaciones de geometría vectorial y álgebra lineal, pero en la programación se tiene una definición propia, es un arreglo, generalmente asociados a los arreglos unidimensionales; Es una zona de almacenamiento contiguo, que contiene una serie de elementos del mismo tipo y se distinguen entre sí por un índice. En palabras más simples los vectores son arreglos.

Para acceder a todos los componentes de un vector solo basta con utilizar una variable que sirva como índice cuyo valor cambie entre 1 y el número total de elementos en el vector, para esto nos valemos de un simple ciclo PARA
for i=1:4
disp( notas(i) )
end

A continuación se muestran algunos ejemplos de algoritmos con vectores simples. Realice un programa que genere un vector u, constituido por los números enteros pares del vector v, donde v=1:1:50. Utilice la estructura for-end
v=1:1:50;
for i=2:2:50
 u(i/2)=v(i);
end
disp('Los números pares son:')
disp(u').

Desarrolle un programa que sume los números almacenados en un vector hasta que encuentre el número cero. Por ejemplo, para el vector v=[1 4 3 0 5 1] el resultado será 1+4+3=8. Utilice la estructura while-end
v=input('Ingrese los elementos del vector: ');
25
i=1;
suma=0;
n=length(v);
while v(i)~=0
 suma=suma+v(i);
 i=i+1;
 if i==n+1;
 break
 end
end
Suma

Aclaración cuando se tiene subprogramas como tipo void de funciones  de debe colocar function- para que matlab lo lea como un subprograma, además, functions s=algo-operación(vector,n) donde (s=) le esta indicando a Matlab retorne(s).

si te interesa profundizar un poco mas pásate por el siguiente vídeo.


 Camilo Borja © 2015 All rights reserved.

Fuentes consultadas:

-Roberto F. Rueda. algoritmo Modulo 27. Algoritmia Básica.2014. http://zona.udearroba.co/video/810




lunes, 4 de mayo de 2015

10.Subprogramas

Continuando con los objetivos de seguimiento de los anteriores escritos, se sigue con nuevos conceptos que derivan de los anteriores tipo de algoritmos que se han dado a conocer hasta el momento, si bien haciendo una analogía en la vida cotidiana hemos demostrado que los problemas  complejos se facilita considerablemente si se dividen en problemas más pequeños (subproblemas). La solución de estos subproblemas se realiza con sub algoritmos. El uso de subalgoritmos permite al programador desarrollar programas de problemas complejos utilizando un método decente introducido en los capítulos anteriores.

En una definición más clara los subalgoritmos son unidades de programas o módulos que están diseñados para ejecutar alguna tarea específica. Estas funciones y procedimientos se escriben solamente de una vez, pero pueden ser referenciados en diferentes puntos de un programa, de modo que se pueda evitar la duplicación innecesaria del código. Las unidades de programa en estilo de programación modular son independientes; El programador puede escribir cada módulo y verificarlo sin preocuparse de los detalles de otros módulos. Esto facilita considerablemente la localización de un error cuando se produce. Los programadores más desarrollados de este modo son normalmente también más fáciles de comprender, ya que la estructura de cada unidad de programa puede ser estudiada independientemente.

El objetivo del uso de subalgoritmos es modularizar un algoritmo, es decir dividir al problema en subproblemas, resolver el problema con un algoritmo y a los subproblemas con subalgoritmos. De esta forma cuando resuelvo un problema me abstraigo de los pequeños detalles que no hacen en sí al problema llamando a acciones (Subalgoritmos) que una vez resuelto el problema principal tendré que solucionar.
La ventaja más importante de modularizar es que los subprogramas se pueden reutilizar en el mismo algoritmo o en otros.
La clasificación de los sub programas se definen las funciones y los void.

Funciones: Es una que toma una o más valores llamados argumentos y produce un valor llamado resultado.

Ejemplo:
F(x) =x/i+x*x
Para evaluar f debemos darle un valor a x.

Las funciones requieren de una serie de pasos que la definen. Consta de un inicio, seguido de la palabra (función) y del nombre del argumento de la función después ira el cuerpo que es una serie de acciones cuya ejecución hará que se asigne un valor al nombre de la función, esto determina el resultado que ha de devolver al programa.
Ejemplo:
F(x,y)=x/1+x*x
Se define como :
Real función f(x)
Inicio
Devolver (x/(1+x*x))
Fin (función).

Void: son los subprogramas que solo ejecutan tareas y no devuelven ningún valor
presentación
Aquí puedes ver otro ejemplo de subprogrmas.

Subalgoritmo Leer_y_Validar
               Repetir
                              Escribir(‘Ingrese un número entre 1 y 10’)
                              Leer(Numero)
               Hasta   (Numero<=10)  ^ (Numero>=1)
Fin Subalgoritmo Leer_y_Validar
 

 Camilo Borja © 2015 All rights reserved.

Fuentes consultadas
Angel. F. rey. Subprogramas. Presentación. Procesador power point(pdf)

Subprogramas. ¿Qué es un subprograma? carlospes.com.2014
http://www.carlospes.com/curso_de_algoritmos/12_02_subprogramas.php