Я новичок в С++. Я написал этот код, но результат для q должен быть 1,0, но код дает мне, изменяя порядок переменных, когда я вспоминаю функцию «интерчетта», например -34, 0, 9,75. Почему?
#include <iostream>
using namespace std;
float coefficienteAngolare(float x1, float x2, float y1, float y2, float m) {
return m = ((y2 - y1) / (x2 - x1));
}
float intercetta(float m, float x1, float y1, float q) {
return q = y1 - m * x1;
}
int main() {
float x1, x2, y1, y2, m=0, q=0;
x1 = 3.5;
x2 = 6.5;
y1 = 9.75;
y2 = 17.25;
cout << "m= " << coefficienteAngolare(x1, x2, y1, y2, m) << endl;
cout << "q= " << intercetta(x1, y1, m, q) << endl;
}
Как я могу сделать, чтобы main прочитал значение m?
Я должен передать m по значению? Как я могу это сделать?
Вы намеренно называете intercetta(x1, y1, m, q) вместо intercetta(m, x1, y1, q)? Вы понимаете, что означает концепция передачи по значению по сравнению с передачей по ссылке?
Как я уже сказал, я неофит
Я не знаю математики вашего кода, но ваша функция intercetta ожидает переменные m, x1, y1, q по порядку. При вызове функции вы отправляете x1, y1, m, q в таком порядке. Вы должны писать переменные в том же порядке, в котором они объявлены.
Даже если я напишу «интерчетта (m, x1, x2, q)», m не равно 1,0. По математике должно быть 1,0
Как вы думаете, почему m должно быть равно 1,0? Если вы хотите изменить значение переменной внутри функции, вы должны передать по ссылке вашу переменную. Это делается путем добавления & перед именем. cout << "q= " << intercetta(x1, y1, &m, q) << endl;
Извините, q должно быть 1.0
Q=y1-m*x1, где y1=9,75, m=2,5, x1=3,5. Посчитайте, и результат будет 1,0.
Вы передаете параметры m=3,5 (из аргумента x1), x1=9,75 (из аргумента y1) и y1=2,5 (из аргумента m). Если посчитать, то должно быть -31.625.
Переменная m (и q) в вашей функции main отличается от переменных в других ваших функциях. Присваивание, которое у вас есть после вашего оператора return, присваивает значение переменной, время жизни которой ограничено областью действия соответствующей функции.
Если вы хотите передать по ссылке, вы можете сделать это, объявив аргумент как ссылку:
float intercetta(float m, float x1, float y1, float& q) {
// ^-------- reference
Не работает, q = 9,75. Но должно быть 1.0
@padrepio1000 padrepio1000 Вы создали ссылочные аргументы m и q и убедились, что передали аргументы intercetta в правильном порядке?
Как заявлено, да
Эта функция
float coefficienteAngolare(float x1, float x2, float y1, float y2, float m) {
return m = ((y2 - y1) / (x2 - x1));
}
Имеет параметры, передаваемые по значению. Это означает, что он получает копии параметров, которые вы указываете. Что бы вы ни делали внутри функции, вы не можете изменить параметры, переданные ей в main().
Если вы действительно хотите изменить m, вы должны передать его по ссылке
float coefficienteAngolare(float x1, float x2, float y1, float y2, float& m) {
return m = ((y2 - y1) / (x2 - x1));
}
Но тогда, если вы модифицируете m, зачем вам его возвращать? Скорее всего, вы либо хотите ничего не возвращать, а просто сохранить результат в m
void coefficienteAngolare(float x1, float x2, float y1, float y2, float& m) {
m = ((y2 - y1) / (x2 - x1));
}
//....
// in main()
coefficienteAngolare(x1, x2, y1, y2, m);
cout << "m= " << m << endl;
Или вы хотите вернуть результирующее значение, не передавая переменную для его хранения.
float coefficienteAngolare(float x1, float x2, float y1, float y2) {
return ((y2 - y1) / (x2 - x1));
}
//....
// in main()
m = coefficienteAngolare(x1, x2, y1, y2);
cout << "m= " << m << endl;
В той же строке вы должны изменить intercetta. Обратите внимание, что порядок параметров имеет значение. Компилятор не может догадаться, что переменная q в main() должна быть такой же, как переменная q в intercetta, они принадлежат разным областям видимости.
std::cout << "m= " << m << '\n';
Хорошо, теперь это работает: (я не знаю, как вставить код в комментарии). Коэффициент с плавающей точкой eAngolare(число с плавающей запятой x1, число с плавающей запятой x2, число с плавающей запятой y1, число с плавающей запятой y2, число с плавающей запятой и m). СПАСИБО
@padrepio1000 Комментарии не подходят для ввода длинных фрагментов кода. Чтобы ввести код, смотрите здесь . Если тот или иной ответ подходит к вашему вопросу, вы можете решить принять его. Обязательств к этому нет.
example code eddea
return m = …
вы ожидаете, что это изменит значениеm
вmain()
?