Jump to content
Tony Miguel

Metodo Simplex

Recommended Posts

Olá, achei esse script no fórum aqui e gostaria de uma ajuda. Ele está com erro.

//--------------------Metodo SIMPLEX

#define H0 3
#define V0 2
#define VMAX 24
#define HMAX 78
#define H1 50
#define V 4
#define H 6
#include<stdio.h>

int MALHA2(int I,int J){
clrscr();
//------------------INICIO MALHAS----------------------
//---------Linhas Basicas
for(I=H0;I<HMAX;I++){
gotoxy(I,V0);printf("\xc4");
gotoxy(I,VMAX);printf("\xc4");
}
for(I=V0+1;I<VMAX;I++){
gotoxy(H0,I);printf("\xb3");
gotoxy(HMAX,I);printf("\xb3");
}
gotoxy(H0,V0);printf("\xc9");
gotoxy(H0,VMAX);printf("\xc8");
gotoxy(HMAX,V0);printf("\xbb");
gotoxy(HMAX,VMAX);printf("\xbc");
//-------Fim

for(I=H0+1;I<H1;I++){
gotoxy(I,11);printf("\xdc");
}
for(I=V0+1;I<12;I++){
gotoxy(50,I);printf("\xb3");
}
for(I=4;I<78;I++){
gotoxy(I,13);printf("\xc4");
gotoxy(I,15);printf("\xc4");
gotoxy(I,17);printf("\xc4");
gotoxy(I,19);printf("\xc4");
gotoxy(I,21);printf("\xc4");
}
for(I=14;I<24;I++){
gotoxy(18,I);printf("\xb3");
gotoxy(27,I);printf("\xb3");
gotoxy(37,I);printf("\xb3");
gotoxy(57,I);printf("\xb3");
gotoxy(67,I);printf("\xb3");
gotoxy(47,I);printf("\xb3");
}

gotoxy(2,25);printf("Curso: Matematica Computacional 2002 -> Programador : RJMF | rjmf@rjmf.net");



gotoxy(55,3);printf("METODO SIMPLEX");
//------------------------------------------------FIM MALHA--------
}


int MALHA1(int I,int J){
clrscr();
//------------------INICIO MALHAS----------------------
//---------Linhas Basicas
for(I=H0;I<HMAX;I++){
gotoxy(I,V0);printf("\xc4");
gotoxy(I,VMAX);printf("\xc4");
}
for(I=V0+1;I<VMAX;I++){
gotoxy(H0,I);printf("\xb3");
gotoxy(HMAX,I);printf("\xb3");
}
gotoxy(H0,V0);printf("\xc9");
gotoxy(H0,VMAX);printf("\xc8");
gotoxy(HMAX,V0);printf("\xbb");
gotoxy(HMAX,VMAX);printf("\xbc");

for(I=4;I<78;I++){
gotoxy(I,5);printf("\xc4");
gotoxy(I,7);printf("\xc4");
gotoxy(I,9);printf("\xc4");
gotoxy(I,11);printf("\xc4");
gotoxy(I,13);printf("\xc4");
gotoxy(I,15);printf("\xc4");
gotoxy(I,17);printf("\xc4");
gotoxy(I,19);printf("\xc4");
gotoxy(I,21);printf("\xc4");
}
for(I=6;I<24;I++){
gotoxy(18,I);printf("\xb3");
gotoxy(27,I);printf("\xb3");
gotoxy(37,I);printf("\xb3");
gotoxy(57,I);printf("\xb3");
gotoxy(67,I);printf("\xb3");
gotoxy(47,I);printf("\xb3");
}

//-------Fim
gotoxy(60,3);printf("METODO SIMPLEX");
//------------------------------------------------FIM MALHA--------
}

int MALHAF(int I,int J){
clrscr();
//------------------INICIO MALHAS----------------------
//---------Linhas Basicas
for(I=H0;I<HMAX;I++){
gotoxy(I,V0);printf("\xc4");
gotoxy(I,VMAX);printf("\xc4");
}
for(I=V0+1;I<VMAX;I++){
gotoxy(H0,I);printf("\xb3");
gotoxy(HMAX,I);printf("\xb3");
}
gotoxy(H0,V0);printf("\xc9");
gotoxy(H0,VMAX);printf("\xc8");
gotoxy(HMAX,V0);printf("\xbb");
gotoxy(HMAX,VMAX);printf("\xbc");
}

void main(void){ //LINHA COM ERRO
//	float M[V][H]={-3,-5,0,0,0,0,1,0,1,0,0,4,0,2,0,1,0,12,3,2,0,0,1,18};
float M[V][H];
float CPIVO[V],LPIVO[H],LINHAZERO[H],M2[V][H];
float NOVALINHA2[H],NOVALINHA3[H];
float AUX,MAIOR=0,NPIVO=9999999,NUM,N,N1=999999;
int X1,X2,I=0,J,L=2,COLUNA,LINHA,VEZES=0,TESTE=0;
int MAXITERADA;
char t;
clrscr();
//----------------Leitura da forma Tabular
MALHA1(I,J);
gotoxy(20,3);printf("Leitura do Quadro Simplex");
for(I=0;I<H-1;I++){
gotoxy(10*I+10,6);printf(" X%d",I+1);
}

for(I=0;I<V;I++){
for(J=0;J<H;J++){
gotoxy(10*J+10,2*I+8);scanf("%f",&M[I][J]);
}
}
gotoxy(20,25);printf("Digite o n\xa7 Maximo de Iteradas :");scanf("%d",&MAXITERADA);
//------------------FIM
//----------------------COMECO DAS ITERADAS
while(VEZES<MAXITERADA){
gotoxy(60,22);printf("Iterada = %d",VEZES+1);
//--------------Mostra a Tabela Simplex
MALHA1(I,J);
gotoxy(6,3);printf("Iterada n\xa7: %d",VEZES+1);
gotoxy(30,3);printf("Quadro Simplex");
for(I=0;I<H-1;I++){
gotoxy(10*I+10,6);printf(" X%d",I+1);
}
for(I=0;I<V;I++){
for(J=0;J<H;J++){
gotoxy(10*J+10,2*I+8);printf(" %3.3f",M[I][J]);
}
}
t=getch();
//--------------------FIM

//---------Determina o coeficiente de maior valor da equacao(0)
for(I=0;I<H;I++){
if(M[0][I]<0){
AUX=-M[0][I];
if(AUX>MAIOR){
MAIOR=AUX;
COLUNA=I;
}
}
}
clrscr();
MALHA2(I,J);
MAIOR=-MAIOR;

//-----------------fim

//------Determina a Coluna Pivo
gotoxy(53,5);printf("-> Coluna Pivo:");
for(I=0;I<V;I++){
CPIVO[I]=M[I][COLUNA];
gotoxy(60,7+I);printf("%3.3f",CPIVO[I]);
}

//------------FIM

//-------Determina o Numero Pivo
for(I=0;I<V;I++){
if(CPIVO[I]!=0 && CPIVO[I]!=MAIOR){
N=M[I][V+1];
NUM=N/CPIVO[I];
if(NUM<N1){
N1=NUM;
NPIVO=CPIVO[I];
LINHA=I;
}
}
}

//----FIM
gotoxy(5,3);printf("-> Outros Resultados :");
gotoxy(5,5);printf("Maior Coeficiente = %3.3f",MAIOR);
gotoxy(5,6);printf("Numero Pivo = %3.3f",NPIVO);
gotoxy(5,7);printf("Indice da coluna Pivo = %d",COLUNA);
gotoxy(5,8);printf("Indice da linha Pivo = %d",LINHA);
gotoxy(64,12);printf("Iterada n\xa7: %d",VEZES+1);
//---------Determina LINHA PIVO
for(I=0;I<H;I++){
LPIVO[I]=M[LINHA][I];
}
//--------Determina Nova Linha Pivo
for(I=0;I<H;I++){
LPIVO[I]=LPIVO[I]/NPIVO;
}
//-------FIM

//---------Determina NOVAS LINHA
gotoxy(5,12);printf("-> Resultados dos Calculos das Novas Linhas:");
gotoxy(6,14);printf("Linha Zero");
gotoxy(6,16);printf("Linha Pivo");
gotoxy(6,18);printf("Linha I");
gotoxy(6,20);printf("Linha II");

///***************Testa quais Linhas estao Livres************
//Para este Caso: 2 linhas Livres -> Tirando L0 E LPIVO
for(J=0;J<V;J++){
if(LINHA!=J && J!=0){
X1=J;
break;
}
}
for(J=0;J<V;J++){
if(LINHA!=J && J!=0 && J!=X1){
X2=J;
break;
}
}
//******************Fim do Teste*****************

//-------Calculo das Linhas---------
for(I=0;I<H;I++){
//-------Linha ZERO Fixa
LINHAZERO[I]=M[0][I]-CPIVO[0]*LPIVO[I];
gotoxy(10*I+20,14);printf("%3.3f",LINHAZERO[I]);
//------Mostra nova lINHA PIVO
gotoxy(10*I+20,16);printf("%3.3f",LPIVO[I]);

//------linha I - VARIAVEL
NOVALINHA2[I]=M[X1][I]-CPIVO[X1]*LPIVO[I];
gotoxy(10*I+20,18);printf("%3.3f",NOVALINHA2[I]);
//------linha II - VARIAVEL
NOVALINHA3[I]=M[X2][I]-CPIVO[X2]*LPIVO[I];
gotoxy(10*I+20,20);printf("%3.3f",NOVALINHA3[I]);
}
//---------------------------------------------------------------

t=getch();
clrscr();
//----------MATRIZ 2
//---------Zera a Matriz M2
for(I=0;I<V;I++){
for(J=0;J<H;J++){
M2[I][J]=NULL; //LINHA COM O ERRO
}
}
//------------------
//-------Atribui a M2 os Dados obtidos
for(I=0;I<V;I++){
for(J=0;J<H;J++){
M2[0][J]=LINHAZERO[J];
M2[1][J]=LPIVO[J];
M2[2][J]=NOVALINHA2[J];
M2[3][J]=NOVALINHA3[J];
}
}
//-------------------------
MALHA1(I,J);
gotoxy(4,4);printf("Fim da Iterada n\xa7: %d",VEZES+1);
//------MOSTRA A NOVA TABELA DE VARIAVEIS
gotoxy(25,3);printf("Novo Quadro Simplex");
for(I=0;I<H-1;I++){
gotoxy(10*I+10,6);printf(" X%d",I+1);
}
for(I=0;I<V;I++){
for(J=0;J<H;J++){
//---------Atribui Matriz 2 a Matriz Original
M[I][J]=M2[I][J];
gotoxy(10*J+10,2*I+8);printf(" %3.3f",M2[I][J]);
}
}
//----------------TESTA REGRA DE PARADA
t=getch();
clrscr();

for(I=0;I<H;I++){
if(M[0][I]>=0){
TESTE++;
}
}
if(TESTE==H){
break;
}
//---------FIM DO TESTE
//---------FIM
VEZES++;
TESTE=0;
MAIOR=0;
NPIVO=9999999;

}//------Fim do While

//***********Mostra Solucao Otima ( FINAL )*****************
MALHAF(I,J);
gotoxy(5,3);printf("=> SOLUCAO FINAL");
gotoxy(14,6);printf("-> Solucao Otima:");
for(I=0;I<V;I++){
gotoxy(16,8+I);printf("[ %3.3f ]",M[I][H-1]);
}
gotoxy(20,15);printf("Solucao Otima, conseguida na Iterada n\xa7: %d",VEZES+1);
t=getch();
}//------FIM DO PROGRAMA

O erro está na linha:


 

M2[J]=NULL;

Erro:


 

264 incompatible types in assignment

 

 

O outro erro é na linha:


 

void main(void){

 

O erro:


 

121 [Warning] return type of 'main' is not `int'

 

 

Se alguém puder me ajudar.

Edited by Tony Miguel

Share this post


Link to post
Share on other sites

 

 

M2[J]=NULL;

 

Este M2 é o que? Ponteiro pra alguma coisa? Se não, troque NULL por 0.

 

Vai ficar:

M2[J]=0;

 

 

 

void main(void){

 

Alguns compiladores não aceitam a função main retornando void, troque o retorno por int. Neste caso, vc precisa especificar o retorno. No final da função main basta incluir return 0;

 

Vai ficar:

 

int main(void){

......

......

 

return 0;

}

 

Qualquer coisa é só falar

Share this post


Link to post
Share on other sites

Sei que o tópico é antigo, mas o código está dando erro, alguém pode me ajudar?

 

AUX=-M[0];

error: wrong type argument to unary minus

 

CPIVO=M[COLUNA];

error: assignment to expression with array type

 

if(CPIVO!=0 && CPIVO!=MAIOR){

error: invalid operands to binary != (have 'float *' and 'float')

 

N=M[V+1];

error: incompatible types when assigning to type 'float' from type 'float *'

 

NUM=N/CPIVO;

error: invalid operands to binary / (have 'float' and 'float *')

 

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×

Important Information

Ao usar o fórum, você concorda com nossos Terms of Use.