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.
Confusion pointers - integers; revise matrix statement,
cc -Wall
.– JJoao
Try to change
menorx = 0;
formenorx = INT_MAX
(adding#include <limits.h>
to the code).– Luiz Vieira
You really can’t assume the size of menorx. Assign it to a value of the array itself and then compare it among others.
– Rafael Bluhm