Почему q не равно 1,0?

Я новичок в С++. Я написал этот код, но результат для 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;
}
return m = … вы ожидаете, что это изменит значение m в main()?
Biffen 21.11.2022 12:42

Как я могу сделать, чтобы main прочитал значение m?

padrepio1000 21.11.2022 12:46

Я должен передать m по значению? Как я могу это сделать?

padrepio1000 21.11.2022 12:47

Вы намеренно называете intercetta(x1, y1, m, q) вместо intercetta(m, x1, y1, q)? Вы понимаете, что означает концепция передачи по значению по сравнению с передачей по ссылке?

bitmask 21.11.2022 12:47

Как я уже сказал, я неофит

padrepio1000 21.11.2022 12:48

Я не знаю математики вашего кода, но ваша функция intercetta ожидает переменные m, x1, y1, q по порядку. При вызове функции вы отправляете x1, y1, m, q в таком порядке. Вы должны писать переменные в том же порядке, в котором они объявлены.

brmRush 21.11.2022 12:48

Даже если я напишу «интерчетта (m, x1, x2, q)», m не равно 1,0. По математике должно быть 1,0

padrepio1000 21.11.2022 12:49

Как вы думаете, почему m должно быть равно 1,0? Если вы хотите изменить значение переменной внутри функции, вы должны передать по ссылке вашу переменную. Это делается путем добавления & перед именем. cout << "q= " << intercetta(x1, y1, &m, q) << endl;

brmRush 21.11.2022 12:53

Извините, q должно быть 1.0

padrepio1000 21.11.2022 12:56

Q=y1-m*x1, где y1=9,75, m=2,5, x1=3,5. Посчитайте, и результат будет 1,0.

padrepio1000 21.11.2022 12:57

Вы передаете параметры m=3,5 (из аргумента x1), x1=9,75 (из аргумента y1) и y1=2,5 (из аргумента m). Если посчитать, то должно быть -31.625.

Eljay 21.11.2022 15:06
Как настроить Tailwind CSS с React.js и Next.js?
Как настроить Tailwind CSS с React.js и Next.js?
Tailwind CSS - единственный фреймворк, который, как я убедился, масштабируется в больших командах. Он легко настраивается, адаптируется к любому...
LeetCode запись решения 2536. Увеличение подматриц на единицу
LeetCode запись решения 2536. Увеличение подматриц на единицу
Увеличение подматриц на единицу - LeetCode
Переключение светлых/темных тем
Переключение светлых/темных тем
В Microsoft Training - Guided Project - Build a simple website with web pages, CSS files and JavaScript files, мы объясняем, как CSS можно...
Отношения &quot;многие ко многим&quot; в Laravel с методами присоединения и отсоединения
Отношения &quot;многие ко многим&quot; в Laravel с методами присоединения и отсоединения
Отношения "многие ко многим" в Laravel могут быть немного сложными, но с помощью Eloquent ORM и его моделей мы можем сделать это с легкостью. В этой...
В PHP
В PHP
В большой кодовой базе с множеством различных компонентов классы, функции и константы могут иметь одинаковые имена. Это может привести к путанице и...
Карта дорог Беладжар PHP Laravel
Карта дорог Беладжар PHP Laravel
Laravel - это PHP-фреймворк, разработанный для облегчения разработки веб-приложений. Laravel предоставляет различные функции, упрощающие разработку...
0
11
94
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Переменная m (и q) в вашей функции main отличается от переменных в других ваших функциях. Присваивание, которое у вас есть после вашего оператора return, присваивает значение переменной, время жизни которой ограничено областью действия соответствующей функции.

Если вы хотите передать по ссылке, вы можете сделать это, объявив аргумент как ссылку:

float intercetta(float m, float x1, float y1, float& q) {
                                                // ^-------- reference

Не работает, q = 9,75. Но должно быть 1.0

padrepio1000 21.11.2022 12:55

@padrepio1000 padrepio1000 Вы создали ссылочные аргументы m и q и убедились, что передали аргументы intercetta в правильном порядке?

bitmask 21.11.2022 12:57

Как заявлено, да

padrepio1000 21.11.2022 12:59
Ответ принят как подходящий

Эта функция

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';
bitmask 21.11.2022 12:59

Хорошо, теперь это работает: (я не знаю, как вставить код в комментарии). Коэффициент с плавающей точкой eAngolare(число с плавающей запятой x1, число с плавающей запятой x2, число с плавающей запятой y1, число с плавающей запятой y2, число с плавающей запятой и m). СПАСИБО

padrepio1000 21.11.2022 13:09

@padrepio1000 Комментарии не подходят для ввода длинных фрагментов кода. Чтобы ввести код, смотрите здесь . Если тот или иной ответ подходит к вашему вопросу, вы можете решить принять его. Обязательств к этому нет.

francesco 21.11.2022 13:13
example code eddea
padrepio1000 21.11.2022 13:20

Другие вопросы по теме