exercicio vetores

1. exercicio vetores

Daniel
danielcrvg

(usa Slackware)

Enviado em 17/09/2012 - 15:09h

ola boa tarde,

estou tentando fazer esse simples programa, que consiste em analisar 2 vetores, e imprimir um 3 vetor somente com os valores iguais. Se nao forem iguais, imprimir um '0' no lugar correspondente..

** Obs: os valores podem estar iguais independente da posicao, ou seja, se no vetor "a" na posicao 3 o valor for "34", se ele se repetir no vetor 2 independente da posicao, ele imprime o 34 no terceiro vetor...

#include <stdlib.h>
#include <stdio.h>
#include <ctype.h>
#include <string.h>

int main () {

int vet1[5];
int vet2[5];
int res[5];

int i,j;

j=1;
for (i=0; i<5; i++) {
printf("digite o %d numero do 1 vetor: ",j);
scanf("%d",&vet1[i]);
j++;
}
printf("\n");
j=1;
for (i=0; i<5; i++) {
printf("digite o %d numero do 2 vetor: ",j);
scanf("%d",&vet2[i]);
j++;
}
for (i=0; i<5; i++) { //Aqui estou querendo verificar se a posicao 0, é igual a qualquer outra
for (j=0; j<5; j++) { //posicao no outro vetor2, por isso coloquei um for dentro de outro for.
if (vet1[[ii]] == vet2[j]) {// Se na posicao inicial "0" o valor for igual a qualquer outra posicao no outro
res[j] = vet2[j]; //vetor2, o vetor 3(no caso 'res') deve pegar o valor igual, se nao ele deixa
} else { //como '0'.
res[j] = 0; // Quero que ele faca este ciclo com todas as posicoes do vetor 1 comparando
} //com todas as posicoes do vetor2.
}
}
for (i=0; i<5; i++) {
printf("%d",res[i]);
}
printf("\n");
return 0;
}



Eu no maximo consegui comparar 2 posicoes iguais, mas quero fazer um ciclo para comparar todas as posicoes. Se alguem souber ai a solucao fico agradecido,

Obirgado,


Daniel.


  


2. Re: exercicio vetores

Marcos Paulo Ferreira
daemonio

(usa Slackware)

Enviado em 03/10/2012 - 09:55h

Olá,

Já resolveu o problema?

Parece que você fez a leitura corretamente. Só notei que você precisa de outra variável para determinar a posição livre do vetor final.


int k = 0;
/* etc */
for (i=0; i<5; i++) {
for (j=0; j<5; j++) {
if (vet1[i] == vet2[j]) {
res[k] = vet2[j];
k++ ;
}
}

for(i=0; i < k; i++) { /* imprima vetor */ }


Ao se usar dois loop você já garante que toda posição de vet1 seja comparada com toda posição de vet2.

O código parece funcionar normalmente se há apenas um par igual nos dois vetores. Para poder repetir qualquer quantidade, o vetor res deveria ter mais posições. Outra possibilidade seria percorrer o vetor res em cada atribuição para se verificar e evitar elementos repetidos.

t+


3. Re: exercicio vetores

Paulo
paulo1205

(usa Ubuntu)

Enviado em 04/10/2012 - 00:16h

Penso que uma da formas mais eficientes de resolver tal problema é ordenar os dois vetores de entrada. Fazendo isso, em lugar de ter uma busca em que você terá de comparar todos de um lado com todos os do outro (O(n·m) ou O(n²)), você pode percorrer os vetores ordenados da uma única vez, e ainda lidar mais facilmente com repetições. Se você selecionar um boam algoritmo de ordenação (O(n·log(n))), terá um custo total final menor.

int v1[MAX], v2[MAX], v3[MAX];
int size_v1, size_v2, size_v3;
int iv1, iv2, iv3;

/* Lê quantidade de elementos de cada vetor e cada elemento propriamente dito. */
size_v1=le_vetor(v1, MAX);
size_v2=le_vetor(v2, MAX);

/* ordena os vetores */
ordena(v1);
ordena(v2);

/* Coloca num terceiro array os valores que aparecem nos dois outros */
size_v3=0;
iv1=iv2=0;
while(iv1<size_v1 && iv2<size_v2) {
if(v1[iv1]==v2[iv2]){
/* Acrescenta o valor comum no array v3. */
v3[size_v3++]=v1[iv1];
iv1++;
iv2++;

/* Pula possíveis repetições do valor em ambos os vetores */
while(iv1<size_v1 && v1[iv1]==v1[iv1-1])
iv1++;
while(iv2<size_v2 && v2[iv2]==v2[iv2-1])
iv2++;
}
while(iv1<size_v1 && (iv2>=size_v2 || v1[iv1]<v2[iv2]))
iv1++;
while(iv2<size_v2 && (iv1>=size_v1 || v2[iv2]<v1[iv1]))
iv2++;
}







Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts