带有纵坐标和横坐标的坐标系
Coordinate system with an Ordinate and Abscissa
我目前在为坐标系编写代码时遇到问题。 在我正在做的练习中,我想创建一个带有纵坐标/横坐标和定义字母的坐标系(例如点 A) 我必须输入 25 个点的信息,并且它必须用同一个字母控制所有点。它们应该在带有 (0;0)协调开始。如果给出的关于 25 个点的信息不符合设定条件,则所选点必须具有新的重新输入信息以满足条件,而无需更改先前点的给定值(符合预期)。它还应该具有具有 2 个正坐标的点的所有信息 这是我制作的代码。如果有人帮助我,我会非常感激。
#include <iostream>
#include <cmath>
#include <stdio.h>
using namespace std;
int main(){
int dotX[23];//tri masiva
int dotY[23];
char dotName[23];
for (int i = 0; i<23; i++){// Cikal za vavejdane na masivite
cout << "Abscisa t" << i + 1 << endl;
cin >> dotX[i];
cout << "Ordinata t" << i + 1 << endl;
cin >> dotY[i];
cout << "Ime na tochkata" << endl;
cin >> dotName[i];
if (i >= 1){//IF operatora i cikula za obhozhdane na masiva i presmqtane na distanciite
bool flag = true;
while (flag){
double distance = sqrt(pow(dotY[i] - dotY[i - 1], 2) + pow(dotX[i] - dotX[i - 1], 2));//Formula za presmqtane na razstoqniqta
if (distance <= 6) {
char broi;
broi = broi++;
cout << "abscisa t" << i + 1 << endl;
cin >> dotX[i];
cout << "ordinata t" << i + 1 << endl;
cin >> dotY[i];
}
else{
flag = false;
}
}
}
}
float i;
for (float i = 0; i > 10, i++;){
float(dotX < 10);
cout << dotName[i] << endl;
}
}
你的代码有几个大问题。
首先,语法for (float i = 0; i > 10, i++;)
是完全错误的。它编译了,但这只是一个巧合。for 循环控制结构中的不同命令应用分号 (;
分隔),而不是逗号 (,
)。然后,正确的代码将是for (float i = 0; i > 10; i++)
.顺便说一句,你打错了一个错字,我想你的意思是for (float i = 0; i < 10; i++)
(否则 for 循环永远不会运行,因为i
初始化为 0 并且从一开始就0 > 10
是假的)。
其次,您将变量初始化i
两次:一次使用float i;
,一次在 for 循环中。这不应该编译,尽管对于某些编译器,它确实可以编译。关于如何做,有两种选择。第一个选项是在 for 循环之外声明变量,然后只分配它而不在 for 循环中初始化它:
float i;
for(i = 0; i < 10; i++){
//some stuff
}
第二个选项是简单地在 for 循环中声明它,就像在第一个循环中所做的那样:
for(float i = 0; i < 10; i++){
//some stuff
}
您犯的另一个错误是将i
声明为float
,然后尝试访问dotName[i]
。你放在括号里的任何内容都必须是int
型或类似的东西(unsigned int
、long
等)。将float
变量放在这些括号中不会像那样编译。如果要使用float
索引数组,则需要告诉编译器要将其转换为如下所示的int
:dotName[(int)i]
或dotName[int(i)]
。这称为强制转换。但是,在您的情况下,我建议您仅将i
声明为int
。
另外,float(dotX < 10);
完全错了,我真的不明白你想在那里做什么。我想你的意思是做float(dotX[i] < 10);
,但这仍然没有任何意义。你要做的是将bool
转换为float
,然后对结果不做任何事情。编译并且没有错,但完全没用。正如我所说,我不明白你想在那里做什么。
此外,broi = broi++;
是正确的,但毫无用处。broi++;
就够了。++
运算符自行将broi
递增 1,然后返回结果。++
运算符在内部所做的基本上是这样的:
int operator++(int &x){
x = x + 1;
return x;
}
因此,它已经自动递增变量,而无需您执行任何操作。您所做的与执行此操作相同:
broi = broi + 1;
broi = broi;
在这里,第一行表示++
运算符,第二行表示=
运算符。很明显,第二行是无用的,所以你可以删除它。同样,在您的代码中,您可以 删除broi =
,只留下broi++;
.
您还做了一些不推荐的事情,但由于C++标准支持它们,因此工作正常。
首先,using namespace std;
是不好的做法。建议省略它,并在cin
、cout
和endl
前面添加std::
。如果你想知道为什么using namespace std;
是不好的做法,这里解释得很好。但是,我必须承认,我个人仍然使用using namespace std;
,因为我认为它更简单。
其次,main
函数应该返回 0,因此建议在main
函数的末尾添加return 0;
。main
函数的返回值告诉是什么使程序关闭。值 0 表示程序在应该关闭时关闭。任何其他值都表示程序崩溃。此处提供了每个返回值含义的完整列表。请注意,C++ 支持省略return 0;
,如果省略它,大多数编译器会自动添加它,但仍建议使用它。此外,C 不支持省略return 0;
在 C 中它将返回内存中发生的任何内容,使程序在正常结束时看起来像崩溃。
此外,#include <stdio.h>
是 C,虽然它可以在 C++ 中使用,但不建议这样做。在C++中,最好使用#include <cstdio>
.所有以 C.h
结尾的标准库都可以在 C++ 中使用,方法是删除.h
并在开头添加c
。cmath
也是如此:在 C 中,它会是#include <math.h>
,而在 C++ 中,它是#include <cmath>
。
因此,代码的一个好版本是:
#include <iostream>
#include <cmath>
#include <cstdio>
int main(){
int dotX[23]; //tri masiva
int dotY[23];
char dotName[23];
for (int i = 0; i < 23; i++){ // Cikal za vavejdane na masivite
std::cout << "Abscisa t" << i + 1 << std::endl;
std::cin >> dotX[i];
std::cout << "Ordinata t" << i + 1 << std::endl;
std::cin >> dotY[i];
std::cout << "Ime na tochkata" << std::endl;
std::cin >> dotName[i];
if (i >= 1){ //IF operatora i cikula za obhozhdane na masiva i presmqtane na distanciite
bool flag = true;
while (flag){
double distance = sqrt(pow(dotY[i] - dotY[i - 1], 2) + pow(dotX[i] - dotX[i - 1], 2)); //Formula za presmqtane na razstoqniqta
if (distance <= 6) {
char broi;
broi++;
std::cout << "abscisa t" << i + 1 << std::endl;
std::cin >> dotX[i];
std::cout << "ordinata t" << i + 1 << std::endl;
std::cin >> dotY[i];
}
else{
flag = false;
}
}
}
}
for (int i = 0; i < 10; i++){
float(dotX[i] < 10); //Note that I don't understand what you're trying to do here, so I just changed it to something that compiles
std::cout << dotName[i] << std::endl;
}
}
- OpenGL 着色器坐标系
- 如何在 2D 坐标系中放置点?
- 如何使用 2D 数组构建如下所示的坐标系?C++
- 带有纵坐标和横坐标的坐标系
- 如何找到两个不同坐标系中对应点之间的旋转和平移(变换矩阵)
- 使用模板元编程提供强大的坐标系
- QGraphicsView和Qgraphicsscene坐标系
- OpenGL/GLM-切换坐标系方向
- 在 opengl 中视口的一角绘制世界坐标系
- 在 2D 坐标系上绘制曲线轨迹
- 了解QT的图形视图坐标系
- OpenGL缩放/平移坐标系或语句顺序错误
- GL数学:GLM旋转函数旋转整个坐标系
- 尝试在c++中找到(x,y)坐标系中两点之间的最短路径.误差11db
- Cocos2d-x触摸事件坐标系
- 我如何将缩放合并到这个坐标系中
- 两个坐标系之间的点CGAL变换
- 在C++中计算坐标系中的点
- 如何将Lat,long转换为XY坐标系(例如UTM),然后将其映射到我的图像的像素空间
- 地理坐标系中某个点的 boost::geometry::内 失败---原因