Módulo 6ALGORITMOS Y ESTRUCTURA DE DATOS <br />PROFESOR:SIRACUSA EMILIANO <br />                    MARTÍN<br />Página Web...
Procedimientos y funciones<br />Una estrategia para la resolución de problemas complejos con computadoras es la división o...
Puede recibir cero o mas valores de !a unidad que lo activa y devolver cero o más valores a dicho programa activador. La t...
Las declaraciones de ambos subprogramas constan de tres partes:<br />El encabezamiento que proporciona el nombre del mismo...
Ejemplos de encabezamiento:<br />Procedure PI (a,b: integer ; var e:real);<br />Palabra reservada	<br />		Identificador de...
Ejemplos de encabezamiento:<br />Function Fl (a,b:integer):real;<br />Palabra reservada <br />	Identificador de función<br...
En el cuerpo de la función se nene la obligación de asignar un valor al identificador de la función, al menos una vez ya q...
Invocación de un procedimiento<br />Un procedimiento se invoca dentro del programa o de un subprograma directamente por su...
Invocación de un procedimiento<br />Procedure P1 (a ;b: integer; var e: real);<br />Pl( x,y,z)<br />Invocación del procedi...
Invocación da un procedimiento<br />Declaración<br />Procedure Intersección (a,b,c,d,e.f: real; var x,y: real);	<br />Proc...
Invocación de una función<br />Una función se invoca dentro del programa o de un subprograma directamente por su nombre re...
Invocación de una función<br />Function F1 (a, h: integer): real;<br />			…* F1 (a, h)/3…<br />Invocación de la función F1...
Invocación de una función <br />Declaración.<br />Function Racional(a, b: integer):real;<br />Function EsBisiesto(año: int...
Ejemplo:	<br />Program P;	<br />Procedure Q;	<br />	begin<br />		writeln (‘este es un procedimiento')	<br />	end; {Q}  <br...
El procedimiento Q está declarado en el programa P. Se puede representar la declaración de procedimientos con un diagrama ...
Si se tuviera:	<br />Program P;  <br />procedureQ;<br />	begin<br />	End; { Q}<br />procedureR; <br />begin<br />	end; {R}...
Program P;<br />Var <br />y: integer;<br />Procedure Q;<br />begin<br /> 	   Writeln('Dentro de Q se puede hacer referenci...
Program P;<br />Var <br />y: integer;<br />Procedure Q;<br />begin<br /> 	   Writeln( 'el valor de y en Q es:', y);<br /> ...
Program P;<br />Var <br />y: integer;<br />Procedure Q;<br />begin<br /> 	   Writeln('Dentro de Q se puede hacer referenci...
Tal como está declarada la variable y es local al programa P y global para los procedimientos Q y R.<br />Identificador lo...
La variable ‘y’ y los procedimientos Q y R son locales a P.<br />Los procedimientos Q y R no tienen identificadores locale...
Traza en P<br />P	  P	        P<br />	   Q<br />Program P;<br /> var <br /> y: integer; <br />Procedure Q; <br />         ...
Traza en P<br />P	  P	        P<br />	   Q<br />Program P;<br /> var <br /> y: integer; <br />Procedure Q; <br />         ...
Traza en P<br />P	  P	        P<br />	   Q<br />Program P;<br /> var <br /> y: integer; <br />Procedure Q; <br />         ...
Parámetros:<br />La transferencia de valores desde y hacia el procedimientos o función se realiza por medio de parámetros....
Una lista de identificadores con sus tipos de datos es el mecanismo para transferir valores desde el subprograma que invoc...
En la sentencia de invocación del procedimiento se indica la lista de parámetros actuales, reales o efectivos que se corre...
En la invocación de una función se indica la lista de parámetros actuales, reales o efectivos que se corresponderán en núm...
Hay cuatro tipos de parámetros formales en Pascal:<br />por valor<br />por variable<br />funciones<br />procedimientos<br ...
Veremos dos tipos de pasaje de parámetros que presenta Pascal <br />Por valor<br />Por referencia<br />En la lista de pará...
Ejemplo:<br />En la invocación del procedimiento el parámetro efectivo se liga al formal con<br />pasaje por referencia.<b...
Los parámetros formales por referencia se pueden comparar con los datos de entrada salida de un algoritmo, pero no son igu...
Parámetros por valor<br />Se usa el parámetro por valor cuando el único rol del parámetro es ingresar un valor al procedim...
Program Area_cuadrado; <br />var lado, area: real; <br />Procedure imprimir( a,b: real); <br />begin<br />	write(‘el área ...
Traza del programa Area_cuadrado<br />el área del cuadrado de lado 4 es: 16<br />
Pautas a tener en cuenta para utilizar parámetros:<br />Si la información que se pasa al procedimiento no tiene que ser de...
Variables globales vs parámetros<br />Las variables globales deben evitarse para intercambiar información entre unidades d...
Bibliografía<br /><ul><li>López García, Guillermo (ed.) (2005).  El ecosistema digital: Modelos de comunicación, nuevos me...
Próxima SlideShare
Cargando en…5
×

Módulo 6 (sin estilo)

742 visualizaciones

Publicado el

0 comentarios
0 recomendaciones
Estadísticas
Notas
  • Sé el primero en comentar

  • Sé el primero en recomendar esto

Sin descargas
Visualizaciones
Visualizaciones totales
742
En SlideShare
0
De insertados
0
Número de insertados
13
Acciones
Compartido
0
Descargas
16
Comentarios
0
Recomendaciones
0
Insertados 0
No insertados

No hay notas en la diapositiva.

Módulo 6 (sin estilo)

  1. 1. Módulo 6ALGORITMOS Y ESTRUCTURA DE DATOS <br />PROFESOR:SIRACUSA EMILIANO <br /> MARTÍN<br />Página Web: www.esiracusa.jimdo.com<br />
  2. 2. Procedimientos y funciones<br />Una estrategia para la resolución de problemas complejos con computadoras es la división o descomposición del problema en otros problemas más pequeños o subproblemas. Estos subproblemas se implementan mediante unidades o subprogramas. Generalmente un proyecto de programación se compone de un programa principal y un conjunto de subprogramas. Los subprograma; en Pascal se clasifican en procedimientos y funciones.<br />Procedimiento: es un subprograma que realiza una tarea específica. Es una unidad de programa independiente. Está compuesto por un conjunto de sentencias a las que se le asigna un nombre. Permite la transferencia de valores entre la unidad que lo activa y el subprograma propiamente dicho.<br />
  3. 3. Puede recibir cero o mas valores de !a unidad que lo activa y devolver cero o más valores a dicho programa activador. La tarca asignada al procedimiento se ejecuta siempre que se encuentre el nombre del procedimiento.<br />Función: unidad de programa independiente que devuelve al menos un valor a la unidad llamadora. Puede recibir cero o más valores de la unidad que lo activa. La tarea asignada a la función se ejecuta siempre que se encuentre el nombre de la función.<br />Declaración de un procedimiento o una función:<br />Todo procedimiento o función se declara dentro de la sección de declaraciones del programa principal o de un subprograma.<br />
  4. 4. Las declaraciones de ambos subprogramas constan de tres partes:<br />El encabezamiento que proporciona el nombre del mismo y en caso de existir, una lista de parámetros. Las funciones tienen que indicar el tipo de dato cuyo valor asume la función cuando se ejecuta.<br />Una sección de declaraciones similar a la de los programas<br />Una sección ejecutable: similar a la de los programas (con alguna variante en las funciones).<br />
  5. 5. Ejemplos de encabezamiento:<br />Procedure PI (a,b: integer ; var e:real);<br />Palabra reservada <br /> Identificador del procedimiento <br /> Lista de parámetros formales (opcional) <br />Procedure Intersección (a, b, c, d, e, f: real; var x, y: real); <br />Procedure EscribirMensaje; <br />Procedure HorasHombre (dia: Tdiassemana; var horas,minutos; natural); <br />
  6. 6. Ejemplos de encabezamiento:<br />Function Fl (a,b:integer):real;<br />Palabra reservada <br /> Identificador de función<br /> Lista de parámetros fórmales (opcional)<br /> Tipo de dato del valor de la función<br />Function Racional(a,b: integer):real;<br />Function EsBisiesto(año: integer): boolean;<br />Function Salario (dia: Tdiassemnal,horas: natural): real;<br />
  7. 7. En el cuerpo de la función se nene la obligación de asignar un valor al identificador de la función, al menos una vez ya que el último valor que tome será el valor que transmite a la unidad que la invoca.<br />Function EsBisiesto(año: integer): boolean;<br />Begin<br />EsBisiesto:= (año mod 4 = 0) y ( año mod 100 <>0) o (año mod 400= 0);<br />End;<br />
  8. 8. Invocación de un procedimiento<br />Un procedimiento se invoca dentro del programa o de un subprograma directamente por su nombre respetando el alcance de los identificadores, seguido de una lista de parámetros efectivos, si fuera necesario. La invocación de un procedimiento es una sentencia del programa o de la unidad llamadora. La ejecución de dicha sentencia equivale a la ejecución del procedimiento que lleva su nombre. Una vez finalizada la ejecución del procedimiento se retorna el control a la sentencia que sigue a la que dio lugar dicha activación en el subprograma llamador.<br />
  9. 9. Invocación de un procedimiento<br />Procedure P1 (a ;b: integer; var e: real);<br />Pl( x,y,z)<br />Invocación del procedimiento P1 con tres parámetros efectivos, ya que su .definición se realizó con tres parámetros formales.<br />
  10. 10. Invocación da un procedimiento<br />Declaración<br />Procedure Intersección (a,b,c,d,e.f: real; var x,y: real); <br />Procedure EscribirMensaje; <br />Procedure HorasHombre (dia: Tdiassemana; var horas,minutos; natural);<br />Invocación<br />Procedure Intersección (a, b, c, d, e, f, x, y);<br />Procedure EscribirMensaje; <br />Procedure HorasHombre(Undia, Lashoras, Losminutos);<br />
  11. 11. Invocación de una función<br />Una función se invoca dentro del programa o de un subprograma directamente por su nombre respetando el alcance de los identificadores, seguido la una lista de parámetros efectivos, si fuera necesario. La invocación de una función se realiza dentro de una expresión del programa o de la unidad llamadora. <br />La ejecución de dicha expresión incluye la ejecución de la función indicada que se realiza en el momento que corresponde de acuerdo a las reglas de ejecución de la expresión. Una vez finalizada la ejecución de la función, su valor se opera con el resto de los operandos. Es decir se retorna el control de ejecución a la expresión..<br />
  12. 12. Invocación de una función<br />Function F1 (a, h: integer): real;<br /> …* F1 (a, h)/3…<br />Invocación de la función F1 con dos parámetros efectivos, ya que su definición se realizó con dos parámetros formales.<br />
  13. 13. Invocación de una función <br />Declaración.<br />Function Racional(a, b: integer):real;<br />Function EsBisiesto(año: integer): boolean;<br />Function Salario (dia: Tdiassemana; horas: natural): real;<br />Invocación<br />numero := 16*RacionaI(3,b) /7<br />If EsBisiesto(2008)<br />then writeln('el ano', 2008,'es bisiesto'); <br />while Salario (dia, horas) < 500 do<br />
  14. 14. Ejemplo: <br />Program P; <br />Procedure Q; <br /> begin<br /> writeln (‘este es un procedimiento') <br /> end; {Q} <br />begin<br /> writeln ('Este programa a activa al procedimiento Q'); <br /> Q; <br />end. <br />La ejecución del programa dará por resultado:<br />Este programa activa al procedimiento Q<br />este es un procedimiento<br />
  15. 15. El procedimiento Q está declarado en el programa P. Se puede representar la declaración de procedimientos con un diagrama que revela el lugar que ocupa cada uno dentro dala estructura-estática del programa.<br />P Program P;<br /> Procedure Q;<br />Q begin<br /> Writeln ('Este es un procedimiento')<br /> end;{ Q}<br /> begin<br />Writeln('Este programa activa al procedimiento Q);<br />Q;<br /> end.<br />
  16. 16. Si se tuviera: <br />Program P; <br />procedureQ;<br /> begin<br /> End; { Q}<br />procedureR; <br />begin<br /> end; {R}<br />begin<br />Q;<br />R;<br />end.<br />P<br />Q R<br />Q y R pueden hacer referencia a todos los identificadores declarados en P.<br />P pueden hacer referencia alos identificadores Q y R.<br />
  17. 17. Program P;<br />Var <br />y: integer;<br />Procedure Q;<br />begin<br /> Writeln('Dentro de Q se puede hacer referencia a y declarar P ');<br /> Writeln( 'el valor de y en Q es:', y);<br /> end; { Q} <br />Procedure R;<br /> begin<br /> Writeln( 'Dentro de R se puede hacer referencia a y declarada en P );<br /> Writeln( 'el valor de y es:', y) <br />end; { R}<br />begin<br />y:=3; <br />Q; <br />P;<br />X<br />Writeln( 'el valor de y declarada en, P es:', y)<br />end.<br />P<br />Q R<br />
  18. 18. Program P;<br />Var <br />y: integer;<br />Procedure Q;<br />begin<br /> Writeln( 'el valor de y en Q es:', y);<br /> end; { Q} <br />Procedure R;<br /> begin<br />Writeln( 'el valor de y en R es:', y);<br />end; { R}<br />begin<br />y:=3; <br />Q; <br />P;<br />X<br />Writeln( 'el valor de y declarada en, P es:', y)<br />end.<br />P<br />Q R<br />Traza en P<br />P P P<br /> Q<br />el valor de y en Q es 3<br />
  19. 19. Program P;<br />Var <br />y: integer;<br />Procedure Q;<br />begin<br /> Writeln('Dentro de Q se puede hacer referencia a y declarar P ');<br /> Writeln( 'el valor de y en Q es:', y);<br /> end; { Q} <br />Procedure R;<br /> begin<br /> Writeln( 'Dentro de R se puede hacer referencia a y declarada en P );<br /> Writeln( 'el valor de y es:', y) <br />end; { R}<br />begin<br />y:=3; <br />Q; <br />P;<br />X<br />Writeln( 'el valor de y declarada en, P es:', y)<br />end.<br />P<br />Q R<br />Traza en P<br />P P P<br /> Q R<br />el valor de y en Q es 3<br />el valor de y en R es 3<br />
  20. 20. Tal como está declarada la variable y es local al programa P y global para los procedimientos Q y R.<br />Identificador local a un subprograma o programa:<br />Es el que está declarado en el subprograma o programa. Está activo sólo durante la ejecución del mismo. Una vez finalizada la ejecución de la unidad donde está declarado no se puede hacer referencia a dicho identificador.<br />Program P;<br /> var <br /> y: integer; <br />Procedure Q; <br /> var <br />x: integer: <br />begin<br />x:=1;<br />end; { Q}<br />begin <br />y:= 3; <br />Q;<br />writeln(‘ el valor de y en P es:’, y);<br />end.<br />y, Q son locales a P<br />x es local Q <br />
  21. 21. La variable ‘y’ y los procedimientos Q y R son locales a P.<br />Los procedimientos Q y R no tienen identificadores locales.<br />Program P;<br />Var <br />y: integer;<br />Procedure Q;<br />begin<br /> Writeln('Dentro de Q se puede hacer referencia a y declarar P ');<br /> Writeln( 'el valor de y en Q es:', y);<br /> end; { Q} <br />Procedure R;<br /> begin<br /> Writeln( 'Dentro de R se puede hacer referencia a y declarada en P );<br /> Writeln( 'el valor de y es:', y) <br />end; { R}<br />begin<br />y:=3; <br />Q; <br />P;<br />X<br />Writeln( 'el valor de y declarada en, P es:', y)<br />end.<br />
  22. 22. Traza en P<br />P P P<br /> Q<br />Program P;<br /> var <br /> y: integer; <br />Procedure Q; <br /> var <br />x: integer: <br />begin<br />x:=1;<br />end; { Q}<br />begin <br />y:= 3; <br />Q;<br />writeln(‘ el valor de y en P es:’, y);<br />end.<br />
  23. 23. Traza en P<br />P P P<br /> Q<br />Program P;<br /> var <br /> y: integer; <br />Procedure Q; <br /> var <br />x: integer: <br />begin<br />x:=1;<br />x:=x+1;<br />Y:=y+1;<br />end; { Q}<br />begin <br />y:= 3; <br />Q;<br />writeln(‘ el valor de y en P es:’, y);<br />end.<br />
  24. 24. Traza en P<br />P P P<br /> Q<br />Program P;<br /> var <br /> y: integer; <br />Procedure Q; <br /> var <br />y: integer: <br />begin<br />y:=1;<br />Y:=y+1;<br />end; { Q}<br />begin <br />y:= 3; <br />Q;<br />writeln(‘ el valor de y en P es:’, y);<br />end.<br />
  25. 25. Parámetros:<br />La transferencia de valores desde y hacia el procedimientos o función se realiza por medio de parámetros.<br />Procedure SiEsMayor (x, y:real; var esmayor: boolean); <br />begin<br />esmayor:= x > y <br />end;<br />Function SiEsMayor (x, y:real): boolean) ; <br />begin <br />SiEsMayor:= x > y <br />End;<br />Ejemplo: <br />Algoritmo SiEsMayor<br />DE: x, y: real<br />DS: esmayor: lógico<br />Acciones <br />esmayor x > y <br />fin<br />
  26. 26. Una lista de identificadores con sus tipos de datos es el mecanismo para transferir valores desde el subprograma que invoca al subprograma invocado y devolver los valores desde el subprogramas llamador.<br />La lista de identificadores en el encabezamiento de la declaración<br />De un procedimiento o una función es llamada lista de parámetros formales, los parámetros formales son identificadores locales al<br />subprograma donde están declarados.<br />Esta lista establece un conjunto de entidades que representan objetos o datos, en término de los cuales se expresa el procedimiento o la función. Estos parámetros son los datos de entrada al subprograma y/o los datos de salida del mismo, son comparables a los datos de entrada y salida de un algoritmo, pero no son iguales. Dentro del cuerpo del procedimiento se tratan como cualquier otra variable aunque sus efectos no siempre son los mismos.<br />
  27. 27. En la sentencia de invocación del procedimiento se indica la lista de parámetros actuales, reales o efectivos que se corresponderán en número, tipo y orden con los parámetros formales del procedimiento correspondiente.<br />Ejemplo:<br />Program Estudio;<br />....var, h: integer ,z: boolean.....................<br />Procedure SiEsMayor(x, y: integer; var esmayor: boolean); <br /> begin<br />.................. _<br />End;<br />Begin<br />………<br />SiEsMayor ( a, b, z); {invocación} <br />………<br />End.<br />Lista de parámetros formales<br />Lista de parámetros efectivos<br />
  28. 28. En la invocación de una función se indica la lista de parámetros actuales, reales o efectivos que se corresponderán en número, tipo y orden con los parámetros formales de la función correspondientes.<br />Ejemplo:<br />Program Estudio;<br />....var, h: integer ,z: boolean.....................<br />Function SiEsMayor(x, y: integer; var ): boolean; <br /> begin<br />.................. _<br />End;<br />Begin<br />………<br />If SiEsMayor ( a, b) then {invocación} <br />………<br />End.<br />Lista de parámetros formales<br />Lista de parámetros efectivos<br />
  29. 29. Hay cuatro tipos de parámetros formales en Pascal:<br />por valor<br />por variable<br />funciones<br />procedimientos<br />El tipo de cada parámetro actual está determinado por el correspondiente parámetro formal. La correspondencia entre la lista de parámetros formales y efectivos debe ser:<br />La cantidad de parámetros debe ser la misma en ambas listas.<br />Cada parámetro actual se corresponde con el formal que ocupa la misma posición en la listade parámetros formales.<br />La correspondencia de tipos debe coincidir entre los efectivos y los formales.<br />
  30. 30. Veremos dos tipos de pasaje de parámetros que presenta Pascal <br />Por valor<br />Por referencia<br />En la lista de parámetros formales, ( en la declaración del procedimiento) los parámetros por referencia se declaran del siguiente modo:<br />var lista de identificadores: identificador de tipo de dato <br />var x, y: real;<br />var x: real; <br />var y : integer<br />Los parámetros efectivos que se corresponden con los formales por variable (en la invocación del procedimiento) deben ser variables.<br />SiEsMayor (3,5,z);<br />Los parámetros efectivos van separados por comas.<br />
  31. 31. Ejemplo:<br />En la invocación del procedimiento el parámetro efectivo se liga al formal con<br />pasaje por referencia.<br />Durante la ejecución del procedimiento, toda modificación en el valor del<br />parámetro formal por referencia, modificará el parámetro efectivo<br />Instantáneamente.<br />Finalizada la ejecución del procedimiento no se tiene más acceso al parámetro formal.<br />Program Estudio;<br />var, h: integer ,z: boolean;<br />Procedure SiEsMayor (x, y: integer; var esmayor: boolean); <br /> begin<br />Esmayor:= x < y;<br /> End;<br />begin<br />read(a.b); <br />SiEsMayor( a,b,z); <br />Write (z);<br />end. <br />
  32. 32. Los parámetros formales por referencia se pueden comparar con los datos de entrada salida de un algoritmo, pero no son iguales.<br />En un algoritmo el argumento que se corresponde con un dato de entrada y salida de una primitiva, en la invocación de la primitiva, le asigna el valor al dato y cuando finaliza la ejecución de la primitiva el dato le asigna el valor obtenido al argumento.<br />En un subprograma el parámetro que se corresponde con un parámetro formal por referencia, en la invocación del procedimiento, se liga al mismo y todo cambio en el parámetro formal o efectivo se transmite al otro.<br />
  33. 33. Parámetros por valor<br />Se usa el parámetro por valor cuando el único rol del parámetro es ingresar un valor al procedimiento, es unidireccional (parámetro de entrada) se declaran del siguiente modo:<br />Lista de identificadores : tipo de dato<br />El parámetro efectivo que se corresponde con uno formal por valor, asigna al mismo, su valor, en la invocación del procedimiento. No se mantiene la correspondencia durante la ejecución ni a la finalización del mismo.<br />Son comparables a los datos de entrada de las primitivas y sus invocaciones.<br />
  34. 34. Program Area_cuadrado; <br />var lado, area: real; <br />Procedure imprimir( a,b: real); <br />begin<br /> write(‘el área del cuadrado de lado', a, 'es: ',b) <br />end;<br />begin<br />read( lado); <br />area := lado * lado;<br />imprimir (lado, area);<br />End.<br />
  35. 35. Traza del programa Area_cuadrado<br />el área del cuadrado de lado 4 es: 16<br />
  36. 36. Pautas a tener en cuenta para utilizar parámetros:<br />Si la información que se pasa al procedimiento no tiene que ser devuelta fuera del procedimiento el parámetro formal que representa dicha información puede ser un parámetro por valor.<br />Si se tiene que devolver infamación a la unidad llamadora el parámetro formal que representa esa información debe ser un parámetro por referencia.<br />Si la información que se pasa al procedimiento puede ser modificada y se devuelve un nuevo valor, el parámetro formal que representa dicha información debe ser un parámetro por referencia.<br />
  37. 37. Variables globales vs parámetros<br />Las variables globales deben evitarse para intercambiar información entre unidades de programas. <br />La modificación del valor de una variable global puede tener efectos no esperados sobre las unidades de programas que las usan.<br />El uso de variables globales requiere una estrecha coordinación entre las distintas personas que escriben los procedimientos del programa.<br />El uso de variables globales limita la libre elección de los identificadores y dentro de los procedimientos.<br />El uso de variables globales impide la independencia entre las unidades del programas.<br />No se permitirá el uso de variables globales en los programas de este curso.<br />
  38. 38. Bibliografía<br /><ul><li>López García, Guillermo (ed.) (2005). El ecosistema digital: Modelos de comunicación, nuevos medios y público en Internet. Valencia: Servei de Publicacions de la Universitat de València. Disp.
  39. 39. Snyder, Ilana –compiladora (2004): Alfabetismos digitales. Comunicación,innovación y educación en la era electrónica. Málaga: Aljibe Stallman, Richard M. (2004) Software libre para una sociedad libre. Introducción de Lawrence Lessig.
  40. 40. Curso Nivelación 2011 - Universidad Nacional de Chilecito Lic. en Sistemas - Ing. En Sistemas – Tecnicatura Univ. Desarrollo Aplic. WEB.
  41. 41. Agustin Fonseca- Juegos de mente – Memoria, Cálculo, Memoria, Agilidad Mental.
  42. 42. Martín Sierra, Abel Martín Álvarez, Ángel Aguirre Pérez- Aula Matemática digital 2.
  43. 43. Ing. Gábor loerines, ing. Francisco Chaves-Micro computación Tomo 2- Nahel Ediciones.
  44. 44. Adrián Paenza- Matemática... ¿Estás Ahí?
  45. 45. Adrián Paenza- Matemática... ¿Estás Ahí? Episodio 2
  46. 46. Adrián Paenza- Matemática... ¿Estás Ahí? Episodio 3,14.
  47. 47. Moroni Norma-Apunte de R.P.A (2003) –U.N.S.</li></ul>38<br />

×