Error in a function check

1

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

To illustrate:

Okay,sogood.Theproblemisthataftertheuserentersthevaluesthefunctionshouldsaywhichisthesmallestnumberinthisrangedelimitedbythediagonals,butthisdoesnothappen.

voidmenor(int*matriz[][n]){intl,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);
}
    
asked by anonymous 07.04.2015 / 05:07

1 answer

1

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

Output:

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 when working with arrays always keep in mind that indexes start with 0 and end in Order-1.

    
08.04.2015 / 02:58