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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
botasa
3 / 3 / 0
Регистрация: 18.01.2011
Сообщений: 131
#1

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

26.06.2011, 16:22. Просмотров 766. Ответов 17
Метки нет (Все метки)

Сижу уже 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;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.06.2011, 16:22
Здравствуйте! Я подобрал для вас темы с ответами на вопрос while ( не пойму ) (C++):

Не пойму - C++
#include&lt;stdio.h&gt; #include&lt;conio.h&gt; #include&lt;math.h&gt; int main() { int k; double y,x,e,a,c,b; do{ printf(&quot;Vvedite x...

Не пойму че не так... - C++
Хай чуваки! написал прогу, а она не заходит в одно из условий. Помогите!!! Мне дана матрица коэффициентов системы линейных уравнений в...

Структуру не пойму - C++
Дана информация о студентах.(Фамилия, номер зачетки, оценка экзамена). Вывести список студентов, которые получили 4 и 5. можете...

не пойму условие.. - C++
здравствуйте, помогите пожалуйста разобрать условие You are given a int A. An integer K is irreducible with respect to A if K cannot...

Как то не пойму - C++
Помогите разобраться.. Не могу понять как написать три программы вроде бы єлементарные. 1. Створити діалогове вікно з двома кнопками,...

Не пойму где ошибка - C++
Помогите исправить код, ошибок он не выдает, но программа почему то не работает, после вводы данных ничего не происходит, ниже условие и...

17
grizlik78
Эксперт С++
1956 / 1449 / 115
Регистрация: 29.05.2011
Сообщений: 3,007
26.06.2011, 16:32 #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

Не по теме:

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

0
botasa
3 / 3 / 0
Регистрация: 18.01.2011
Сообщений: 131
26.06.2011, 16:36  [ТС] #3
спс за труд, но мне такое не подходит ) я хочу понять смысл почему так а не так
0
grizlik78
Эксперт С++
1956 / 1449 / 115
Регистрация: 29.05.2011
Сообщений: 3,007
26.06.2011, 16:39 #4
Что значит почему? В условии должно быть &&, но условие цикла не сможет повлиять на ввод пути в зависимости от бензина, потому как условие цикла проверяется уже после ввода пути. Не подходит, значит, как я уже сказал, ввод пути надо сделать условным, то есть производить его если только-что введённый бензин равен -1.
0
botasa
3 / 3 / 0
Регистрация: 18.01.2011
Сообщений: 131
26.06.2011, 16:47  [ТС] #5
Цитата Сообщение от grizlik78 Посмотреть сообщение
Что значит почему? В условии должно быть &&, но условие цикла не сможет повлиять на ввод пути в зависимости от бензина, потому как условие цикла проверяется уже после ввода пути. Не подходит, значит, как я уже сказал, ввод пути надо сделать условным, то есть производить его если только-что введённый бензин равен -1.
а почему && ? я хочу чтоб было || одно с двух если ( benzin || s ) != -1 {трам там там } я так понимаю если одно с двух станет FALSE оно заканчивает и переходит к концу .. Это я так понимаю, а вас извините я что-то не пойму или вы меня
0
grizlik78
Эксперт С++
1956 / 1449 / 115
Регистрация: 29.05.2011
Сообщений: 3,007
26.06.2011, 16:54 #6
Цикл выполняется до тех пор, пока условие истинно.
Цикл
C++
1
while ( ( benzin != -1 ) || ( s != -1 )) { /* ... */ }
будет выполняться до тех пор, пока benzin и s одновременно не станут равными -1. Только когда обе переменные равны -1, только тогда выражение становится ложным.
Цикл
C++
1
while ( ( benzin != -1 ) && ( s != -1 )) { /* ... */ }
будет выполняться до тех пор, пока либо benzin, либо s, либо обе сразу не станут равными -1.
0
botasa
3 / 3 / 0
Регистрация: 18.01.2011
Сообщений: 131
26.06.2011, 16:56  [ТС] #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 то заканчивался блок ...
0
prZzZ
Программист
112 / 92 / 5
Регистрация: 22.03.2011
Сообщений: 235
26.06.2011, 16:58 #8
Цитата Сообщение от botasa Посмотреть сообщение
я так понимаю если одно с двух станет FALSE оно заканчивает и переходит к концу
Вы не правильно понимаете. Для || операции необходимо, чтобы все операнды имели FALSE. В этом и только в этом случае прервется цикл. Для того, чтобы цикл прерывался по любому из операндов, равному FALSE, нужно использовать &&.
1
grizlik78
Эксперт С++
1956 / 1449 / 115
Регистрация: 29.05.2011
Сообщений: 3,007
26.06.2011, 16:59 #9
Цитата Сообщение от botasa Посмотреть сообщение
я код переписал вот так и мне оно нравится на 100 %, если не правильно прошу высказаться ...
Ну раз надо высказаться, то выскажусь
Попробуйте ввести не число и посмотрите результат.

Цитата Сообщение от botasa Посмотреть сообщение
но теперь интересует другое, если было вводить 3-5 или больше значений и проверять например на -1 ... то есть если б хоть один с них был -1 то заканчивался блок ...
Вот теперь я точно ничего не понял. 3—5 или больше значений чего? Переменных будет больше, или речь про итерации, или про что?
0
botasa
3 / 3 / 0
Регистрация: 18.01.2011
Сообщений: 131
26.06.2011, 16:59  [ТС] #10
Цитата Сообщение от grizlik78 Посмотреть сообщение
C++
1
while ( ( benzin != -1 ) && ( s != -1 )) { /* ... */ }
будет выполняться до тех пор, пока либо benzin, либо s, либо обе сразу не станут равными -1.
вот это у меня как раз не выходило ... один с них стал -1 но все ровно просил ввести другое значение и когда оба становились -1 оно заканчивалось ... вот теперь вы меня поняли ?
0
voral
455 / 436 / 68
Регистрация: 16.03.2008
Сообщений: 2,130
26.06.2011, 17:01 #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;
0
botasa
3 / 3 / 0
Регистрация: 18.01.2011
Сообщений: 131
26.06.2011, 17:11  [ТС] #12
Цитата Сообщение от grizlik78 Посмотреть сообщение
Ну раз надо высказаться, то выскажусь
Попробуйте ввести не число и посмотрите результат.


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

Добавлено через 6 минут
Цитата Сообщение от prZzZ Посмотреть сообщение
Вы не правильно понимаете. Для || операции необходимо, чтобы все операнды имели FALSE. В этом и только в этом случае прервется цикл. Для того, чтобы цикл прерывался по любому из операндов, равному FALSE, нужно использовать &&.
http://i020.***********/1106/41/27acccdf20ab.jpg
посмотрите код и консоль или я вас не понимаю ))) я уже запутался сам
0
grizlik78
Эксперт С++
1956 / 1449 / 115
Регистрация: 29.05.2011
Сообщений: 3,007
26.06.2011, 17:13 #13
Цитата Сообщение от botasa Посмотреть сообщение
вот типа такое
while ( ( x != -1 ) || ( y != -1 ) || ( z != -1 ) ) и больше таких ( ... != -1 )
чтоб когда хоть один с них станет -1 цикл остановиться и перейдет ниже после while (...) {} кудато сюда )
у меня тупо так не получается сделать
Уже 3 человека сказали, что в таком случае нужно &&.
Если надо чтобы цикл прерывался сразу после ввода любой из переменных, то и проверять надо сразу после ввода каждой переменной. Как это можно сделать прямо в заголовке цикла я показал.
0
voral
455 / 436 / 68
Регистрация: 16.03.2008
Сообщений: 2,130
26.06.2011, 17:14 #14
Цитата Сообщение от botasa Посмотреть сообщение
вот типа такое while ( ( x != -1 ) || ( y != -1 ) || ( z != -1 ) ) и больше таких ( ... != -1 ) чтоб когда хоть один с них станет -1 цикл остановиться и перейдет ниже после while (...) {} кудато сюда ) у меня тупо так не получается сделать
Не стыковка. Написанного на си и на русском языке. В Коде записано условие продолжения цикла.
0
botasa
3 / 3 / 0
Регистрация: 18.01.2011
Сообщений: 131
26.06.2011, 17:19  [ТС] #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 вот посмотрите код и консоль
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.06.2011, 17:19
Привет! Вот еще темы с ответами:

Не пойму почему не компилирует - C++
Начал читать &quot;Как програмировать на С++&quot; Дейтелов Дошёл до главы &quot;Введение в классы и объекты&quot;, Отделение интерфейса от реализации,...

Не пойму в чем ошибка - C++
Дано натуральное число n. Найти наибольшее среди чисел ke^sin^2(k+1) (k=1, …, n), а также сумму этих чисел. #include &lt;iostream&gt; ...

Не пойму как сделать (C++) - C++
Нужно написать программу, для заданного натурального n и действительного x подсчитать следующие суммы: S=1!+2!+3!+......+n!, где...

Не пойму ошибку enum - C++
#include &lt;iostream&gt; enum position {left, center, right}; using namespace std; void main() { position pos; pos=left; } ...


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

Или воспользуйтесь поиском по форуму:
15
Yandex
Объявления
26.06.2011, 17:19
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru