Parte 1: Escrever uma função para verificar se um dado vetor
de dimensão
é igual a um dado vetor
também de dimensão D. A função deve ser do tipo int e se os dois vetores forem iguais ela deve retornar o valor 1 , caso contrário ela retorna o valor zero.
Parte 2: Utilize o subprograma da Parte 1 em um programa principal que lê uma matriz
de dimensão
e um vetor
de dimensão M e verifique se o vetor V aparece na matriz A como uma linha.
Se isso ocorrer informe a linha da matriz que é igual ao vetor. Caso contrário informe que o vetor não é igual a nenhuma linha da matriz.
O programa deve fornecer também como saída a matriz lida e o vetor lido.
Se isso ocorrer informe a linha da matriz que é igual ao vetor. Caso contrário informe que o vetor não é igual a nenhuma linha da matriz.
O programa deve fornecer também como saída a matriz lida e o vetor lido.
Passo 1
O exercício pede duas coisas principais: (1) criar uma função que compare dois vetores R e S de tamanho D e retorne 1 se forem iguais e 0 caso contrário; (2) usar essa função em um programa principal que leia uma matriz A de dimensão M×N e um vetor V de dimensão N, imprima ambos e verifique se V coincide com alguma linha de A, informando a posição ou exibindo mensagem de não encontrada.
Passo 2
Para comparar vetores em C, a ideia é percorrer todos os índices de 0 até D–1 e checar se R[i] != S[i]. Se em algum ponto forem diferentes, já podemos retornar 0. Se o laço terminar sem discrepâncias, retornamos 1. Esse padrão evita loops desnecessários após detectar a primeira diferença.
Implementamos então a função de comparação de vetores em C:
Implementamos então a função de comparação de vetores em C:
int comparaVetores(int R[], int S[], int D) {
for (int i = 0; i < D; i++) {
if (R[i] != S[i]) {
return 0;
}
}
return 1;
}
Passo 3
No programa principal, vamos:
a) ler M e N do usuário;
b) criar a matriz A[M][N] e o vetor V[N];
c) preencher A e V com laços for;
d) imprimir a matriz e o vetor para conferência.
a) ler M e N do usuário;
b) criar a matriz A[M][N] e o vetor V[N];
c) preencher A e V com laços for;
d) imprimir a matriz e o vetor para conferência.
Passo 4
Para imprimir a matriz A fazemos dois loops aninhados, um sobre as linhas i (0≤i<M) e outro sobre as colunas j (0≤j<N), exibindo cada A[i][j]. Para o vetor V, percorremos j de 0 a N–1 e imprimimos V[j].
Em seguida, iteramos cada linha i de A e chamamos comparaVetores(A[i], V, N). Se o retorno for 1, guardamos i, imprimimos que o vetor está na linha i e interrompemos a busca. Se o laço terminar sem encontrar correspondência, imprimimos mensagem de não encontrada.
Em seguida, iteramos cada linha i de A e chamamos comparaVetores(A[i], V, N). Se o retorno for 1, guardamos i, imprimimos que o vetor está na linha i e interrompemos a busca. Se o laço terminar sem encontrar correspondência, imprimimos mensagem de não encontrada.
Passo 5
Juntando tudo, nosso programa em C fica assim:
Resposta
#include <stdio.h>
#include <stdlib.h>
#include <stdlib.h>
int comparaVetores(int R[], int S[], int D) {
for (int i = 0; i < D; i++) {
if (R[i] != S[i]) {
return 0;
}
}
return 1;
}
for (int i = 0; i < D; i++) {
if (R[i] != S[i]) {
return 0;
}
}
return 1;
}
int main() {
int M, N;
printf(“Digite o número de linhas M e de colunas N da matriz: “);
if (scanf(”%d %d”, &M, &N) != 2) {
printf(“Entrada inválida.\n”);
return 1;
}
int M, N;
printf(“Digite o número de linhas M e de colunas N da matriz: “);
if (scanf(”%d %d”, &M, &N) != 2) {
printf(“Entrada inválida.\n”);
return 1;
}
int **A = malloc(M * sizeof(int*));
for (int i = 0; i < M; i++) {
A[i] = malloc(N * sizeof(int));
}
int *V = malloc(N * sizeof(int));
// Leitura da matriz A
printf("Digite os elementos da matriz A (%d x %d):\n", M, N);
for (int i = 0; i < M; i++) {
for (int j = 0; j < N; j++) {
scanf("%d", &A[i][j]);
}
}
// Leitura do vetor V
printf("Digite os %d elementos do vetor V:\n", N);
for (int j = 0; j < N; j++) {
scanf("%d", &V[j]);
}
// Impressão da matriz
printf("Matriz A lida:\n");
for (int i = 0; i < M; i++) {
for (int j = 0; j < N; j++) {
printf("%d ", A[i][j]);
}
printf("\n");
}
// Impressão do vetor
printf("Vetor V lido: ");
for (int j = 0; j < N; j++) {
printf("%d ", V[j]);
}
printf("\n");
// Verificação de linha igual a V
int linhaEncontrada = -1;
for (int i = 0; i < M; i++) {
if (comparaVetores(A[i], V, N)) {
linhaEncontrada = i;
break;
}
}
if (linhaEncontrada >= 0) {
printf("O vetor V aparece na matriz como linha %d.\n", linhaEncontrada);
} else {
printf("O vetor V não é igual a nenhuma linha da matriz.\n");
}
// Libera memória
for (int i = 0; i < M; i++) {
free(A[i]);
}
free(A);
free(V);
return 0;
}