pirilauzinho Posted June 13, 2013 at 03:52 PM Report #512696 Posted June 13, 2013 at 03:52 PM 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 😉
HappyHippyHippo Posted June 13, 2013 at 09:56 PM Report #512771 Posted June 13, 2013 at 09:56 PM 1º - indenta o código 2º - diz onde tens o código de troca das linhas e das colunas IRC : sim, é algo que ainda existe >> #p@p Portugol Plus
pirilauzinho Posted June 14, 2013 at 04:11 PM Author Report #512985 Posted June 14, 2013 at 04:11 PM #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
pmg Posted June 14, 2013 at 07:00 PM Report #513020 Posted June 14, 2013 at 07:00 PM (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 June 14, 2013 at 07:03 PM 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!
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now