renanrafhael
(usa Ubuntu)
Enviado em 21/04/2012 - 10:59h
Problema:
- Chama-se Menor de um elemento aij de uma matriz quadrada A, a matriz que se obtem eliminando-se a linha i e a coluna j da matriz. Faça um programa em C que leia uma matriz quadrada e calcule a menor da matriz, onde o usuário indique a posição do elemento que deseja calcular a menor. Faça uma função para cada situação. A função que calcula a menor deve ser recursiva.
Gostaria de ajuda para fazer a função menorElemento recursiva.
O código sem recursividade(funcionando):
#include <stdio.h>
#include <stdlib.h>
#define M1 3
#define M2 2
int lerint(){
int i;
printf("\nDigite um valor : ");
scanf("%d", &i);
return(i);
}
int leitura(int matriz[M1][M1]){
int i, j, dado;
for(i = 0; i < M1; i++){
for(j = 0; j < M1; j++){
dado = lerint();
matriz[i][j] = dado;
}
}
}
void imprime(int matriz[M1][M1]){
int i, j;
for(i = 0; i < M1; i++){
for(j = 0; j < M1; j++){
printf("%d \t", matriz[i][j]);
}
printf("\n");
}
}
int MenorElemento(int matriz[M1][M1], int matriz2[M2][M2], int linha, int coluna){
int i, j;
int cont2 = 0, cont1 =0;
for (i =0; i<3; i++){
for (j=0; j<3; j++){
if (i!=linha && j!=coluna){
matriz2[cont1][cont2]=matriz[i][j];
cont2++;
}
if (cont2>1){
cont2=0;
cont1++;
}
}
}
return matriz2;
}
void mostraMenor(int matriz2[M2][M2]){
int i, j;
for (i=0; i<2; i++){
for (j=0; j<2; j++){
printf("%d ",matriz2[i][j]);
}
printf("\n");
}
}
int main(){
int matriz[M1][M1];
int matriz2[2][2];
leitura(matriz);
imprime(matriz);
int l =0, c=1;
printf("Dada matriz 3 por 3, digite a linha e a coluna que deseja eliminar: ");
printf("A linha: ");
scanf("%d", &l);
printf("A coluna: ");
scanf("%d", &c);
MenorElemento(matriz, matriz2, l, c);
mostraMenor(matriz2);
getch();
getch();
return(0);
}
O problema é a menor que tenho que tirar com a função recursiva.
Olha aí a função recursiva(Com erros - é como se tivesse eliminando a primeira linha da menor):
void MenorElemento(int matriz[M1][M1], int matriz2[M2][M2], int linha, int coluna, int i, int j, int cont1, int cont2){
if (i<3){
if (j<3){
if (i!=linha && j!=coluna){
matriz2[cont1][cont2]=matriz[i][j];
cont2++;
}
if (cont2>1){
cont2=0;
cont1++;
}
MenorElemento(matriz, matriz2, linha, coluna, i, ++j, cont1, cont2);
}
if (j<2){
j=0;
MenorElemento(matriz, matriz2, linha, coluna, ++i, j, cont1, cont2);
}
}
}