2014-12-03 23 views
1

我有这个程序,可以在我定义的长度和宽度的棋盘上绘制简单的参数方程。它编译得很好,但在图的不同位置打印了多个函数实例。如果有人能帮我弄清楚为什么我得到这个输出,我将不胜感激。我在整个代码中加入了一些意见,以帮助理解发生了什么。 我没有足够的声望发布输出图片,但如果您编译并执行它,您将看到我在说什么。为什么我的绘图师打印该函数的多个实例? C++

#include <iostream> 
#include <cstdlib> 
#include <unistd.h> 
#include <time.h> 
#include <cmath> 
using namespace std; 

#define N 25 
#define M 60 

/* 
    This function prints the board each time it is called and places an * 
    in the place corresponding to the value of the function. 
*/ 
void print_board(char p[M][N]) { 
    int i, j; 
    for (i=0; i<=N; i++) { 
     for (j=0; j<=M; j++) 
       if (i==0)  cout << '='; 
      else if (j==0)  cout << '|'; 
      else if (i==N)  cout << '='; 
      else if (j==M)  cout << '|'; 
      else if (p[i][j]== '*') cout << '*'; 
      else   cout << ' '; 
     cout << endl; 
    } 
} 
/* 
    These functions accepts an integer for time and computes a value for x and y 
    for the parametirc equations given and returns each. 
*/ 
int fx(int t) { 

    int x = t; 

    return x; 
} 

int fy(int t) { 

    //int y = 5 * sin(0.2 * t) + 15; 
    int y = (pow(t,2)/60) - t + 25; 

    return y; 
} 

/* 
    This function copies the old board and comoputes what the new board is. 
*/ 
void next_board(char p[M][N], int t) { 
    int i, j; 

    //copies the old board 
    int q[M][N]; 
    for (i=0; i<=N; i++) { 
     for (j=0; j<=M; j++) { 
      q[i][j] = p[i][j]; 
     } 
    } 

    //creates the new board 
    int x, y; 
    for (i=0; i<=N; i++) { 
     for (j=0; j<=M; j++) { 
      x = fx(t); 
      y = fy(t); 

      if (i == y && j == x) { 
       p[i][j] = '*'; //stores an * for the values of x and y 
      } 
     } 
    } 

} 

int main() { 

    char p[M][N]; 

    print_board(p); 

    int t = 0; 
    while(t <= M) { 
     cout << string(80, '\n'); 

     next_board(p , t); 
     print_board(p); 
     usleep(20000); 

     t++; 
    } 

    return 0; 
} 

请帮助和感谢所有谁尝试!

回答

0
在你的程序,你必须

char p[M][N] 

他们改变

char p[N][M] 

,你应该得到的是你几乎期望的结果,你的搅拌轴在程序

继承人的

无处不在整个工作代码,如果你喜欢

#include <iostream> 
#include <cstdlib> 
#include <unistd.h> 
#include <time.h> 
#include <cmath> 
#include <string> 
using namespace std; 

#define N 25 
#define M 60 

/* 
This function prints the board each time it is called and places an * 
in the place corresponding to the value of the function. 
*/ 
void print_board(char p[N][M]) { 
    int i, j; 
    for (i = 0; i <= N; i++) { 
     for (j = 0; j <= M; j++) 
      if (i == 0)  cout << '='; 
      else if (j == 0)  cout << '|'; 
      else if (i == N)  cout << '='; 
      else if (j == M)  cout << '|'; 
      else if (p[i][j] == '*') cout << '*'; 
      else   cout << ' '; 
      cout << endl; 
    } 
} 
/* 
These functions accepts an integer for time and computes a value for x and y 
for the parametirc equations given and returns each. 
*/ 
int fx(int t) { 

    int x = t; 

    return x; 
} 

int fy(int t) { 

    //int y = 5 * sin(0.2 * t) + 15; 
    int y = (pow(t, 2)/60) - t + 25; 

    return y; 
} 

/* 
This function copies the old board and comoputes what the new board is. 
*/ 
void next_board(char p[N][M], int t) { 
    int i, j; 

    //copies the old board 
    int q[M][N]; 
    for (i = 0; i <= N; i++) { 
     for (j = 0; j <= M; j++) { 
      q[i][j] = p[i][j]; 
     } 
    } 

    //creates the new board 
    int x, y; 

    for (i = 0; i <= N; i++) { 

     for (j = 0; j <= M; j++) { 
      x = fx(t); 
      y = fy(t); 

      if (i == y && j == x) { 
       p[i][j] = '*'; //stores an * for the values of x and y 
      } 
     } 
    } 

} 

int main() { 

    char p[N][M]; 

    print_board(p); 

    int t = 0; 
    while (t <= M) { 
     cout << string(80, '\n'); 

     next_board(p, t); 
     print_board(p); 
     usleep(20000); 

     t++; 
    } 

    return 0; 
} 
相关问题