【问题标题】:Search a 3d Array搜索 3d 数组
【发布时间】:2014-12-02 12:33:18
【问题描述】:

我需要有关输入搜索数组的帮助。我尝试进行二进制搜索,但无法正常工作。一切正常,直到我将要搜索的值放入数组中,然后它就崩溃了。

它的工作原理: 输入 2 个坐标,每个坐标都有一个值 然后它计算它们之间的距离 然后假设让用户在坐标中搜索一个值和状态,如果找到它所在的坐标。

谢谢

#include "stdafx.h"
#include <iostream>
#include <iomanip>  //for setprecision
#include <math.h>
#include <cstdbool>
#include <cstdlib>  // Needed for rand and srand
#include <ctime>    // Needed for the time function


using namespace std;


//Function Prototypes
void processThroughArray(int[][10][10], int, int, int, int, int, int);
int searchArray(int[][10][10], int, int, int, int, int, int, int, int);
const int SIZE = 10;

int main()
{

// establish array and set all values to 0
int myArray[10][10][10] = { 0 };

// establish x and y position markers
int x = 0;
int y = 0;
int z = 0;
int x2 = 0;
int y2 = 0;
int z2 = 0;


// establish input for x and y from the user
int xInput = 0;
int yInput = 0;
int zInput = 0;
int xInput2 = 0;
int yInput2 = 0;
int zInput2 = 0;

// variable for value entered
int inputValue = 0;
int inputValue2 = 0;
double distance = 0;
int searchValue;
int result;


// Get the user's value and coordinate
cout << "\nPlease enter the x coordinate ";
cin >> xInput;
cout << "\nPlease enter the y coordinate ";
cin >> yInput;
cout << "\nPlease enter the z coordinate ";
cin >> zInput;


cout << "\nPlease enter the value to place in " << xInput << "," << yInput << "," << zInput << " ";
cin >> inputValue;

// Get the user's ending value and coordinate
cout << "\nPlease enter the ending x coordinate ";
cin >> xInput2;
cout << "\nPlease enter the ending y coordinate ";
cin >> yInput2;
cout << "\nPlease enter the ending z coordinate ";
cin >> zInput2;


cout << "\nPlease enter the value to place in " << xInput2 << "," << yInput2 << "," << zInput2 << " ";
cin >> inputValue2;

// place the value in the coordinate
myArray[xInput][yInput][zInput] = inputValue;
cout << "\nYou have successfully placed the value " << inputValue << " in coordinate " << xInput << ", " << yInput << ", " << zInput << " ";

myArray[xInput2][yInput2][zInput2] = inputValue2;
cout << "\nYou have successfully placed the value " << inputValue2 << " in coordinate " << xInput2 << ", " << yInput2 << ", " << zInput2 << " ";

//Function performing for loop
processThroughArray(myArray, x, y, z, x2, y2, z2);

//calculate distance between the two coordinates
distance = sqrt(pow(xInput2 - xInput, 2.0) + pow(yInput2 - yInput, 2.0) + pow(zInput2 - zInput, 2.0));
cout << "\nThe distance between " << xInput << "," << yInput << "," << zInput << " and " << xInput2 << "," << yInput2 << "," << zInput2 << " is ";
cout << setprecision(4) << distance << endl;


// indicate end of array processing
cout << "\nArray Processed" << endl;

//User inputs value to search for
cout << "Enter the value you wish to look for: ";
cin >> searchValue;

result = searchArray(myArray, SIZE, searchValue, x, y, z, x2, y2,z2);

//If results contains a -1 the value not found

if (result == -1 )
{
    cout << "That number does not exists in the array.\n";
}

else 
{
    cout << "\nValue " << searchValue;
    cout << " is located at position: " << result << endl;

}




system("pause");
return 0;
}


//**************************************************************************
// Definition of function processThroughArray: Process through the array   *
//the for loop                                                             *
//**************************************************************************
void processThroughArray(int myArray[][10][10], int x, int y, int z, int x2, int y2, int z2)
{

for (int x = 0, x2 = 0; x<10, x2 < 10; x++, x2++)
{
    for (int y = 0, y2 = 0; y<10, y2 < 10; y++, y2++)

    {
        for (int z = 0, z2 = 0; z< 10, z2 < 10; z++, z2++)
        {

            // Display the value of the coordinate
            cout << "\nCordinate " << x << ", " << y << ", " << z << " value is " << myArray[x, x2][y, y2][z, z2];

        }
    }
}



}

//**************************************************************************
// Definition of function searchArray: search array for the value input    *
//                                                                         *
//**************************************************************************
int searchArray(int myArray[][10][10], int size, int value,int x, int y, int z, int x2, int y2, int z2)
{
int index = 0;
int position = -1;
bool found = false;


while (index < size && !found)
{
    if (myArray[index][index][index] == value)
    {
        found = true;
        position = index;

    }
    index++;

} 

return position;
}

【问题讨论】:

    标签: c++ arrays search multidimensional-array


    【解决方案1】:

    您将 SIZE 定义为 1000,并将其传递给 searchArray():

    const int SIZE = 1000;
    
    // ...
    
    searchArray(myArray, SIZE, searchValue);
    

    您在 searchArray() 中执行以下操作:

    int searchArray(int myArray[][10][10], int size, int value)
    {
        int first = 0,
            last = size - 1,
    

    由于size 为 1000,因此您将“first”设置为 0,将“last”设置为 999。

    然后,您正在执行以下操作(省略一些不相关的内容):

    middle = (first + last) / 2;
    if (myArray[middle][middle][middle] = value)
    

    所以,让我们拿出一张纸和一支铅笔。由于“first”为 0,“last”为 999,因此将“middle”设置为 449。

    所以,我们这里有两个问题:

    1) 您使用“=”运算符进行分配,而不是使用“==”进行比较,这似乎是您的意图。

    2) 您正在为 myArray[449][449][449] 赋值。不幸的是,您的数组要小得多:

    int myArray[10][10][10] = { 0 };
    

    尝试访问由十个元素组成的第 449 个数组、由十个元素组成的第 449 个数组中的第 449 个元素不会很好地工作。即使您正在比较或分配某些东西,无论哪种方式,这都是未定义的行为,并且几乎肯定会崩溃。

    【讨论】:

    • 这里有更新。我已经完成了线性搜索,但不太确定我在这一点上做错了什么。我目前遇到的问题是它没有正确搜索数组。它找到第一个数字,但找不到第二个数字。也仍然无法输入它所在的坐标,但我确定我需要专注于修复第一部分,然后再继续。谢谢,安吉拉
    • 新版本的代码会检查myArray[0][0][0],然后是myArray[1][1][1],以此类推,直到myArray[9][ 9][9]。它只会搜索数组中的 10 个元素,而完全忽略其他 990 个元素。因此,除非您正在搜索只能在这 10 个坐标中找到的东西,否则您将找不到它。
    猜你喜欢
    • 2018-05-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-23
    • 1970-01-01
    • 2019-12-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多