2010-05-10 2 views
1

У меня есть проблема. Я уже сделал часть его, однако я застрял и не знаю точно, что делать дальше.C++ Boolean problem (сравнение между двумя массивами)

Вопрос: «Вам даны два массива из целых чисел, названных A и B. Один содержит AMAXELEMENTS, а другой содержит BMAXELEMENTS. Напишите функцию с булевым значением, которая возвращает true, если в A есть хотя бы одна точка, то же, что и точка в B, и false, если нет совпадения между двумя массивами. "

Два массива составлены мною, я думаю, что если я знаю, как сравнивать два массива, все будет хорошо, и я сможет завершить мою проблему.

Это то, что я до сих пор (я изменил AMAXELEMENTS к AMAX и BMAXELEMENTS к BMAX):

#include <iostream> 
using namespace std; 

int main() 
{ 
    const int AMAX = 5, BMAX = 6; 
    int i; 
    bool c1 = true, c2 = false; 
    int A[AMAX] = { 2, 4, 1, 5, 9 }; 
    int B[BMAX] = { 9, 12, 32, 43, 23, 11 }; 

    for (i = 0; i < BMAX; i++) 
     if (B[i] == A[i])  // <---- I think this part has to look 
           //  different, but I can't figure it out. 
      cout << c1 << endl; 
     else 
      cout << c2 << endl; 
    return 0; 
} 
+0

Хмм неопределенное поведение. – kennytm

+2

Вам нужно вернуть true, если существует 'i', так что' A [i] == B [i] 'или если есть' i, j', что 'A [i] == B [j ] '? –

+2

Более серьезная проблема заключается в том, что вы переходите через границы массива A! BMAX выше AMAX, и ваш цикл завершит проверку памяти за массивом A, который даже не выделен для него! – LukeN

ответ

4

Это выглядит как домашнее задание, поэтому я не буду кормить вас ответ. Но я укажу на некоторые основные проблемы.

Во-первых, вы пытаетесь определить функцию, которая возвращает истину/ложь:

bool has_identical_value(int A[], size_t A_MAX, int B[], size_t B_MAX) 
{ 
    bool answer = false; 

    ... your homework goes here ... 

    return answer; 
} 

Во-вторых, чтобы убедиться, что вы никогда не ссылаться на A[i] где i >= A_MAX и вы никогда не ссылаться на B[j] где j >= B_MAX.

+0

Это на самом деле проблема с экзаменом образца, я пытаюсь сделать это как свою практику. – Martin

2

Вы должны пересечь 2 массива, а не более 1 массив для сравнения. Иначе вы будете сравнивать 2 с 9, 4 с 12 и т.д.

Здесь некоторые указательного в правильном направлении:

for(i=0;i<BMAX;i++) 
{ 
    for (j=0;j<AMAX;j++) 
    { 
     if (B[i]==A[j]) 
     { 
     } 
     else 
     { 
     } 
    } 
} 

Вы должны обернуть его в функции как Ваш вопрос состояния.

0

Прежде всего, вы должны написать функцию. Затем узнайте о функциях, потому что похоже, что в настоящее время вы не знаете, что такое функция.

И вот подсказка, что ваша петля делает не так?

for(i=0;i<BMAX;i++) 
    if (B[i]==A[i]) //A[BMAX - 1]??? 
+0

Не нужно сарказма (я тебя не деню) –

+0

@Romain Hippeau ???????? – doc

+0

Я только что увидел фразу «у вас нет подсказки» как немного саркастичный. –

0

мой ответ снова ... после нескольких часов работы с этим :) Спасибо за помощь!

включая

использование пространства имен std;

bool myBool (int, int, int [], int []);

int main(){ 

    const int SIZEA=5; 
    const int SIZEB=4; 
int A[]={54,65,76,67,4}; 
    int B[]={23,435,67,5}; 

    if (myBool(SIZEA, SIZEB,A,B)) 
    cout<<"TRUE"<<endl; 

    else 
    cout<<"FALSE"<<endl; 
    return 0; 

}

bool myBool(int AMAXELEMENTS, int BMAXELEMENTS, int A[], int B[]){ 
    int i,j; 

    for(i=0;i<AMAXELEMENTS;i++){ 
    for(j=0;j<BMAXELEMENTS;j++){ 
     if(A[i]==B[j]) 
      return true;  
    } 
    } 
    return false; 

}

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