2013-09-01 3 views
0

Я хочу написать код (в c), который печатает пересечение двух векторов с длиной «N» и не может печатать тот же номер дважды. Векторы будут заполнены функцией, которая читает ввод (любое число) один за другим. И в конце концов, код должен печатать другой вектор с пересечением первых двух векторов. До сих пор я написал код ниже, но у него есть логическая ошибка, которую я не могу решить.Пересечение 2 векторов, логическая ошибка

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

void preencheVetor(int* v, int tamanho){ 
    int i=0; 
    for(i=0;i<tamanho;i++){ 
     scanf("%d", *(v+i)); 
     printf("\n"); 
    } 
} 

void interVetor(int* v1, int* v2, int tamanho){ 
    int* v3=malloc(sizeof(int)*tamanho); 
    int i1=0; 
    int i2=0; 
    int i3=0; 
    int c=0; 
    for(i1=0;i1<tamanho;i1++){ 
     for(i2=0;i2<tamanho;i2++){ 
      if((v1[i1])==(v2[i2])){ 
       *(v3+c)=v2[i2]; 
       c++; 
      } 
     } 
    } 
    for(i3=0;i3<tamanho;i3++){ 
     printf("%d", *(v3+i3)); 
     printf("\n"); 
    } 
} 

int main(){ 
int n=0; 
printf("Vectors Lenght:\n"); 
scanf("%d", &n); 
printf("\n\n"); 
int v1[n]; 
int v2[n]; 
preencheVetor(v1, n); 
printf("\n\n"); 
preencheVetor(v2, n); 
printf("\n\n"); 
interVetor(v1, v2, n); 
system("PAUSE"); 
return 0; 
} 
+1

Вам нужно определить, что вы подразумеваете под «пересечением двух векторов». Являются ли векторы просто представления множеств и пересечений заданными пересечениями? Если это так, вы, вероятно, захотите сначала удалить дубликаты из векторов и, возможно, захотите каким-то образом их сортировать, чтобы обеспечить каноническое представление множеств (так что идентичные множества всегда будут представлены одинаковыми векторами). Или векторы представляют векторы в пространстве, и вы хотите найти точку, в которой они пересекаются? В этом случае вам нужно что-то совершенно другое ... –

+0

Простым способом я просто хочу создать другой вектор с повторением чисел между двумя исходными векторами. – Student

+0

Просьба описать эту «логическую ошибку». –

ответ

0

Размер вектора v3 является c не tamanho. Зафиксируйте петлю for(i3...). Кроме этого, я думаю, что ваше пересечение работает нормально. Это очень неэффективно, конечно, если векторы не отсортированы.

+0

Да, были две проблемы, одна из которых вы сказали, и неверный формат ввода на scanf, но его работа (: – Student

Смежные вопросы