Не работает if else c++

180
23 февраля 2019, 05:30

Если сумма 3 действительных чисел x,y,z <1, то наименьшее из этих чисел заменить полусуммой двух других, в противном случае заменить меньшее из x и y полусуммой двух оставшихся значений

#include<iostream>
using namespace std;
int main() {
setlocale(LC_ALL, "Russian");
float x, y, z, s;
cout << "Введите x" << endl;
cin >> x;
cout << "Введите y" << endl;
cin >> y;
cout << "Введите z" << endl;
cin >> z;
s = (x + y + z);
if (s < 1)
{
    if ((x < y)&&(y < z)) {
        x = (y + z) / 2;
        cout << "ответ: x=" << x << endl;
    }
}
else if ((s<1)&&(((y < x)&&(x < z)))) {
    y = (x + z) / 2;
    cout <<"ответ: y="<< y << endl;
}
else if ((s<1)&&(((z < x)&&(x < y)))) {
    z = (x + y) / 2;
    cout <<"ответ: z="<< z << endl;
}
else if (x < y) {
    x = (y + z) / 2;
    cout <<"otvetos s x="<< x << endl;
}
else {
    y = (x + z) / 2;
    cout <<"drugoi otvet = "<< y << endl;
}
system("pause");
return 0;
}

когда я ввожу x=0.3 y=0.1 z=0.2 то в ответе ничего нет

Answer 1

Работает только эта ветка (при исходных данных s = 0,6, что меньше 1):

if (s < 1)
{
    if ((x < y)&&(y < z)) {
        x = (y + z) / 2;
        cout << "ответ: x=" << x << endl;
    }
}

На проверке if ((x < y)&&(y < z)) сразу же получаем false, т.к. на самом деле x больше y. На этом выполнение программы завершается.

Если кажется, что if не работает, или работает не так, как надо, то всегда нужно проверять сами условия, потому что if работает всегда. А если "не работает", значит ошибка в условиях.

Answer 2

Ваш код по сути состоит из

if (s < 1)
{
    if ((x < y)&&(y < z)) {
        x = (y + z) / 2;
        cout << "ответ: x=" << x << endl;
    }
}
...
else if (x < y) {
    x = (y + z) / 2;
    cout <<"otvetos s x="<< x << endl;
}
else {
    y = (x + z) / 2;
    cout <<"drugoi otvet = "<< y << endl;
}

Те ветви, где троеточие - работать не будут, так как при s<1 работает первая ветвь, а во вторую и третью вы попадаете с s>=1, так что ваша проверка if ((s<1)&&... автоматически дает false.

READ ALSO
Использование super в interface

Использование super в interface

Java, когда мы наследуем один интерфейс от другого, и в дочернем хотим вызвать метод родительского, то мы должны писать не superметод (как в классах),...

138
Не могу нормально вывести массив String

Не могу нормально вывести массив String

Вот у меня есть сторка prodaja и bidPrice там хранятся значения с плавающей точкой, я хочу вывести их на экран в столбец но не получаетсяДумал переобразовать...

165
Как вывести масив в два столбца

Как вывести масив в два столбца

У меня есть два массива значений, как их вывести в два столбца?

159
Не создается до конца клиент

Не создается до конца клиент

При создании клиента очень часто фрэйм не создается до конца, исключения не выкидываются

158