Diferencia entre revisiones de «PrInf12: Bucles anidados»

De MateWiki
Saltar a: navegación, buscar
(Comandos que se aprenderán en esta práctica)
(Contenido de la práctica)
Línea 24: Línea 24:
  
 
== Contenido de la práctica ==
 
== Contenido de la práctica ==
 +
En esta práctica vamos a generar una matriz aleatoria y sumar todos los elementos de la matriz. Como la matriz tiene dos dimensiones, filas y columnas, será necesario usar dos bucles anidados para recuperar todos los elementos de la matriz.
 +
 +
Vamos a ver primero una prueba para ver cómo funcionan dos bucles anidados.
 +
{{ matlab | codigo =
 +
nFilas = 5; % Número de filas
 +
nColumnas = 5; % Número de columnas
 +
 +
for f=1:nFilas
 +
for c=1:nColumnas
 +
  fprintf('Fila: %d  Columna: %d\n', f, c);
 +
end
 +
end}}
 +
¿En qué orden se recorren las filas y las columnas? Como podemos comprobar, se recuperan los elementos en orden de filas. Es decir, primero los elementos de la primera fila, luego los de la segunda fila, etc.
 +
 +
¿Qué ocurre ahora si cambiamos el orden de los bucles?
 +
{{ matlab | codigo =
 +
nFilas = 5; % Número de filas
 +
nColumnas = 5; % Número de columnas
 +
 +
for c=1:nColumnas
 +
for f=1:nFilas
 +
  fprintf('Fila: %d  Columna: %d\n', f, c);
 +
end
 +
end}}
 +
Al cambiar el orden, ahora se recuperan los elementos en orden de columnas. El intérprete del lenguaje M siempre guarda en la memoria los elementos de las matrices en orden de columnas. Por este motivo es más eficiente recuperarlos también en el mismo orden.
  
 
== Ejercicio post-práctica ==
 
== Ejercicio post-práctica ==
  
 
[[Categoría:Prácticas de Informática]]
 
[[Categoría:Prácticas de Informática]]

Revisión del 20:21 1 ago 2013

Práctica de Informática
Bucles con anidados
Práctica anterior Siguiente práctica
Este artículo es un guión de prácticas de Informática


Warning.png Este artículo está en versión beta. El autor de este artículo no lo ha terminado todavía, por favor no lo edites hasta que elimine este mensaje.


En métodos numéricos es muy habitual trabajar con matrices. En esta práctica vamos a ver una técnica para trabajar con todos los elementos de una matriz, usando dos bucles anidados. Esta técnica es muy habitual en muchos programas. En general, las operaciones que se realicen con matrices es mejor intentar hacerlas de manera vectorizada, es decir, con comandos directamente y sin usar bucles. En algunos casos, como el que veremos en esta práctica, el código equivalente vectorizado es sencillo de obtener. Pero no existe una regla general, y muchas veces es muy complicado, incluso imposible, obtener un código vectorizado. En esos casos, tendremos que usar dos bucles anidados para trabajar con todos los elementos de una matriz.

1 Requisitos previos

Es importante haber realizado las dos prácticas sobre bucles con anterioridad a esta práctica:

2 Vídeos posteriores

Tras realizar esta práctica, el siguiente vídeo te ayudará a afianzar conocimientos:

3 Comandos que se aprenderán en esta práctica

sum prod

4 Contenido de la práctica

En esta práctica vamos a generar una matriz aleatoria y sumar todos los elementos de la matriz. Como la matriz tiene dos dimensiones, filas y columnas, será necesario usar dos bucles anidados para recuperar todos los elementos de la matriz.

Vamos a ver primero una prueba para ver cómo funcionan dos bucles anidados.

nFilas = 5; % Número de filas
nColumnas = 5; % Número de columnas

for f=1:nFilas
 for c=1:nColumnas
  fprintf('Fila: %d  Columna: %d\n', f, c);
 end
end

¿En qué orden se recorren las filas y las columnas? Como podemos comprobar, se recuperan los elementos en orden de filas. Es decir, primero los elementos de la primera fila, luego los de la segunda fila, etc.

¿Qué ocurre ahora si cambiamos el orden de los bucles?

nFilas = 5; % Número de filas
nColumnas = 5; % Número de columnas

for c=1:nColumnas
 for f=1:nFilas
  fprintf('Fila: %d  Columna: %d\n', f, c);
 end
end

Al cambiar el orden, ahora se recuperan los elementos en orden de columnas. El intérprete del lenguaje M siempre guarda en la memoria los elementos de las matrices en orden de columnas. Por este motivo es más eficiente recuperarlos también en el mismo orden.

5 Ejercicio post-práctica