Metodologia Y Tecnologia De La Programacion I

Post on 29-Jun-2015

2.447 views 1 download

description

Arreglos de una dimensión (vector)Arreglos de dos dimensiones o matricesArreglos multidimensionales

Transcript of Metodologia Y Tecnologia De La Programacion I

ESCUELA: Ciencias de la Computación

NOMBRES

METODOLOGIA Y TECNOLOGIA DE LA PROGRAMACION I

PERíODO:

Ing. Danilo Jaramillo H

Abril – Agosto 2009

1

2

INDICACIONES

Ingreso a campus y contestar los foros, revisar ejercicios.

Importancia de realizar las evaluaciones a distancia Foros (EVA) 2 puntos Parte objetiva 2 puntos Parte de ensayo 2 puntos

Evaluación Presencial parte objetiva 8 puntos parte ensayo 6 puntos

3

INDICACIONES

Uso de sangrías. Poner encabezados Resolver en pseudo-código Entender que es lo que se pide en los

ejercicios de la evaluación presencial.

4

QUE HAREMOS HOY

Mayor claridad para el desarrollo de algoritmos

Desarrollo de programas mas complejos Nuevos enfoques … Programación

orientada a objetos

5

PLAN DE CONTENIDOS

SEGUNDO BIMESTRE

Capítulo 6. Estructuras de datos: Arreglos 163 -

192

12

Capítulo 7. Utilización de los Métodos 203 -

236

10

Capítulo 8. Programación Orientada a objetos

aplicando diagramas de clases

241 -

254

8

Capítulo 9. Programación Orientada a objetos

aplicando secuenciación, selección, repetición

257-

342

10

40

6

ESTRUCTURAS DE DATOS

Contenidos Arreglos de una

dimensión (vector) Arreglos de dos

dimensiones o matrices

Arreglos multidimensionales

2 3 4 5 6 7

2 3 4 5 6 7

8 9 3 5 7 4

6 7 1 1 4 3

7

Arreglos Colección de datos del mismo tipo Un nombre único Indicador de posición que diferencia a cada

elemento

2 9 4 15 6 27

ESTRUCTURAS DE DATOS

Mat

31 32 33 34 35 36

2 13 4 45 6 7

8 9 53 5 37 4

26 7 10 11 4 3

MatRes

1 2 3 4 5 6

8

Arreglos unidimensionales o vectores

ESTRUCTURAS DE DATOS

2 9 4 15 6 27

Mat

1 2 3 4 5 6

Mat[1] = 2Mat[2] = 9Mat[3] = 14Mat[4] = 15Mat[5] = 6Mat[6] = 25

9

Declarnombrevariable : Arreglo[tamaño] tipo de dato

Algoritmo matricesClase matriz

1. Método Principala. declaraciones

VariablesMat: Arreglo [30] Entero

Declarnombrevariable : Arreglo[tamaño] tipo de dato

Algoritmo matricesClase matriz

1. Método Principala. declaraciones

VariablesMat: Arreglo [30] Entero

ESTRUCTURAS DE DATOS

10

TIPOS

Algoritmo matricesClase matriz

1. Método Principala. declaraciones

TiposVector : Arreglo [30] Entero

VariablesA, B. C : Vector

TIPOS

Algoritmo matricesClase matriz

1. Método Principala. declaraciones

TiposVector : Arreglo [30] Entero

VariablesA, B. C : Vector

ESTRUCTURAS DE DATOS

11

Algoritmo matricesClase matriz

1. Método Principala. declaraciones

VariablesMat: Arreglo [30] Entero

b. imprimir “ingrese numero de elementos”c. leer n_ed. for (i = 1; i <= n_e; i++)

1. leer Mat[i]e. endfor

f. for (i = 1; i <= n_e; i++)1. if (mat[i] mod 2) = 0 then

imprimir “el numero”,mat[i], es par2. endif

g. endforh. for (i = 1; i <= n_e; i++)

imprimir Mat[i] e. endfor h. fin método principal

fin clase matriz

Algoritmo matricesClase matriz

1. Método Principala. declaraciones

VariablesMat: Arreglo [30] Entero

b. imprimir “ingrese numero de elementos”c. leer n_ed. for (i = 1; i <= n_e; i++)

1. leer Mat[i]e. endfor

f. for (i = 1; i <= n_e; i++)1. if (mat[i] mod 2) = 0 then

imprimir “el numero”,mat[i], es par2. endif

g. endforh. for (i = 1; i <= n_e; i++)

imprimir Mat[i] e. endfor h. fin método principal

fin clase matriz

12

Arreglos multi-dimensionales

ESTRUCTURAS DE DATOS

31 32 33 34 35 36

2 13 4 45 6 7

8 9 53 5 37 4

26 7 100 11 4 3

MatRes

MatRes[1][1] = 2MatRes[2][4] = 5MatRes[3][2] = 7MatRes[1][6] = 7MatRes[2][1] = 8 MatRes[3][5] = 4

MatRes[1][1] = 2MatRes[2][4] = 5MatRes[3][2] = 7MatRes[1][6] = 7MatRes[2][1] = 8 MatRes[3][5] = 4

13

Declaracionnombrevariable : Arreglo[tamaño_f][tamaño_c] tipo de dato

Algoritmo matricesClase matriz

1. Método Principala. declaraciones

VariablesMat: Arreglo [30][10] Entero

Declaracionnombrevariable : Arreglo[tamaño_f][tamaño_c] tipo de dato

Algoritmo matricesClase matriz

1. Método Principala. declaraciones

VariablesMat: Arreglo [30][10] Entero

ESTRUCTURAS DE DATOS

14

TIPOS

Algoritmo matricesClase matriz

1. Método Principala. declaraciones

ConstantesL = 30

TiposMatrices : Arreglo [L][L] Entero

VariablesA, B. C : Matrices

TIPOS

Algoritmo matricesClase matriz

1. Método Principala. declaraciones

ConstantesL = 30

TiposMatrices : Arreglo [L][L] Entero

VariablesA, B. C : Matrices

ESTRUCTURAS DE DATOS

15

Algoritmo matricesClase matriz

1. Método Principala. declaraciones

VariablesMat: Arreglo [30][10] Entero

b. imprimir “ingrese numero de filas y columnas”c. leer n_f,n_cd. for (i=1; i<=n_f; i++)

1. for (j=1:j<=n_c;j++) i. leer Mat[i][j]

2. endfore. endforf. for (i=1; i<=n_f; i++)

1. for (j=1:j<=n_c;j++)if (Mat[i][j] mod 2 = 0) then

imprimir “numero es par”endif

2. endforg. endfor

2. fin método principal

Algoritmo matricesClase matriz

1. Método Principala. declaraciones

VariablesMat: Arreglo [30][10] Entero

b. imprimir “ingrese numero de filas y columnas”c. leer n_f,n_cd. for (i=1; i<=n_f; i++)

1. for (j=1:j<=n_c;j++) i. leer Mat[i][j]

2. endfore. endforf. for (i=1; i<=n_f; i++)

1. for (j=1:j<=n_c;j++)if (Mat[i][j] mod 2 = 0) then

imprimir “numero es par”endif

2. endforg. endfor

2. fin método principal

16

EJERCICIOS

Ordenar un vector Buscar elementos repetidos en un

vector Ordenar una matriz de dos dimensiones Buscar elementos repetidos en una

matriz dos dimensiones Multiplica dos matrices

17

Método Principala. Declaraciones

Mat[10] : Arreglo[10] enterob. imprimir “ingrese numero de elementos”c. leer n_ed. for(i=1; i<= n_e; i++)

1. leer Mat[i]e. endfor f. for(i=1; i<= n_e; i++)

1. for(j=1; j<= n_e; j++)if (mat[i] < mat[j]) then aux mat[i] mat[i] mat [j] mat[j] auxendif

2.endfor g. endfor h. for(i=1; i<= n_e; i++)

1. imprimir Mat[i] i. endfor j. fin método principal

18

METODOS

Conceptos Generales

Propósito .como utilizar mas de un método dentro de una clase. Comprender el trabajo con variables de clase, variables locales y paso de parámetros entre métodos.

19

METODOS

Conceptos Generales Técnica divide y vencerás Ejecutar una tarea especifica Cada método es independientes método principal sub-rutinas (función,

rutina, sub-algoritmo) Cuando se invoca a un método las

instrucciones que están definidas se ejecutan y luego vuelven al método donde fue invocado.

20

A

B

B

D

A

D

F

21

Sistema de Gestión Académica

Registro de Notas y Asistencia

matriculación

matriculación

Ingresar Ficha del estudiante

Registro de Notas y Asistencia

Ingresar Notas

Verificar cédula

sEjemeemp1

Metodo Principal

22

Metodo principal Metodo xxxx

Método yyyy

Método zzzz

Llamada método

Llamada método

Llamada método

Llamada al método

Llamada método

Llamada método

23

Métodos

Algoritmo sumarClase suma

1. Método Principala. imprimir “la suma es”,

suma()2. fin método principal

3. Método suma: enteroa. Declaraciones

variables Suma, x , y: entero

• leer x, y• Suma = x + y• Return Suma

4. Fin Método suma

Fin clase sumafin

24

Métodos

Conceptos Métodos que no retornan valor Métodos que retornar valor Variables de clase y locales Parámetros por valor y por referencia

25

Métodos

Métodos que no retornan valor Pueden o no devolver valores Ejecuta un proceso especifico Forma de Invocar a estos métodos

NombredelMetodo()

26

Métodos que no retornan valor Definición

Métodos

Método nombre (parámetros)a. Declaraciones

VariablesConstantes

b. Acciónc. Acciónd. Acción

e. Fin Método

27

Métodos

Métodos que retornan valor Devuelve un valor Forma de Invocar a un Metodo No

Retorna ValorZ nombremetodo()Si (nombremetodo() == ?) Imprimir nombremetodoParte de una expresión

28

Metodos que retornan Valor Definición

Métodos

Método nombre (parámetros): tipo de datoa. Declaraciones

VariablesConstantes

b. Acciónc. Acciónd. return valore. Fin Método

29

Métodos

Variables: locales y clase Locales

Solo tiene valides dentro del método donde son declaradas

De clase Se las puede utilizad en cualquier parte

de la clase

30

Métodos

Variables

de clase

Algoritmo sumarClase suma

1. declaraciones variables

y : entero2. Método Principal

a. Leer yb. imprimir “la suma es”,

suma()3. fin método principal

4. Método suma: enteroa.Declaraciones

variables Suma, x: entero

b.x = 5c.Suma = x + yd.Return Suma

5. Fin Método sumaFin clase sumafin

Suma = x + y

31

31

MétodosAlgoritmo sumar

Clase suma1. Método Principal

a. declaraciones variables

y : enterob. Leer yc. imprimir “la suma es”,

suma()d. imprimir x

e. fin método principal 4. Metodo suma: entero

a. Declaracionesvariables Suma, x entero

b. x = 5c. Suma = x + yd. Return Suma

e. Fin Método sumaFin clase sumafin

Variables

locales

32

Métodos

Parámetros por valor y por referencia.. Enlazar variables entre métodos

Por valor Si un parámetro es modificado su contenido

dentro del subprograma, al terminar el mismo mantiene el valor

Por referencia Si un parámetro es modificado su contenido

dentro del subprograma, al terminar el mismo mantendrá el valor con el que se modificó.

33

Algoritmo Sumatoria Clase Suma 1.Metodo principal

a. declaraciones S : entero

b. S = 0 c. imprimir suma(s) d. imprimir s

e. Fin método principal ……. Fin clase suma fin

Algoritmo Sumatoria Clase Suma 1.Metodo principal

a. declaraciones S : entero

b. S = 0 c. imprimir suma(s) d. imprimir s

e. Fin método principal ……. Fin clase suma fin

………….2. método suma (val s: entero) : entero

a. Leer numero1b. Leer numero2c. s = numero1 + numero2d. return S

e. Fin método suma

………….2. método suma (val s: entero) : entero

a. Leer numero1b. Leer numero2c. s = numero1 + numero2d. return S

e. Fin método suma

Métodos

¿Qué valor se presenta en la llamada a la función?

¿Cuál es el valor de S ?

numero1 5

numero2 8

PARAMETROS POR VALOR

34

Métodos

¿Qué valor se presenta en la llamada a la función?

¿Cuál es el valor de S ?

numero1 5

numero2 8

Algoritmo Sumatoria Clase Suma 1.Metodo principal

a. declaraciones S : entero

b. S = 0 c. imprimir suma(s) d. imprimir s

e. Fin método principal ……. Fin clase suma fin

Algoritmo Sumatoria Clase Suma 1.Metodo principal

a. declaraciones S : entero

b. S = 0 c. imprimir suma(s) d. imprimir s

e. Fin método principal ……. Fin clase suma fin

………….2. método suma (ref s: entero) : entero

a. Leer numero1b. Leer numero2c. s = numero1 + numero2d. return S

e. Fin método suma

………….2. método suma (ref s: entero) : entero

a. Leer numero1b. Leer numero2c. s = numero1 + numero2d. return S

e. Fin método suma

PARAMETROS POR REFERENCIA

35

Ejercicios

Algoritmo Factorial Clase factorial 1. Metodo principal

a. declaraciones res, numero : entero

b. leer numero c. res = factorial (numero) d. imprimir res

e. Fin metodo principal…………… Fin clase sumafin

Algoritmo Factorial Clase factorial 1. Metodo principal

a. declaraciones res, numero : entero

b. leer numero c. res = factorial (numero) d. imprimir res

e. Fin metodo principal…………… Fin clase sumafin

………………….2. método factorial (val s: entero) : entero

a. declaracionesf : entero

b. f = 1c. for (i = 1; i<= numero; i++)

f = f * id. endfore. return f

f. Fin metodo factorial

………………….2. método factorial (val s: entero) : entero

a. declaracionesf : entero

b. f = 1c. for (i = 1; i<= numero; i++)

f = f * id. endfore. return f

f. Fin metodo factorial

Métodos

36

Ejercicios

Algoritmo Potencia Clase Potencia 1. Método principal

a. declaraciones bas, exp, res: entero b. leer bas c. leer exp d. res = potencia (bas,exp) e. imprimir res

Fin metodo principal……………Fin clase sumafin

Algoritmo Potencia Clase Potencia 1. Método principal

a. declaraciones bas, exp, res: entero b. leer bas c. leer exp d. res = potencia (bas,exp) e. imprimir res

Fin metodo principal……………Fin clase sumafin

…………….2. método potencia (entero bas,

entero exp) : enteroa. declaraciones

p : enterob. p = 1c. for (i=1; i<=exp; i++)

p p * basd. endforf. return p

g. fin método potencia

…………….2. método potencia (entero bas,

entero exp) : enteroa. declaraciones

p : enterob. p = 1c. for (i=1; i<=exp; i++)

p p * basd. endforf. return p

g. fin método potencia

Métodos

37

Algoritmo transformacion Clase transforma 1. Metodo principal

a. leer num b. bin = binario(num) c. oct = octal(num) d. imprimir “numero en binario es”, bin e. imprimir “numero en octal es”, oct

f. fin metodo principalfin

Algoritmo transformacion Clase transforma 1. Metodo principal

a. leer num b. bin = binario(num) c. oct = octal(num) d. imprimir “numero en binario es”, bin e. imprimir “numero en octal es”, oct

f. fin metodo principalfin

2. método binario (val num:entero) enteroa. j = 1b. res = 0c. while (num > 0) do

1. d = residuo(num/2)2. res = res + (d*j)3. num = num / 24. j = j*10

d. endwhilee. return res

f. Fin metodo binario

2. método binario (val num:entero) enteroa. j = 1b. res = 0c. while (num > 0) do

1. d = residuo(num/2)2. res = res + (d*j)3. num = num / 24. j = j*10

d. endwhilee. return res

f. Fin metodo binario

3. método octal (val num: entero) enteroa. j = 1b. res = 0c. while (num > 0) do

1. d = residuo(num/8)2. res = res + (d*j)3. num = num / 84. j = j*10

d. endwhilee. return res

f. Fin metodo octal

3. método octal (val num: entero) enteroa. j = 1b. res = 0c. while (num > 0) do

1. d = residuo(num/8)2. res = res + (d*j)3. num = num / 84. j = j*10

d. endwhilee. return res

f. Fin metodo octal

38

Algoritmo transformación Clase transforma 1. Método principal

a. leer numb. bin transformar(num,2)c. oct transformar(num,8)d. presentar “numero en binario es”, bine. presentar “numero en octal es”, oct

f. Fin Método Principalfin

Algoritmo transformación Clase transforma 1. Método principal

a. leer numb. bin transformar(num,2)c. oct transformar(num,8)d. presentar “numero en binario es”, bine. presentar “numero en octal es”, oct

f. Fin Método Principalfin

2. Método transformar (num: entero, base:entero): enteroa. j = 1b. res = 0c. while (num > 0) do

1. d = residuo(num/base)2. res = res + (d*j)3. num = num / base4. j = j*10

d. endwhilee. return resf. Fin Método Transformar

2. Método transformar (num: entero, base:entero): enteroa. j = 1b. res = 0c. while (num > 0) do

1. d = residuo(num/base)2. res = res + (d*j)3. num = num / base4. j = j*10

d. endwhilee. return resf. Fin Método Transformar

39

Algortimo matricesClase matriz

1. Método Principala. declaraciones

VariablesMat: Arreglo [30][10] Entero

b. imprimir “ingrese numero de filas y columnas”c. leer n_f,n_cd. for (i=1; i<=n_f; i++)

1. for (j 1 hasta n_c i. leer Mat[i,j]

2. endfore. endforf. for (i=1; i<=n_f; i++)

1. for (j 1 hasta n_cif primo(Mat[i,j])

imprimir “numero es primo”endif

2. endforg. endfor

h. fin método principal………..

Algortimo matricesClase matriz

1. Método Principala. declaraciones

VariablesMat: Arreglo [30][10] Entero

b. imprimir “ingrese numero de filas y columnas”c. leer n_f,n_cd. for (i=1; i<=n_f; i++)

1. for (j 1 hasta n_c i. leer Mat[i,j]

2. endfore. endforf. for (i=1; i<=n_f; i++)

1. for (j 1 hasta n_cif primo(Mat[i,j])

imprimir “numero es primo”endif

2. endforg. endfor

h. fin método principal………..

……………………2. Método primo(entero num) boolean

a. declaracionesvariables

d, lim : realp : boolean

b. d = 2c. lim = num / 2d. p truee. while (d < num) 1. if(num modd) = 0

p = falso d = lim

2. Endif 3. d d + 1f. enddog. return p

h. Fin método primoFin clasefin

……………………2. Método primo(entero num) boolean

a. declaracionesvariables

d, lim : realp : boolean

b. d = 2c. lim = num / 2d. p truee. while (d < num) 1. if(num modd) = 0

p = falso d = lim

2. Endif 3. d d + 1f. enddog. return p

h. Fin método primoFin clasefin

40

Fácil comprensión del problema Fácil comprensión de errores, pues si

existe alguno solo se trabajara en el modulo donde este se presente

Reutilización de código, para procesos similares se pueden utilizar procedimientos que ya están realizados

METODOS - resumen

41

Contenidos Estudiar los conceptos básicos de la

programación orientada a objetos. Objetos. Clases. métodos. encapsulamiento.

PROGRAMACIÓN ORIENTADA A OBJETOS

Innovación en los lenguajes de programación Es mas estructurada que las que se han

estudiado Mas modular y abstracta que lo que se ha

hecho con respecto a abstracción y ocultamiento

La POO, está formada por una colección de objetos interaccionando conjuntamente para representar y solucionar un problema

42

PROGRAMACIÓN ORIENTADA A OBJETOS

Objetos Datos .. Atributos .. descripción Métodos .. Comportamiento … manipulación

de los datos

43

Objeto

Metodo1()Metodo2()Metodo3()

Dato1Dato2dato3

PROGRAMACIÓN ORIENTADA A OBJETOS

Clase Representación abstracta que describen

un conjunto de objetos Representa un {} de objetos que tienen

los mismos métodos y los mismos datos Plantilla o molde para crear todos los

objetos

44

Empleado

Leernombre()Leerapellido()

Nombreapellidos

PROGRAMACIÓN ORIENTADA A OBJETOS

Métodos y encapsulación Acciones que se implementan el

comportamiento de un objeto, manipular los datos

Encapsulación colocar juntos los datos y los métodos dentro de un objeto

El programador debe pensar en el código y los datos juntos durante el diseño del programa

No hay vacio entre datos y métodos 45

PROGRAMACIÓN ORIENTADA A OBJETOS

Modificadores de acceso Visibilidad que tendran los datos o los

metodos, desde que parte seran visibles para ser utilizados -privado (datos,metodos) #protegido (datos,metodos) +publico (datos,metodos) _estatico (datos,metodos) *abstracto (metodos)

46

ObjetoEmpleado

Leernombre()Leerapellido()

Instanciación

47

Empleado

Leernombre()Leerapellido()

Nombreapellidos

Nombre: JuanApellidos: perez

ObjetoEmpleado

Leernombre()Leerapellido()

Nombre: JuanApellidos: perez

ejercicio Se desea calcular el sueldo de un empleado,

teniendo su nombre, apellido, horas trabajadas, costo por hora de 5 dólares y bajo las siguientes condiciones: Horas trabajadas <=40 no tiene bonificacion Horas trabajadas <=50, 20% de bonificacion Horas trabajadas <=60, 30% de bonificacion Horas trabajadas >=60, 40% Nadie puede ganar menos de 100 y mas de

400 dólares

48

49

ObjetoEmpleado

establecerombre()establecerapellido()Calcularsueldo()

Nombre: JuanApellidos: perezHorastrab: 30Sueldo: 150

ObjetoEmpleado

establecerombre()establecerapellido()Calcularsueldo()

Nombre: daniloApellidos: jaramilloHorastrab: 10Sueldo: (50) = 100

ObjetoEmpleado

establecerombre()establecerapellido()Calcularsueldo()

Nombre: JuanApellidos: perezHorastrab: 40Sueldo: 200

ObjetoEmpleado

establecerombre()establecerapellido()Calcularsueldo()

Nombre: JuanApellidos: perezHorastrab: 45Sueldo: 225+45=270

ObjetoEmpleado

establecerombre()establecerapellido()Calcularsueldo()

Nombre: JuanApellidos: perezHorastrab: 54Sueldo: 270+81=351

ObjetoEmpleado

establecerombre()establecerapellido()Calcularsueldo()

Nombre: JuanApellidos: perezHorastrab: 65Sueldo: 325+130=400

Empleado

Establecernombre()Establecerapellido()Establecerhoras()Calcularsueldo()obtenerDatosempleados()Obtenersueldo()

50

NombreApellidosHorastrabSueldo

Algoritmo sueldo

Clase empleado

a. Declaraciones

datos

NomEmp: cadena

ApeEmp: cadena

NumHor: real

sueldo: real

constante

costohora=5

………………

51

1. Método Establecernombre(nom :cadena)a. NomEmp = nom

b. Fin Método establecernombre

2. Método Establecerapellido (ape:cadena)a. ApeEmp = nom

b. Fin Método establecerapellido

3. Método Establecerhoras (hor:real)

a. numhor = hor

b. Fin Método Establecerhoras

52

4. Método Calcularsueldo ()a. Sueldo = NumHor * costohora

b. If (NumHor > 40) and (NumHor <=50) then

Sueldo = sueldo + (sueldo*0.20)

c. endif

d. If (NumHor > 50) and (NumHor <=60) then

Sueldo = sueldo + (sueldo*0.30)

e. endif

f. If (NumHor > 60) then

Sueldo = sueldo + (sueldo*0.40)

g. Endif

……….

h. If (sueldo < 100) then

sueldo = 100

i. Endif

j. If (sueldo > 300) then

sueldo = 300

k. Endif

l. Fin Método calcularrsueldo

5. Método obtenerDatosempleados() :cadena

a. return (NomEmp+ “ “+ApeEmp)

b. Fin Método obtenerDatosempleados

6. Método Obtenersueldo(): Real

a. return sueldo

b. Fin Método Obtenersueldo

Finclase Empleado

53

54

………………Clase Manipulaempleado

Método Principal

a. Declaraciones

nombre: cadena

apellido: cadena

horas: real

b. Declarar crear el objeto

c. empleado objemp = new empleado()

d. Imprimir “ingrese nombres y apellidos, y horas trabajadas”

e. Leer nombre, apellido, horas

………………………

………………f. Objemp.establecernombre(nombre)

g. Objemp.establecerapellido(apellido)

h. Objemp.establecerhoras(horas)

i. Objemp.calcularsueldo()

j. Imprimir Objemp.obtenerempleado

k. Imprimir objemp.obtenersueldo

l. Fin Método Principal

Fin clase Manipulaempleado

Fin (algoritmo)

contacto

Email: djaramillo@utpl.edu.ec Skype: danilo.jaramillo.h msn: djaramilloh@hotmail.com Teléfono: 07-250275 ext 2637

55

56