Error in a function check

Asked

Viewed 84 times

1

I need to make a code with several specific functions. In one of them, with a square matrix, I need to trace a primary and a secondary line, both cutting in the middle diagonally, leaving the higher numbers to be analyzed. Example: A 3 by 3 matrix would cut and remain the 0.

To illustrate:

inserir a descrição da imagem aqui

Okay, so far so good. The problem is that after the user enters the values the function should tell which is the smallest number in this range delimited by the diagonals, but this does not occur.

Follow the function with problem, if you need send the whole code, but the rest is fine, I think it does not influence.

void menor(int *matriz [][n])
{
int l,c,menorx;
menorx =0;
for (l=1; l<n; l++){
    for (c=l;c<n-l;c++){
        if(matriz[l][c]<menorx)
            menorx = matriz[l][c];
    }
}
printf("O menor valor eh %d",menorx);
}
  • 2

    Confusion pointers - integers; revise matrix statement, cc -Wall.

  • Try to change menorx = 0; for menorx = INT_MAX (adding #include <limits.h> to the code).

  • You really can’t assume the size of menorx. Assign it to a value of the array itself and then compare it among others.

1 answer

1


I hope it’s what you’re looking for. The comments in the code try to explain what the program does. Any doubt post in the comments of the question and I will try to explain better.

Exit:

Matriz normal:
6 2 5 0 
4 3 7 5 
9 1 5 10 
6 11 8 12 

parte superior:
6 2 5 0 
* 3 7 * 
* * * * 
* * * * 

Menor valor: 0

Code:

#include <stdio.h> 

/* Define a matriz como 4x4. Outros tamanhos podem
   ser utilizados. O código pode ser alterado para
   pedir que o usuário preencha o aranjo */
#define N 4

/* Mostra o menor valor da região */
void menor(const int [][N], int);

/* Mostra o arranjo tal qual é */
void imprimir(const int [][N], int);

/* Mostra a região do array a ser analisada */
void imprimirSup(const int [][N], int);

int main(void)
{
    /* Matriz de exemplo (teste outras!) */
    int matriz[N][N] = {{6, 2, 5, 0}, {4, 3, 7, 5}, {9, 1, 5, 10}, {6, 11, 8, 12}}; 
    /* Imprime normalmente */
    imprimir(matriz, N);

    printf("\n");

    /* Imprime região */
    imprimirSup(matriz, N);

    printf("\n");

    /* Mostra o menor valor inteiro da região */
    menor(matriz, N);

    return 0;
}

void menor(const int arr[][N], int tam){

    int i, j;

    /* Inicialmente supõe que o menor valor será 
       será o primeiro elemento do array, pois até 
       arranjos 1x1 possuem esse elemento e você garante
       pegar um elemento válido inicialmente */
    int menor = arr[0][0];

    /* Dá um loop e varre toda matriz, mas somente atribui valores 
       àqueles que estão na mesma região da função imprimirSup */
    for(i = 0; i < tam; i++){
        for(j = 0; j < tam; j++){

            if(i <= j && (j + i) < N)
                /* Caso o atual seja menor o atribui como menor */
                if(arr[i][j] <= menor)
                    menor = arr[i][j];                      
        }
    }   

    printf("Menor valor: %d\n", menor);     
}

 /* imprime todo o arranjo */
void imprimir(const int arr[][N], int tam){

    int i, j;

    printf("Matriz normal:\n"); 

    for(i = 0; i < tam; i++){
        for(j = 0; j < tam; j++)
            printf("%d ", arr[i][j]);

        printf("\n"); 
    }       
}

/* Imprime somente a região a ser analisada */
void imprimirSup(const int arr[][N], int tam){

    int i, j;

    printf("parte superior:\n");

    for(i = 0; i < tam; i++){
        for(j = 0; j < tam; j++){

            if(i <= j && (j + i) < N)
                printf("%d ", arr[i][j]);

            else
                printf("* ");       
        }
        printf("\n"); 
    }       
}

Remember that when working with arrays always keep in mind that indexes start with 0 and end in Order - 1.

Browser other questions tagged

You are not signed in. Login or sign up in order to post.