Ir para conteúdo
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.

Editado por Tony Miguel

Compartilhar este post


Link para o post
Compartilhar em outros 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

Compartilhar este post


Link para o post
Compartilhar em outros 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 *')

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar Agora

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.