(3) Escreva um programa para ler uma matriz de inteiros
, um valor digitado pelo usuário e verifique se esse valor encontra-se na matriz.
O programa deve ler os índices
,
, a matriz
e um valor a ser procurado. O programa deve imprimir se encontrou o valor na matriz (“Valor encontrado!”) ou não (“Valor não encontrado!”).
As matrizes devem ser armazenadas utilizando-se alocação dinâmica.
Exemplo de entrada:
Digite o valor de m e n: 32
Digite a matriz:
13
26
-5 0
Digite o valor a ser procurado: -5
Exemplo de saída:
Valor encontrado!
Outro exemplo de entrada:
Digite o valor de men: 44
Digite a matriz:
1234
5678
9101112
13141516
Digite o valor a ser procurado: - 5
Exemplo de saída:
Valor não encontrado!
O programa deve ler os índices
As matrizes devem ser armazenadas utilizando-se alocação dinâmica.
Digite a matriz:
13
26
-5 0
Digite o valor a ser procurado: -5
Digite a matriz:
1234
5678
9101112
13141516
Digite o valor a ser procurado: - 5
Passo 1
Beleza, aqui a ideia é escrever um programa em C que:
- Leia dois valores inteiros
e (por exemplo “3 2” indica 3 linhas e 2 colunas). - Aloque dinamicamente uma matriz
. - Preencha essa matriz com inteiros digitados.
- Leia mais um inteiro “x” a ser procurado na matriz.
- Varra a matriz e diga “Valor encontrado!” se achar “x”, ou “Valor não encontrado!” caso contrário.
O conteúdo envolvido é alocação dinâmica (malloc/free), laços de repetição (for) e condicionais (if).
Passo 2
Primeiro, a gente declara as variáveis
int m, n, i, j, x;
int **A;
int encontrado = 0;
–
–
–
Depois, alocamos
m, n
são dimensões;–
A
vai ser ponteiro para ponteiro (matriz);–
encontrado
é uma flag (0 = não achou, 1 = achou).Depois, alocamos
A
como vetor de m
ponteiros para int:A = (int**) malloc(m * sizeof(int*));
for (i = 0; i < m; i++) {
A[i] = (int*) malloc(n * sizeof(int));
}
Isso cria
m
linhas e cada linha tem n
colunas.Passo 3
Agora, lemos os valores de
m
e n
, e logo em seguida a matriz completa:printf("Digite o valor de m e n: ");
scanf("%d %d", &m, &n);
printf("Digite a matriz:\n");
for (i = 0; i < m; i++) {
for (j = 0; j < n; j++) {
scanf("%d", &A[i][j]);
}
}
Aqui usamos dois loops
for
aninhados: o externo percorre as linhas, o interno as colunas, e scanf
coloca cada número no lugar certo.Passo 4
Lemos o valor
x
que queremos achar e aqui já começamos a busca:printf("Digite o valor a ser procurado: ");
scanf("%d", &x);
for (i = 0; i < m && !encontrado; i++) {
for (j = 0; j < n; j++) {
if (A[i][j] == x) {
encontrado = 1; // achou!
break; // sai do loop das colunas
}
}
}
A gente para a busca assim que encontrar (
encontrado = 1
e break
).Passo 5
É só imprimir o resultado e liberar a memória:
if (encontrado)
printf("Valor encontrado!\n");
else
printf("Valor não encontrado!\n");
for (i = 0; i < m; i++)
free(A[i]);
free(A);
Resposta
#include <stdio.h>
#include <stdlib.h>
int main() {
int m, n, i, j, x;
int **A;
int encontrado = 0;
printf("Digite o valor de m e n: ");
scanf("%d %d", &m, &n);
// alocação dinâmica da matriz
A = (int**) malloc(m * sizeof(int*));
for (i = 0; i < m; i++) {
A[i] = (int*) malloc(n * sizeof(int));
}
// leitura da matriz
printf("Digite a matriz:\n");
for (i = 0; i < m; i++) {
for (j = 0; j < n; j++) {
scanf("%d", &A[i][j]);
}
}
// leitura do valor a procurar
printf("Digite o valor a ser procurado: ");
scanf("%d", &x);
// busca do valor na matriz
for (i = 0; i < m && !encontrado; i++) {
for (j = 0; j < n; j++) {
if (A[i][j] == x) {
encontrado = 1;
break;
}
}
}
// resultado
if (encontrado)
printf("Valor encontrado!\n");
else
printf("Valor não encontrado!\n");
// libera memória
for (i = 0; i < m; i++)
free(A[i]);
free(A);
return 0;
}