Форум программистов, компьютерный форум CyberForum.ru

while ( не пойму ) - C++

Восстановить пароль Регистрация
 
botasa
3 / 3 / 0
Регистрация: 18.01.2011
Сообщений: 131
26.06.2011, 16:22     while ( не пойму ) #1
Сижу уже 1 час и мозги парю, задачу решил вот код :
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
#include "stdafx.h"
#include <iostream>
#include <conio.h>
using namespace std;
 
int _tmain(int argc, _TCHAR* argv[])
{
    setlocale(LC_ALL,"");
    int i = 0;
    float s, benzin, ob, suma = 0;;
 
    cout << "Введите расход бензина (-1, если ввод закончен) : ";
    cin >> benzin;
    cout << "Введите пройденный пусть : ";
    cin >> s;
    while ( ( benzin != -1 ) || ( s != -1 ))
    {
        ob = s / benzin;
        cout << "Для этой емкости получено миль / галлон " << ob << endl;
        suma += ob;
        i++;
        cout << "Введите расход бензина (-1, если ввод закончен) : ";
        cin >> benzin;
        cout << "Введите пройденный пусть : ";
        cin >> s;
    }
 
    float res = float( suma ) / i;
    cout << "Средний расход бензина " << res << endl;
    _getch();
    return 0;
}
задача легкая очень, но проблема вот здесь while ( ( benzin != -1 ) || ( s != -1 )) тупо никак не пойму. Я ставил
C++
1
&& и ||
и скобки ставил, все что можно, но оно не работает правильно или я не понимаю ... например я ввожу бензин и путь оно работает хорошо. Но я хочу чтоб когда введу -1 в строке вводу
C++
1
cin >> benzin;
или
C++
1
cin >> s;
оно переходило к следующему блоку за while {} . А проблема в том что оно просит ввести и
C++
1
cin >> benzin;
и
C++
1
cin >> s;
и тогда переходит к
C++
1
2
3
4
5
float res = float( suma ) / i;
cout << "Средний расход бензина " << res << endl;
_getch();
return 0;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.06.2011, 16:22     while ( не пойму )
Посмотрите здесь:

не пойму условие.. C++
C++ Не пойму где ошибка
Структуру не пойму C++
Не пойму че не так... C++
Не пойму что не так C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
grizlik78
Эксперт C++
 Аватар для grizlik78
1882 / 1414 / 101
Регистрация: 29.05.2011
Сообщений: 2,958
26.06.2011, 16:32     while ( не пойму ) #2
Ну вот тебе ужасная конструкция
C++
1
2
3
4
5
6
7
8
9
10
while (cout << "Введите расход бензина (-1, если ввод закончен) : " &&
        cin >> benzin && benzin != -1 &&
        cout << "Введите пройденный путь : " &&
        cin >> s && s != -1 )
{
    ob = s / benzin;
    cout << "Для этой емкости получено миль / галлон " << ob << endl;
    suma += ob;
    i++;
}
Если громоздкость условия не устраивает, то придётся заворачивать ввод пути заворачивать в if

Не по теме:

Пройденный пусть. Ошибки при копировании копируются безошибочно. Хе-хе.

botasa
3 / 3 / 0
Регистрация: 18.01.2011
Сообщений: 131
26.06.2011, 16:36  [ТС]     while ( не пойму ) #3
спс за труд, но мне такое не подходит ) я хочу понять смысл почему так а не так
grizlik78
Эксперт C++
 Аватар для grizlik78
1882 / 1414 / 101
Регистрация: 29.05.2011
Сообщений: 2,958
26.06.2011, 16:39     while ( не пойму ) #4
Что значит почему? В условии должно быть &&, но условие цикла не сможет повлиять на ввод пути в зависимости от бензина, потому как условие цикла проверяется уже после ввода пути. Не подходит, значит, как я уже сказал, ввод пути надо сделать условным, то есть производить его если только-что введённый бензин равен -1.
botasa
3 / 3 / 0
Регистрация: 18.01.2011
Сообщений: 131
26.06.2011, 16:47  [ТС]     while ( не пойму ) #5
Цитата Сообщение от grizlik78 Посмотреть сообщение
Что значит почему? В условии должно быть &&, но условие цикла не сможет повлиять на ввод пути в зависимости от бензина, потому как условие цикла проверяется уже после ввода пути. Не подходит, значит, как я уже сказал, ввод пути надо сделать условным, то есть производить его если только-что введённый бензин равен -1.
а почему && ? я хочу чтоб было || одно с двух если ( benzin || s ) != -1 {трам там там } я так понимаю если одно с двух станет FALSE оно заканчивает и переходит к концу .. Это я так понимаю, а вас извините я что-то не пойму или вы меня
grizlik78
Эксперт C++
 Аватар для grizlik78
1882 / 1414 / 101
Регистрация: 29.05.2011
Сообщений: 2,958
26.06.2011, 16:54     while ( не пойму ) #6
Цикл выполняется до тех пор, пока условие истинно.
Цикл
C++
1
while ( ( benzin != -1 ) || ( s != -1 )) { /* ... */ }
будет выполняться до тех пор, пока benzin и s одновременно не станут равными -1. Только когда обе переменные равны -1, только тогда выражение становится ложным.
Цикл
C++
1
while ( ( benzin != -1 ) && ( s != -1 )) { /* ... */ }
будет выполняться до тех пор, пока либо benzin, либо s, либо обе сразу не станут равными -1.
botasa
3 / 3 / 0
Регистрация: 18.01.2011
Сообщений: 131
26.06.2011, 16:56  [ТС]     while ( не пойму ) #7
извините что морочу голову, я код переписал вот так и мне оно нравится на 100 %, если не правильно прошу высказаться ...

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#include "stdafx.h"
#include <iostream>
#include <conio.h>
using namespace std;
 
int _tmain(int argc, _TCHAR* argv[])
{
    setlocale(LC_ALL,"");
    int i = 0;
    float s, benzin, ob, suma = 0;;
 
    cout << "Введите расход бензина (-1, если ввод закончен) : ";
    cin >> benzin;
    while ( benzin != -1 )
        {
        cout << "Введите пройденный пусть : ";
            cin >> s;
            ob = s / benzin;
            cout << "Для этой емкости получено миль / галлон " << ob << endl;
            suma += ob;
            i++;
            cout << "Введите расход бензина (-1, если ввод закончен) : ";
            cin >> benzin;
        }
 
        float res = float( suma ) / i;
        cout << "Средний расход бензина " << res << endl;
    _getch();
    return 0;
}
но теперь интересует другое, если было вводить 3-5 или больше значений и проверять например на -1 ... то есть если б хоть один с них был -1 то заканчивался блок ...
prZzZ
Программист
 Аватар для prZzZ
108 / 88 / 5
Регистрация: 22.03.2011
Сообщений: 232
26.06.2011, 16:58     while ( не пойму ) #8
Цитата Сообщение от botasa Посмотреть сообщение
я так понимаю если одно с двух станет FALSE оно заканчивает и переходит к концу
Вы не правильно понимаете. Для || операции необходимо, чтобы все операнды имели FALSE. В этом и только в этом случае прервется цикл. Для того, чтобы цикл прерывался по любому из операндов, равному FALSE, нужно использовать &&.
grizlik78
Эксперт C++
 Аватар для grizlik78
1882 / 1414 / 101
Регистрация: 29.05.2011
Сообщений: 2,958
26.06.2011, 16:59     while ( не пойму ) #9
Цитата Сообщение от botasa Посмотреть сообщение
я код переписал вот так и мне оно нравится на 100 %, если не правильно прошу высказаться ...
Ну раз надо высказаться, то выскажусь
Попробуйте ввести не число и посмотрите результат.

Цитата Сообщение от botasa Посмотреть сообщение
но теперь интересует другое, если было вводить 3-5 или больше значений и проверять например на -1 ... то есть если б хоть один с них был -1 то заканчивался блок ...
Вот теперь я точно ничего не понял. 3—5 или больше значений чего? Переменных будет больше, или речь про итерации, или про что?
botasa
3 / 3 / 0
Регистрация: 18.01.2011
Сообщений: 131
26.06.2011, 16:59  [ТС]     while ( не пойму ) #10
Цитата Сообщение от grizlik78 Посмотреть сообщение
C++
1
while ( ( benzin != -1 ) && ( s != -1 )) { /* ... */ }
будет выполняться до тех пор, пока либо benzin, либо s, либо обе сразу не станут равными -1.
вот это у меня как раз не выходило ... один с них стал -1 но все ровно просил ввести другое значение и когда оба становились -1 оно заканчивалось ... вот теперь вы меня поняли ?
voral
345 / 325 / 46
Регистрация: 16.03.2008
Сообщений: 1,692
26.06.2011, 17:01     while ( не пойму ) #11
ваше условие
C++
1
while ( ( benzin != -1 ) || ( s != -1 ))
Выполнять цикл до тех пор пока бензин не равен -1 ИЛИ путь не равен -1. Т.е. выход из цикла будет осуществлен только если и бензин и путь равны -1.
Если сделать ка предлагали
C++
1
while ( ( benzin != -1 ) && ( s != -1 ))
Это по русски будет так
Выполнять цикл до тех пор пока бензин не равен -1 И путь не равен -1. Т.е. выход из цикла будет осуществлен только в случае если любая из этих переменных станет равной -1. (т.е. то что вам нужно)
Если же вы хотите, что если бензин ввели -1. Про путь она даже и не справшивала. То после получения значения бензина надо ставить условие
C
1
if (benzin==-1) break;
botasa
3 / 3 / 0
Регистрация: 18.01.2011
Сообщений: 131
26.06.2011, 17:11  [ТС]     while ( не пойму ) #12
Цитата Сообщение от grizlik78 Посмотреть сообщение
Ну раз надо высказаться, то выскажусь
Попробуйте ввести не число и посмотрите результат.


Вот теперь я точно ничего не понял. 3—5 или больше значений чего? Переменных будет больше, или речь про итерации, или про что?
вот типа такое
while ( ( x != -1 ) || ( y != -1 ) || ( z != -1 ) ) и больше таких ( ... != -1 )
чтоб когда хоть один с них станет -1 цикл остановиться и перейдет ниже после while (...) {} кудато сюда )
у меня тупо так не получается сделать

Добавлено через 6 минут
Цитата Сообщение от prZzZ Посмотреть сообщение
Вы не правильно понимаете. Для || операции необходимо, чтобы все операнды имели FALSE. В этом и только в этом случае прервется цикл. Для того, чтобы цикл прерывался по любому из операндов, равному FALSE, нужно использовать &&.
http://i020.***********/1106/41/27acccdf20ab.jpg
посмотрите код и консоль или я вас не понимаю ))) я уже запутался сам
grizlik78
Эксперт C++
 Аватар для grizlik78
1882 / 1414 / 101
Регистрация: 29.05.2011
Сообщений: 2,958
26.06.2011, 17:13     while ( не пойму ) #13
Цитата Сообщение от botasa Посмотреть сообщение
вот типа такое
while ( ( x != -1 ) || ( y != -1 ) || ( z != -1 ) ) и больше таких ( ... != -1 )
чтоб когда хоть один с них станет -1 цикл остановиться и перейдет ниже после while (...) {} кудато сюда )
у меня тупо так не получается сделать
Уже 3 человека сказали, что в таком случае нужно &&.
Если надо чтобы цикл прерывался сразу после ввода любой из переменных, то и проверять надо сразу после ввода каждой переменной. Как это можно сделать прямо в заголовке цикла я показал.
voral
345 / 325 / 46
Регистрация: 16.03.2008
Сообщений: 1,692
26.06.2011, 17:14     while ( не пойму ) #14
Цитата Сообщение от botasa Посмотреть сообщение
вот типа такое while ( ( x != -1 ) || ( y != -1 ) || ( z != -1 ) ) и больше таких ( ... != -1 ) чтоб когда хоть один с них станет -1 цикл остановиться и перейдет ниже после while (...) {} кудато сюда ) у меня тупо так не получается сделать
Не стыковка. Написанного на си и на русском языке. В Коде записано условие продолжения цикла.
botasa
3 / 3 / 0
Регистрация: 18.01.2011
Сообщений: 131
26.06.2011, 17:19  [ТС]     while ( не пойму ) #15
Цитата Сообщение от voral Посмотреть сообщение
ваше условие
[CPP]
C++
1
while ( ( benzin != -1 ) && ( s != -1 ))
Это по русски будет так
Выполнять цикл до тех пор пока бензин не равен -1 И путь не равен -1. Т.е. выход из цикла будет осуществлен только в случае если любая из этих переменных станет равной -1. (т.е. то что вам нужно)
Если же вы хотите, что если бензин ввели -1. Про путь она даже и не справшивала. То после получения значения бензина надо ставить условие
вы мой самый первый код в компилятор загоните и сделайте while ( ( benzin != -1 ) && ( s != -1 )) и увидите что оно так не работает ... у у меня так оно не работает ... или компилятор глючит или я не то сделал

Добавлено через 2 минуты
Цитата Сообщение от grizlik78 Посмотреть сообщение
Уже 3 человека сказали, что в таком случае нужно &&.
Если надо чтобы цикл прерывался сразу после ввода любой из переменных, то и проверять надо сразу после ввода каждой переменной. Как это можно сделать прямо в заголовке цикла я показал.
я понял что нужно && но я так и сделал оно не работает,
если вам не тяжело мой самый 1-й код поменять и скинуть сюда чтоб я уже понял

Добавлено через 1 минуту
http://i020.***********/1106/41/27acccdf20ab.jpg вот посмотрите код и консоль
grizlik78
Эксперт C++
 Аватар для grizlik78
1882 / 1414 / 101
Регистрация: 29.05.2011
Сообщений: 2,958
26.06.2011, 17:20     while ( не пойму ) #16
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
#include "stdafx.h"
#include <iostream>
#include <conio.h>
using namespace std;
 
int _tmain(int argc, _TCHAR* argv[])
{
        setlocale(LC_ALL,"");
        int i = 0;
        float s, benzin, ob, suma = 0;;
 
        cout << "Введите расход бензина (-1, если ввод закончен) : ";
        cin >> benzin;
        if (benzin != -1) {
            cout << "Введите пройденный путь : ";
            cin >> s;
        }
        while ( ( benzin != -1 ) && ( s != -1 ))
        {
                ob = s / benzin;
                cout << "Для этой емкости получено миль / галлон " << ob << endl;
                suma += ob;
                i++;
                cout << "Введите расход бензина (-1, если ввод закончен) : ";
                cin >> benzin;
                if (benzin != -1) {
                    cout << "Введите пройденный путь : ";
                    cin >> s;
                }
        }
 
        float res = float( suma ) / i;
        cout << "Средний расход бензина " << res << endl;
        _getch();
        return 0;
}
Но мой самый первый вариант всё-равно лучше.
botasa
3 / 3 / 0
Регистрация: 18.01.2011
Сообщений: 131
26.06.2011, 17:31  [ТС]     while ( не пойму ) #17
еще раз спасибо, теперь я довольный
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.06.2011, 06:54     while ( не пойму )
Еще ссылки по теме:

Как то не пойму C++
Не пойму как сделать (C++) C++
C++ Не пойму

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Deviaphan
27.06.2011, 06:54     while ( не пойму )
  #18

Не по теме:

C++
1
2
while ( неПойму )
    ЧитайДокументацию();

Yandex
Объявления
27.06.2011, 06:54     while ( не пойму )
Ответ Создать тему
Опции темы

Текущее время: 01:32. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru