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
Postar um comentário