Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/5: Рейтинг темы: голосов - 5, средняя оценка - 5.00
3 / 3 / 5
Регистрация: 18.01.2011
Сообщений: 131

while ( не пойму )

26.06.2011, 16:22. Показов 1239. Ответов 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
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
26.06.2011, 16:22
Ответы с готовыми решениями:

Не пойму
Вот чего не могу понять... У меня сайт есть Раньше по запросу ВСЕ КЛУБЫ МОСКВЫ он выходил на первое место и держался так довольно...

не пойму
я нажал F9 написал код там было написано что какие-то ошибки и вот это... current selection cannot have actions applied to it

Не пойму
#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...

17
Эксперт С++
 Аватар для grizlik78
2382 / 1666 / 279
Регистрация: 29.05.2011
Сообщений: 3,402
26.06.2011, 16:32
Ну вот тебе ужасная конструкция
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
3 / 3 / 5
Регистрация: 18.01.2011
Сообщений: 131
26.06.2011, 16:36  [ТС]
спс за труд, но мне такое не подходит ) я хочу понять смысл почему так а не так
0
Эксперт С++
 Аватар для grizlik78
2382 / 1666 / 279
Регистрация: 29.05.2011
Сообщений: 3,402
26.06.2011, 16:39
Что значит почему? В условии должно быть &&, но условие цикла не сможет повлиять на ввод пути в зависимости от бензина, потому как условие цикла проверяется уже после ввода пути. Не подходит, значит, как я уже сказал, ввод пути надо сделать условным, то есть производить его если только-что введённый бензин равен -1.
0
3 / 3 / 5
Регистрация: 18.01.2011
Сообщений: 131
26.06.2011, 16:47  [ТС]
Цитата Сообщение от grizlik78 Посмотреть сообщение
Что значит почему? В условии должно быть &&, но условие цикла не сможет повлиять на ввод пути в зависимости от бензина, потому как условие цикла проверяется уже после ввода пути. Не подходит, значит, как я уже сказал, ввод пути надо сделать условным, то есть производить его если только-что введённый бензин равен -1.
а почему && ? я хочу чтоб было || одно с двух если ( benzin || s ) != -1 {трам там там } я так понимаю если одно с двух станет FALSE оно заканчивает и переходит к концу .. Это я так понимаю, а вас извините я что-то не пойму или вы меня
0
Эксперт С++
 Аватар для grizlik78
2382 / 1666 / 279
Регистрация: 29.05.2011
Сообщений: 3,402
26.06.2011, 16:54
Цикл выполняется до тех пор, пока условие истинно.
Цикл
C++
1
while ( ( benzin != -1 ) || ( s != -1 )) { /* ... */ }
будет выполняться до тех пор, пока benzin и s одновременно не станут равными -1. Только когда обе переменные равны -1, только тогда выражение становится ложным.
Цикл
C++
1
while ( ( benzin != -1 ) && ( s != -1 )) { /* ... */ }
будет выполняться до тех пор, пока либо benzin, либо s, либо обе сразу не станут равными -1.
0
3 / 3 / 5
Регистрация: 18.01.2011
Сообщений: 131
26.06.2011, 16:56  [ТС]
извините что морочу голову, я код переписал вот так и мне оно нравится на 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
119 / 97 / 11
Регистрация: 22.03.2011
Сообщений: 244
26.06.2011, 16:58
Цитата Сообщение от botasa Посмотреть сообщение
я так понимаю если одно с двух станет FALSE оно заканчивает и переходит к концу
Вы не правильно понимаете. Для || операции необходимо, чтобы все операнды имели FALSE. В этом и только в этом случае прервется цикл. Для того, чтобы цикл прерывался по любому из операндов, равному FALSE, нужно использовать &&.
1
3 / 3 / 5
Регистрация: 18.01.2011
Сообщений: 131
26.06.2011, 16:59  [ТС]
Цитата Сообщение от grizlik78 Посмотреть сообщение
C++
1
while ( ( benzin != -1 ) && ( s != -1 )) { /* ... */ }
будет выполняться до тех пор, пока либо benzin, либо s, либо обе сразу не станут равными -1.
вот это у меня как раз не выходило ... один с них стал -1 но все ровно просил ввести другое значение и когда оба становились -1 оно заканчивалось ... вот теперь вы меня поняли ?
0
Эксперт С++
 Аватар для grizlik78
2382 / 1666 / 279
Регистрация: 29.05.2011
Сообщений: 3,402
26.06.2011, 16:59
Цитата Сообщение от botasa Посмотреть сообщение
я код переписал вот так и мне оно нравится на 100 %, если не правильно прошу высказаться ...
Ну раз надо высказаться, то выскажусь
Попробуйте ввести не число и посмотрите результат.

Цитата Сообщение от botasa Посмотреть сообщение
но теперь интересует другое, если было вводить 3-5 или больше значений и проверять например на -1 ... то есть если б хоть один с них был -1 то заканчивался блок ...
Вот теперь я точно ничего не понял. 3—5 или больше значений чего? Переменных будет больше, или речь про итерации, или про что?
0
3012 / 1450 / 262
Регистрация: 16.03.2008
Сообщений: 6,461
Записей в блоге: 2
26.06.2011, 17:01
ваше условие
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
3 / 3 / 5
Регистрация: 18.01.2011
Сообщений: 131
26.06.2011, 17:11  [ТС]
Цитата Сообщение от grizlik78 Посмотреть сообщение
Ну раз надо высказаться, то выскажусь
Попробуйте ввести не число и посмотрите результат.


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

Добавлено через 6 минут
Цитата Сообщение от prZzZ Посмотреть сообщение
Вы не правильно понимаете. Для || операции необходимо, чтобы все операнды имели FALSE. В этом и только в этом случае прервется цикл. Для того, чтобы цикл прерывался по любому из операндов, равному FALSE, нужно использовать &&.

посмотрите код и консоль или я вас не понимаю ))) я уже запутался сам
0
Эксперт С++
 Аватар для grizlik78
2382 / 1666 / 279
Регистрация: 29.05.2011
Сообщений: 3,402
26.06.2011, 17:13
Цитата Сообщение от botasa Посмотреть сообщение
вот типа такое
while ( ( x != -1 ) || ( y != -1 ) || ( z != -1 ) ) и больше таких ( ... != -1 )
чтоб когда хоть один с них станет -1 цикл остановиться и перейдет ниже после while (...) {} кудато сюда )
у меня тупо так не получается сделать
Уже 3 человека сказали, что в таком случае нужно &&.
Если надо чтобы цикл прерывался сразу после ввода любой из переменных, то и проверять надо сразу после ввода каждой переменной. Как это можно сделать прямо в заголовке цикла я показал.
0
3012 / 1450 / 262
Регистрация: 16.03.2008
Сообщений: 6,461
Записей в блоге: 2
26.06.2011, 17:14
Цитата Сообщение от botasa Посмотреть сообщение
вот типа такое while ( ( x != -1 ) || ( y != -1 ) || ( z != -1 ) ) и больше таких ( ... != -1 ) чтоб когда хоть один с них станет -1 цикл остановиться и перейдет ниже после while (...) {} кудато сюда ) у меня тупо так не получается сделать
Не стыковка. Написанного на си и на русском языке. В Коде записано условие продолжения цикла.
0
3 / 3 / 5
Регистрация: 18.01.2011
Сообщений: 131
26.06.2011, 17:19  [ТС]
Цитата Сообщение от voral Посмотреть сообщение
ваше условие
[CPP]
C++
1
while ( ( benzin != -1 ) && ( s != -1 ))
Это по русски будет так
Выполнять цикл до тех пор пока бензин не равен -1 И путь не равен -1. Т.е. выход из цикла будет осуществлен только в случае если любая из этих переменных станет равной -1. (т.е. то что вам нужно)
Если же вы хотите, что если бензин ввели -1. Про путь она даже и не справшивала. То после получения значения бензина надо ставить условие
вы мой самый первый код в компилятор загоните и сделайте while ( ( benzin != -1 ) && ( s != -1 )) и увидите что оно так не работает ... у у меня так оно не работает ... или компилятор глючит или я не то сделал

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

Добавлено через 1 минуту
вот посмотрите код и консоль
0
Эксперт С++
 Аватар для grizlik78
2382 / 1666 / 279
Регистрация: 29.05.2011
Сообщений: 3,402
26.06.2011, 17:20
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;
}
Но мой самый первый вариант всё-равно лучше.
1
3 / 3 / 5
Регистрация: 18.01.2011
Сообщений: 131
26.06.2011, 17:31  [ТС]
еще раз спасибо, теперь я довольный
0
27.06.2011, 06:54

Не по теме:

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

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
27.06.2011, 06:54
Помогаю со студенческими работами здесь

не пойму
имеется следующий стрингрид и имеется следующий код var sa:array of String; ii,i,j:Integer; s1,s2,stt,buf:string ; begin ...

Не пойму
К примеру Есть форма для выбора значения из базы. form action=&quot;index.php&quot; method=&quot;POST&quot;&gt; &lt;select name=&quot;filtr&quot;...

Не пойму!!!!!
Всем привет! как так сейчас максимальная скорость интернета 2048 кбит\сек тоесть 2мбит\сек почему при подключении вылазит скорость...

не пойму
у меня такая проблема. на сайт купилассылок он попер в низ был без купленных сылок шел вверх. возможно ли что это именно из за них?

1 условие не пойму.
Вот у меня условие: дано 2 числа a,b. Определить: a) Если а и b &lt;0 то Функция решений не имеет б) если а и b &gt;=0 то функция равно...


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

Или воспользуйтесь поиском по форуму:
18
Ответ Создать тему
Новые блоги и статьи
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru