Member 14087126 Ответов: 2

Как мне распечатать таблицу ?


Используя приведенные ниже уравнения для снаряда, создайте программу, которая строит графики и отображает траекторию полета снаряда. Программа должна иметь следующее:
1)основная функция программы вызовет все вспомогательные функции, но основная функция не выполняет никаких вычислений, она просто вызывает другие функции.
2) функция, которая запрашивает у пользователя ввод инциальной скорости от 10 до 100 м/с и угла от 15 до 75 градусов. Эта функция должна получить только инциальную скорость и угол.
1) функция, которая запрашивает входную скорость и угол у пользователя
2) отдельная функция для вычисления значений x, y и времени, которые помещаются в массив.
3) отдельная функция для отображения таблицы значений и максимальных значений
Отдельная функция, которая отображает выходные данные на графике
3) отдельная функция , которая вычислит значения X, Y и времени и сохранит их в массиве. Каждое вычисление как для X, так и для Y вычислений должно храниться в расположении массива.
4) отдельная функция, которая отображает выходные данные (аналогично приведенному примеру).
5) функция , которая отображает данные из массива в таблице каждого из вычислений, хранящихся в массиве, что-то вроде:
X расстояние Vx Vert расстояние Vy время
: : : : :
: : : : :
: : : : :
: : : : :

6) последняя функция должна распечатать после таблиц, что будет максимальная высота, время на максимальной высоте, общее время полета и максимальная дальность.


Рецептурный
Горизонтальное расстояние, x=Vxt
Горизонтальная скорость, Vx = Vx0
Вертикальное расстояние, y=Vyo*t-.5gt^2
вертикальная скорость, Vy= Vyo -gt

где Vx-скорость вдоль оси
Vxo - начальная скорость вдоль оси x
Vy-скорость вдоль оси y
Vxo - начальная скорость вдоль оси y
G-это гравитационная
т - это время

Время полета, Т= 2восин(угол)/г
Высота,H= Vo^2sin^2(угол)/2g
диапазон, r=Vo^2Sin(2angle)/g

Что я уже пробовал:

#include <iostream>
#include <cmath>
#include <iomanip>
#define pi 3.14159265

using namespace std;


//functions
float cannon();
float calcx();
float calcy();
float calch();
float calcr();
float flightt();


float graph();
float time();
float array1[];
float array2[];
float array3[];

void display();

//inputs-----
float vi;//intial velocity
float angle;
float x;
float vx;
double w,o;
double TotalFlight;

double z;
double stime;


float height;
float range;


int main() {
	int stop;
	cannon();
	display();
	
	cin >> stop;
	return 0;	
}

float cannon() {

	cout << "Enter inital velocity between 10 and 100 m/sec" << endl;
	cin >> vi;
	cout << "Enter an angle between 15 to 75 degrees" << endl;
	cin >> angle;

	return angle;
}
float calcx() {//HORIZONTAL DISTANCE
		x = vi * z;
return x;

}
float calcy() { //HORIZONTAL VELOCSIT

	vx = (vi*z) - ((.5)*9.8*powf(z, 2));

	return vx;
}
float calch() {//maximum height
	
	height = ((powf(vi, 2))*(powf(sin(angle*(2 * pi / 360)), 2))) / (2 * 9.8);
	
	return height;
}
float calcr() {//horizontal range
	
	range = (powf(vi, 2))* sin((2 * angle) * (2 * pi / 360)) / 9.8;
	
	return range;
}
float flightt() {//flight time
		TotalFlight = (2 * vi)*(sin(angle*(2 * pi / 360))) / 9.8;
	
		o = TotalFlight;
	return TotalFlight;
}



void display() {

	cout << setw(12) << "x-distance" << setw(14) << "X-Velocity" << setw(24) << "Height" << setw(24) << "(Horizontal distance)" << setw(24) << "Time of flight" << endl;
	for (w = 0; w < TotalFlight; w=w+ 1) {
		cout << w << endl;
	}
	for (w = 0; w < range; w = w + .01) {
		cout << w << endl;
	}
	for (w = 0; w < height; w = w + .01) {
		cout << w << endl;
	}


	for (z = 0; z <= TotalFlight; z= z + .1) {
		cout << setw(12) << calcx() << setw(14) << calcy() << setw(24) << calch() << setw(24) << calcr() << setw(24) << flightt() << setw(30) << endl;
	}	
}

Rick York

Кстати - математика.h имеет определения для нескольких стандартных математических констант, включая pi. Обязательно определите _USE_MATH_DEFINES, прежде чем включать его, и вы получите все эти константы, определенные для вас. В нем pi-это M_PI.

2 Ответов

Рейтинг:
13

KarstenK

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

Функции могут иметь входные параметры, такие как:

float calcx(float x, float vi)

Поскольку вы находитесь в C++, вам следует рассмотреть возможность использования классов или структур для данных, избегайте глобалов, насколько это возможно. Это более четкий код. Нравится
class Cannon
{
  float speed;
  float angle;
  void askForData();
};
Вашему учителю это понравится ;-)


CPallini

5.

Рейтинг:
0

Rick York

Я согласен с Карстенком. Я бы сделал класс для этого, и ваши функции должны быть его методами. Вам даны все формулы, и у вас есть объявленные данные, так что вам просто нужно применить формулы к данным. Несколько вещей - основные тригонометрические функции работают с двойниками, поэтому я бы использовал этот тип для всех данных. Я не видел единицы измерения, чтобы использовать время, поэтому я использовал бы десятые доли секунды. Если это приводит к слишком большому количеству данных, то сократите их на целые секунды (1,0) или больше. Мне не нравятся однобуквенные имена переменных, за исключением счетчиков циклов и, конечно же, не для глобальных переменных. Мне также нравится немного больше разбирать названия методов.

Вот это старт в классе:

class Cannon
{
public:  // methods
    Cannon();    // constructor - initialize the members
    ~Cannon();   // destructor

    // the basic formulas

    double CalcHorizontalDistance( double t )
    {
        return m_VelocityHorz * t;
    }

    double CalcVerticalDistance( double t )
    {
        return ( m_VelocityVert * t ) - ( 0.5 * m_Gravity * t * t );
    }

    double CalcTimeOfFlight()
    {
        return 2.0 * m_InitVelocity * sin( m_InitAngle ) / m_Gravity;
    }

    void    GetInputs();
    void    GenerateTable();
    void    Display();

public:  // members
    double     m_InitVelocity;
    double     m_InitAngle;     // input as degrees, stored as radians
    double     m_FlightTime;
    double     m_Gravity;       // really should be a constant
    double     m_VelocityHorz;
    double     m_VelocityVert;

    double *   m_DistanceHorz;
    double *   m_DistanceVert;
    double *   m_Times;
};

Cannon::Cannon()  // constructor
{
    m_DistanceHorz = nullptr;
    m_DistanceVert = nullptr;
    m_Times = nullptr;
    m_Gravity = 9.8;
}

Cannon::~Cannon()  // destructor
{
    delete [] m_DistanceHorz;
    delete [] m_DistanceVert;
    delete [] m_Times;
}

// to allocate an array of doubles do this:
// m_Times = new double[timeEntries];
Now, you have to get the inputs and from the inputs you determine the flight time with the formula. Given a flight time then you can allocate the arrays for the table. Since the unit of time is tenths of seconds, scale the time by 10 and that will tell you how big to allocate the arrays. Then write a loop that steps through time in increments of 0.1 seconds until you have reached the end of the flight. Calculate horizontal and vertical distances at each time and you have your table. I think you have enough to finish up this program. I don't want to write everything for you so I will leave the rest up to you. If you get stuck then ask more questions but the key thing is to try things. Best of luck.