You are on page 1of 12

Colecciones

Ejemplo:Operaciones con matrices

Crear una clase para operar matrices

Es simetrica

Es cuadrada

Transpuesta

Sume

reste

multiplique

La clase
OrderedCollection subclass: #Matriz
instanceVariableNames: 'filas columnas'
classVariableNames: ''
poolDictionaries: ''
category: 'MisClases'

Los metodos
Mtodos de Clase
new: unEntero
^ self new: unEntero por: unEntero
new: rows por: cols
| ret |
ret := super new: rows.
ret inicializar: rows @ cols.

Los metodos
Mtodos de Instancia
columnas
^ columnas
en: unPar
| row col |
row := unPar x.
col := unPar y.
^ (super at: row) at: col

Los metodos
Mtodos de Instancia
en: unPar poner: unValor
| row col |
row := unPar x.
col := unPar y.
^ (super at: row) at: col put: unValor
esCuadrada
^ filas = columnas

Los metodos
Mtodos de Instancia
esSimetrica
| ret cuentaFila cuentaCol |
self esCuadrada ifFalse: [^ false].
cuentaFila := 1.
cuentaCol := 1.
ret := self transpuesta.
Filas timesRepeat: [columnas

timesRepeat:

[(self en:cuentaFila @ cuentaCol) = (ret en:cuentaFila @ cuentaCol)


ifFalse: [^ false]. cuentaCol := cuentaCol + 1].
CuentaCol := 1. cuentaFila := cuentaFila + 1].
^ true

Los metodos
Mtodos de Instancia
filas
^ filas
inicializar: unPar
filas := unPar x.
columnas := unPar y.
1 to: filas do:[:cuentaFila | self add: (Array new: columnas).
1 to: columnas do:[:cuentaCol | (super at: cuentaFila)
at:cuentaCol put:0]]

Los metodos
Mtodos de Instancia
transpuesta
| ret |
ret := Matriz new: self columnas por: self filas.
1 to:filas do:[:cuentaFila | 1 to:columnas do:[:cuentaCol | ret
en:cuentaCol@cuentaFila
poner: (self en: cuentaFila @ cuentaCol)]].
^ret

Los metodos
Mtodos de Instancia
*unaMatriz
|sumfilcolcol2m1xm2|
fil:=selffilas.obtenerelnumerodecolumnasdelobjetoreceptor
col:=selfcolumnas.obtenerelnumerodecolumnasdelobjetoreceptor
col2:=unaMatrizcolumnas.obtenerelnumerodecolumnasdeunaMatriz
m1xm2:=Matriznew:filpor:col2.secrealamatrizdetamofilxcol2
1to:fildo:[:contafil|
1to:col2do:[:contacol| m1xm2en:contafil@contacolponer:0.
1to:coldo:[:contaK|
sum:=(m1xm2en:contafil@contacol)
+((selfen:contafil@contaK)
*(unaMatrizen:contaK@contacol)).
(m1xm2at:contafil)at:contacolput:sum]]].
^m1xm2

Los metodos
Mtodos de Instancia
+unaMatriz
|sumfilcol|
fil:=selffilas.
col:=selfcolumnas.
1to:fil do:[:contafil|1to:coldo:
[:contacol|sum:=(selfen:contafil@
contacol)+(unaMatrizen:contafil@
contacol).
(superat:contafil)at:contacolput:
sum]]

Los metodos
Mtodos de Instancia
unaMatriz
|restafilcol|
fil:=selffilas.
col:=selfcolumnas.
1to:fildo:
[:contafil|1to:coldo:
[:contacol|resta:=(selfen:contafil@contacol)
(unaMatrizen:contafil@contacol).
(superat:contafil)at:contacolput:resta]]

You might also like