Método Simplex OpenOffice LibreOffice Basic 31/03/2023. Marcelo Paiva.

 



'*****oo-simplex-11


Sub oosimplex11


Dim oDesk As Variant

Dim oDoc As Object

Dim oPlanilha As Object

Dim oCelula As Object




dim i as integer

dim j as integer

dim mmax as integer

dim m as integer

dim n as integer

dim nmax as integer

dim n1 as INTEGER

dim a(20,21) as double

dim copia(20,21) as double

dim somacof(nmax)

dim eq as integer

dim va as integer

dim linpivo as integer

dim zz as integer

dim bb as integer

dim nfolga as integer

dim colpivo as integer

dim contal as integer

dim contac as integer

dim nva as integer

dim xx as double

dim pivo1 as double

dim invpivo1 as double

dim cofzero1 as double



dim inimp as integer

dim inicol as integer



inimp=4

inicol=1



oDoc = ThisComponent

oPlanilha = oDoc.Sheets(0)


oCelula = oPlanilha.getCellByPosition(0,0)

oCelula.setString("METODO SIMPLEX ENTRADA DE DADOS")


oCelula = oPlanilha.getCellByPosition(0,1)

oCelula.setString("ENTRE O NUMERO DE EQUAÇOES = ")

oCelula = oPlanilha.getCellByPosition(3,1)

eq=oCelula.getString()


oCelula = oPlanilha.getCellByPosition(0,2)

oCelula.setString("ENTRE O NUMERO DE VARIAVEIS = ")

oCelula = oPlanilha.getCellByPosition(3,2)

va=oCelula.getString()


oCelula = oPlanilha.getCellByPosition(1,3)

oCelula.setString("superior esquerdo = c6")


nva=va

nfolga=nva

zz=1

bb=1

n=nfolga+nva+zz+bb

n1=n+1

m=eq+1

dim vet1(n) as double

dim vet2(m) as double

dim linhapivo(n) as double

dim number1




'carrega matriz a(i,j) da Planilha1

For i = 0 To m

For j = 0 To n1-1


'oCelula = oPlanilha.getCellByPosition(inicol+j,inimp)

'oCelula.setValue(j)


'oCelula = oPlanilha.getCellByPosition(inicol,inimp+i)

'oCelula.setValue(i)



oCelula = oPlanilha.getCellByPosition(inicol+j,inimp+i)

a(i,j)=oCelula.getString()



next j

next i



'fim da impressao

number1=1


'metodo de simplex1


'identificar a coluna pivo


'contac=n


identifier:


beep


contal=m

'colpivo=1




for i=2 to n

xx=a(contal,i)

j=i-1

vet1(1)=xx

while xx > vet1(j)

vet1(j+1)=vet1(j)

j=j-1

wend


vet1(j+1)=xx


next i


for conta2=1 to n

if a(contal,conta2)=vet1(n) then colpivo=conta2

next conta2



oPlanilha = oDoc.Sheets(1)

oCelula = oPlanilha.getCellByPosition(0+1,1)

oCelula.setValue(colpivo)


oCelula = oPlanilha.getCellByPosition(3+1,1)

oCelula.setValue(vet1(n))


'fim coluna pivo


'identificar linhapivo


contac=n


for conta1=1 to m-1

linhapivo(conta1)=a(conta1,n)/a(conta1,colpivo)

'print conta1 linhapivo

next conta1



for i=1 to m-1

for j=m-1 to 1 step -1

if linhapivo(j-1) > linhapivo(j) then aux1=linhapivo(j-1): linhapivo(j-1)=linhapivo(j): linhapivo(j)=aux1

next j

next i

'contac=n1+1



for conta1=1 to m-1

if linhapivo(1) = a(conta1,contac)/a(conta1,colpivo) then linpivo=conta1

' if ((vet1(1))=(a(conta1,N)/a(conta1,colpivo))) then linpivo=contaL


oPlanilha = oDoc.Sheets(2)

opencls1:

oCelula = oPlanilha.getCellByPosition(0+1,1)

oCelula.setValue(linpivo)


oCelula = oPlanilha.getCellByPosition(3+1,1)

oCelula.setValue(linhapivo(linpivo))



next conta1


pivo1=a(linpivo,colpivo)


oPlanilha = oDoc.Sheets(3)

' opencls1():

oCelula = oPlanilha.getCellByPosition(0+1,2)

oCelula.setValue(linpivo)


oCelula = oPlanilha.getCellByPosition(0+1,1)

oCelula.setValue(a(1,2))


oCelula = oPlanilha.getCellByPosition(3+1,2)

oCelula.setValue(colpivo)


oCelula = oPlanilha.getCellByPosition(3+1,2)

oCelula.setValue(pivo1)


'fim da linhapivo


'levar o elemento pivo a 1, multiplicando toda linha pivo pelo inverso do elemento pivo


invpivo1=1/pivo1


for conta2=1 to n

a(linpivo,conta2)=a(linpivo,conta2)*invpivo1

' oPlanilha = oDoc.Sheets(10)

'oCelula = oPlanilha.getCellByPosition(1,3)

'oCelula.setValue(invpivo1)


'oCelula = oPlanilha.getCellByPosition(6,3)

'oCelula.setValue(colpivo)


'oCelula = oPlanilha.getCellByPosition(13,6)

'oCelula.setValue(a(linpivo,colpivo))


'oCelula = oPlanilha.getCellByPosition(2+(3*conta2),10)

'oCelula.setValue(a(linpivo,conta2))


next conta2


'fim leva pivo a 1


'levar correspondente a pivo a zero


for conta1=1 to m

if linpivo <> conta1 then cofzero1=(-1*a(conta1,colpivo)/a(linpivo,colpivo)): for conta2=1 to n: a(conta1,conta2)=(cofzero1*a(linpivo,conta2)+a(conta1,conta2)): next conta2

next conta1

for conta1=1 to m

for conta2=1 to n


oPlanilha = oDoc.Sheets(1)

'opencls1():

'oCelula = oPlanilha.getCellByPosition(1+1,8+conta1)

'oCelula.setValue(cofzero1)


'oCelula = oPlanilha.getCellByPosition(1+1,8+conta1)

'oCelula.setValue(a(linpivo,conta2))


oCelula = oPlanilha.getCellByPosition(1+conta2,4+conta1)

oCelula.setValue(a(conta1,conta2))


next conta2

next conta1

oPlanilha = oDoc.Sheets(2)

oCelula = oPlanilha.getCellByPosition(2+1,10+conta1)

oCelula.setValue(cofzero1)


oCelula = oPlanilha.getCellByPosition(6+1,10+conta1)

oCelula.setValue(a(linpivo,conta2))


oCelula = oPlanilha.getCellByPosition(6+1,10+conta1)

oCelula.setValue(a(conta1,conta2))

for conta1=1 to m

for conta2=1 to n


oPlanilha = oDoc.Sheets(3)

oCelula = oPlanilha.getCellByPosition(1+conta2,4+conta1)

oCelula.setValue(a(conta1,conta2))

next conta2

next conta1



beep:beep:beep


for conta2=1 to n

' if (a(m,conta2) < 0) then number1=number1:goto identifier

if a(m,conta2) < 0.0 then number1=number1+1:goto identifier

next conta2


End Sub

Comentários