[问题] 使用副程式呼叫动态阵列做运算

楼主: moussorgsky (法国号有气质)   2015-07-22 23:41:48
开发平台(Platform): (Ex: VC++, GCC, Linux, ...) VC++
额外使用到的函数库(Library Used): (Ex: OpenGL, ...)
问题(Question):
严格讲起来有两个,但我不知道是否解决了一个,另一个也可以使用同样的概念去解决..
....
有两组阵列,一个是bool型态,另一个是double型态。
在main()中呼叫两组动态阵列,它们的初始值已经在副程式中给过了。
我知道如何在main()中改它们的值,但我不知道如何将他们传到另外的副程式中,在该
副程式中做运算、改变它们的值,再将他们传回到main()中......
我把问题直接在下面的程式码中叙述。
喂入的资料(Input):
预期的正确结果(Expected Output):
错误结果(Wrong Output):
程式码(Code):(请善用置底文网页, 记得排版)
#include <iostream>
using std::cout;
using std::cin;
using std::ios;
using std::cerr;
using std::endl;
#include <stdio.h>
#include <fstream>
using namespace std;
using std::ifstream;
using std::ofstream;
#include <cstdlib>
#include <math.h>
void read_obstacles();
//我在main()中呼叫obst(它是二维动态阵列,在呼叫的副程式中已经给初始值了,假设
//全部都是0),
//我另有一个txt档,里面有"座标",我想用read_obstacles()这个副程式来读这个txt
//档,只要"座标"符合obst这个阵列的"元素值",它的bool值就改设成1
//我用过void这个宣告,compile会过,但跑到一半就会出现
//想请教这边应该怎么改、main()中应该如何呼叫、最下面的副程式该如何写呢?
ifstream inobst("obst.txt", ios::in);
//这个txt档的内容如下
2 0
2 1
2 2
2 3
0 0
0 1
0 2
0 3
0 0
1 0
2 0
0 3
1 3
2 3
double ***create_3D_Array(int a, int b, int c);
bool **create_2D_Array_b(int a, int b);
bool **obst;
//########################################################################
int main()
{
int a,b,c;
int i,j,k;
a = 4;
b = 3;
c = 3;
double ***arr = create_3D_Array(a,b,c);
bool **obst = create_2D_Array_b(b,a);
//如果上面的宣告不改,最下面的副程式写法也不改,且没有在main中呼叫
//read_obstacles()的话,是不会有任何问题的
//但呼叫read_obstacles()的话,就会出现The variable 'b' is being
//used without being initialized.
//请问上面的宣告、这里的呼叫、最下面的副程式应该怎么改
//才能读进txt档的资料以改变obst的元素值呢?
cout << "3D:" << endl;
for(i=0; i<=a-1; i++){
arr[i][0][0] = i;
}
//第二个问题其实跟第一个问题很雷同:
//就是我可以在main中去更改arr的元素值,但要如何将它们传到别的副程
//式中去做运算,再传回来main中呢?
system("pause");
return 0;
}
double ***create_3D_Array(int a, int b, int c)
//########################################################################
{
double ***A = new double**[a];
for (int i = 0 ; i < a ; i++)
{
A[i] = new double*[b];
for (int j = 0 ; j < b ; j++)
{
A[i][j] = new double[c];
}
}
for (int i = 0 ; i < a ; i++)
for (int j = 0 ; j < b ; j++)
for (int k = 0 ; k < c ; k++)
A[i][j][k] = 0;
return A;
}
bool **create_2D_Array_b(int a, int b)
//#########################################################################
{
bool **B = new bool*[a];
for (int i = 0 ; i < a ; i++)
{
B[i] = new bool [b];
}
for (int i = 0 ; i < a ; i++)
for (int j = 0 ; j < b ; j++)
B[i][j] = 0;
return B;
}
void read_obstacles() {
//##############################################################################
int i, j;
int a, b;
for( j=0; j<b; j++)
{
for( i=0; i<a; i++)
{
obst[j][i] = false; //the value of false is 0
}
}
while ( inobst >> j >> i )
obst[j][i] = true; //the value of true is 1
}
// read_obstacles()
补充说明(Supplement):
作者: flyfoxy (飞狐)   2015-07-23 00:02:00
建议用class内宣告要new的指标我以前用你方法这样做好像要多取一次位址丢回main
楼主: moussorgsky (法国号有气质)   2015-07-23 00:15:00
我有想过这问题,因为我做运算的副程式会有好几个,而且传进副程式的动态阵列不会只有一组,这样做好像会很复杂......
作者: stupid0319 (征女友)   2015-07-23 00:17:00
好多***星星**连在一起,眼睛都花了
作者: kaneson (Lance)   2015-07-23 10:43:00
当判断j<b的时候,b是多少??
作者: iWRZ (NE~_~RO)   2015-07-23 15:24:00
拜托 //****** . //----- . //++++ ////////// 之类的拜托少用 看得人很累/****/ 这种就很好用又简洁
作者: MOONRAKER (㊣牛鹤鳗毛人)   2015-07-23 15:26:00
好用又简洁又不是一条横线//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
作者: iWRZ (NE~_~RO)   2015-07-23 15:31:00
//this is a function used for blablabla. ←这样就好了

Links booklink

Contact Us: admin [ a t ] ucptt.com