Система координат с ординатой и абсциссой

У меня сейчас проблема с созданием кода для системы координат.
В упражнении, которое я делаю, я хочу создать систему координат с ординатой / абсциссой и определенной буквой (например, точка 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;
}
}

-2

Решение

Есть несколько больших проблем с вашим кодом.

Прежде всего, синтаксис 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:

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 по одному, а затем возвращает результат. Что за ++ Оператор делает внутренне в основном это:

int operator++(int &x){
x = x + 1;
return x;
}

Таким образом, он уже автоматически увеличивает переменную без необходимости что-либо делать. То, что вы сделали, это то же самое, что сделать это

broi = broi + 1;
broi = broi;

Здесь первая строка представляет ++ оператор и вторая строка представляет = оператор. Понятно, что вторая строка бесполезна, поэтому вы можете просто удалить ее. Таким же образом в своем коде вы можете удалить broi =оставив просто broi++;,

Вы также сделали несколько вещей, которые не рекомендуются, но работают просто отлично, поскольку стандарт C ++ поддерживает их.

Прежде всего, using namespace std; это плохая практика. Рекомендуется опустить его и добавить std:: перед cin, cout а также endl, Если вы хотите знать, почему using namespace std; плохая практика, это хорошо объяснено Вот. Тем не менее, я должен признать, что лично я все еще использую using namespace std; так как я думаю, что это проще.

Во-вторых, main функция должна возвращать 0, поэтому рекомендуется добавить return 0; в конце main функция. Возвращаемое значение main Функция сообщает, что сделало программу закрытой. Значение 0 означает, что программа закрылась, когда она должна была. Любые другие значения означают, что программа потерпела крах. Полный список того, что означает каждое возвращаемое значение, доступен Вот. Обратите внимание, что C ++ поддерживает пропуск return 0; и большинство компиляторов добавляют его автоматически, если оно опущено, но все же рекомендуется иметь его. Кроме того, C не поддерживает пропуск return 0; и в C он вернет все, что происходит в памяти, создавая впечатление, что программа завершилась аварийно, когда она закончилась нормально.

Также, #include <stdio.h> это C, и хотя он работает в C ++, это не рекомендуется. В C ++ лучше использовать #include <cstdio>, Все стандартные библиотеки, которые заканчиваются .h в C можно использовать в C ++, удалив .h и добавив c в начале. Это также относится и к cmath: в С было бы #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;
}
}
0

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

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector