recursividade em C - menor da matriz - Ajuda [RESOLVIDO]

1. recursividade em C - menor da matriz - Ajuda [RESOLVIDO]

Renan
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);
}

}

}






  


2. recursividade em C - menor da matriz - Ajuda

Renan
renanrafhael

(usa Ubuntu)

Enviado em 23/04/2012 - 11:01h

Alguém tem idéia de como fazer a função recursiva de menorElemento. esta função da menor do Elemento. Ela passa a menor do elemento a matriz2 que é 2 por 2. Exemplo:

1 2 3
4 5 6
7 8 9

linha: 0, coluna: 0
Ele deleta a linha 0 e coluna 0.
menor da matriz será:

5 6
8 9

Alguém corrige a minha função recursiva.


3. Re: recursividade em C - menor da matriz - Ajuda [RESOLVIDO]

Renan
renanrafhael

(usa Ubuntu)

Enviado em 23/04/2012 - 13:57h

Deu certo a função recursiva!
era um simples if (j>2). Pensei tudo certo!

O código completo ficou assim:

#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");
}
}
void informe(int *l, int *c){
printf("Dada matriz 3 por 3, digite: ");
printf("A linha: ");
scanf("%d", l);
printf("A coluna: ");
scanf("%d", c);
}
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==2){
cont2=0;
cont1=1;
}
MenorElemento(matriz, matriz2, linha, coluna, i, ++j, cont1, cont2);
}

if (j>2){
j=0;
MenorElemento(matriz, matriz2, linha, coluna, ++i, j, cont1, cont2);
}

}

}
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, c;
informe(&l, &c);

MenorElemento(matriz, matriz2, l, c, 0, 0, 0, 0);
mostraMenor(matriz2);

getch();
getch();
return(0);
}

Talvez sirva pra alguém que quer ver como ficaria uma função recursiva sem os dois for(i, j) para percorrer toda a matriz.






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts