Jump to content

[Dúvida] Mover o maior elemento para o centro de uma matriz ímpar


Recommended Posts

Posted

Boas! Estou com o pequeno problema no programa que estou a fazer.

Necessito que o programa troque as linhas e as colunas de modo a mover o maior elemento para o centro da matriz ( o programa está feito por alocação dinâmica e as matrizes são random )

Achei o centro da matriz e aloquei-o nas varáveis linas_centro e colunas_centro e o maior elementro da matriz nas variáveis linha e coluna.


#include<stdio.h>
#include<time.h>
#include<stdlib.h>
#include<math.h>

int main()
{
int **mat_base;
int **mat_completa;
int **mat_rod;
int **mat_troca;
int **teste;
int nlin_base, ncol_base, lin, col;
int i,j,k;
int lim_sup, lim_inf, maior_elemento, menor_elemento, elemento, dimensao, linha, coluna,linhas_centro,colunas_centro;
int opcao, opcao1, aux;
int c,l;
//srand((unsigned) time(NULL));


srand((unsigned) time(NULL));
printf("\nQuais as dimensoes da matriz base a criar?(numero de linhas e numero de colunas)\n");
scanf_s("%d%d",&nlin_base, &ncol_base);

mat_base=(int **)malloc (nlin_base*sizeof(int *));
for(i=0;i<nlin_base;i++)
mat_base[i]=(int*)malloc(ncol_base*sizeof(int));





printf("\nQuais os valores limite do intervalo fechado a considerar para a geracao aleatoria dos elementos da matriz base?[limite_minimo,limite_maximo]\n");
scanf_s("%d%d",&lim_inf, &lim_sup);

for(lin=0;lin<nlin_base;lin++)
for(col=0;col<ncol_base;col++)
mat_base[lin][col]=rand()%((lim_sup-lim_inf)+1)+lim_inf;

printf("\n Matriz base\n");
for(lin=0;lin<nlin_base;lin++)
{
for(col=0;col<ncol_base;col++)
{
printf(" %4d",mat_base[lin][col]);
}
printf("\n");
}

}
///7 - Trocar linhas e colunas para por o maior elemento no centro da matriz com linhas e colunas IMPAR
maior_elemento=0;
for(i=0;i<nlin_base;i++)
for(j=0;j<ncol_base;j++)
{
if(mat_base[i][j]>maior_elemento)
maior_elemento=mat_base[i][j];
linha=i;
coluna=j;

}
printf("\nmaior elemento %d\n", maior_elemento);

linhas_centro=((nlin_base/2));
colunas_centro=((ncol_base/2));
printf("\ncentro[%d][%d]",linhas_centro,colunas_centro);

for(i=0;i<nlin_base;i++){	
for(j=0;j<ncol_base;j++){
 if(i==linha){				
	 aux=mat_base[i][j];		
	 mat_base[i][j]=mat_base[linhas_centro][j];
	 mat_base[linhas_centro][j]=aux;	
 }
 if(j==coluna){				
	 aux=mat_base[i][j];		
	 mat_base[i][j]=mat_base[i][colunas_centro];	
	 mat_base[i][colunas_centro]=aux;		
 }

}

}

printf("\nMatriz centro\n");
for(i=0;i<nlin_base;i++)
{
for(j=0;j<ncol_base;j++)
{
printf(" %4d",mat_base[i][j]);
}
printf("\n");
}
}

Infelizmente não estou a conseguir fazer a troca bem =\

Desde já muito obrigado pela ajuda e cumprimentos 😉

Posted
#include<stdio.h>
#include<time.h>
#include<stdlib.h>
#include<math.h>
int main()
{
 int **mat_base;
 int nlin_base, ncol_base, lin, col;
 int i,j,k;
 int lim_sup, lim_inf, maior_elemento, menor_elemento, elemento, dimensao, linha,        coluna,linhas_centro,colunas_centro;
 int opcao, opcao1, aux;
//int c,l;
//srand((unsigned) time(NULL));

 srand((unsigned) time(NULL));
 printf("\nQuais as dimensoes da matriz base a criar?(numero de linhas e numero de colunas)\n");
 scanf_s("%d%d",&nlin_base, &ncol_base);

 mat_base=(int **)malloc (nlin_base*sizeof(int *));
 for(i=0;i<nlin_base;i++)
      mat_base[i]=(int*)malloc(ncol_base*sizeof(int));

 printf("\nQuais os valores limite do intervalo fechado a considerar para a geracao aleatoria dos    elementos da matriz base?[limite_minimo,limite_maximo]\n");
 scanf_s("%d%d",&lim_inf, &lim_sup);
 for(lin=0;lin<nlin_base;lin++)
    for(col=0;col<ncol_base;col++)
         mat_base[lin][col]=rand()%((lim_sup-lim_inf)+1)+lim_inf;
  printf("\n Matriz base\n");
  for(lin=0;lin<nlin_base;lin++)
  {
        for(col=0;col<ncol_base;col++)
    {
    printf(" %4d",mat_base[lin][col]);  
    }
    printf("\n");
  }

//Maior elemento
  maior_elemento=0;
  for(i=0;i<nlin_base;i++)
       for(j=0;j<ncol_base;j++)
       {
             if(mat_base[i][j]>maior_elemento)
                maior_elemento=mat_base[i][j];
             linha=i;
             coluna=j;
       }
       printf("\nmaior elemento %d\n", maior_elemento);
       linhas_centro=((nlin_base/2));
       colunas_centro=((ncol_base/2));
       printf("\ncentro[%d][%d]",linhas_centro,colunas_centro);

//Trocar linhas e colunas para por o maior elemento no centro da matriz com linhas e colunas IMPAR
   for(i=0;i<nlin_base;i++){	
        for(j=0;j<ncol_base;j++){ // Nesta parte do código faz a troca.
             if(i==linha){				
                     aux=mat_base[i][j];		
                     mat_base[i][j]=mat_base[linhas_centro][j];
                     mat_base[linhas_centro][j]=aux;	
             }
              if(j==coluna){					
                      aux=mat_base[i][j];		
                      mat_base[i][j]=mat_base[i][colunas_centro];	
                      mat_base[i][colunas_centro]=aux;		
              }
        }                
}

   printf("\nMatriz centro\n");
   for(i=0;i<nlin_base;i++)
   {
        for(j=0;j<ncol_base;j++)
       {
             printf(" %4d",mat_base[i][j]);
       }
       printf("\n");
     } 
system("pause");
}

Vejam lá se assim já percebem melhor! Cumpts e obrigado

Posted (edited)
//Maior elemento
  maior_elemento=0;
  for(i=0;i<nlin_base;i++)
       for(j=0;j<ncol_base;j++)
       {
             if(mat_base[i][j]>maior_elemento)
                maior_elemento=mat_base[i][j];
             linha=i;
             coluna=j;
       }

A atribuicao a linha e coluna está, erradamente, fora do if.

Sugestao: habitua-te ao metodo de indentacao que escolheste de modo a nao deixares passar estes enganos facilmente! (ou muda de metodo de indentacao)

Edited by pmg

What have you tried?

Não respondo a dúvidas por PM

A minha bola de cristal está para compor; deve ficar pronta para a semana.

Torna os teus tópicos mais atractivos e legíveis usando a tag CODE para colorir o código!

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
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.