Почему мой графограф печатает несколько экземпляров этой функции? Переполнение стека

У меня есть эта программа, которая графически отображает простые параметрические уравнения на доске определенной длины и ширины. Он прекрасно компилируется, но печатает несколько экземпляров функции в разных позициях графика. Если кто-то может помочь мне понять, почему я получаю этот вывод, я был бы очень признателен. Я включил комментарии по всему коду, чтобы помочь понять, что происходит.
У меня недостаточно репутации, чтобы опубликовать картинку с выводом, но если вы скомпилируете и выполните ее, вы поймете, о чем я говорю.

#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;
}

Пожалуйста, помогите и спасибо всем, кто пытается!

1

Решение

везде в вашей программе, где у вас есть

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;
}
0

Другие решения


По вопросам рекламы [email protected]