Другое С/С++ Вопрос - Ответ

f.lux

Новичок
8
0
задача: запросить у пользователя два целых числа и вычислить диапазон, заданный этими числами (обязательно через while и только через него)
диапазон:
#include <iostream>
using namespace std;

int main()
{
    int a, b;
    cout << "Enter two numbers: " << endl;
    cin >> a >> b;

    while (a < b)
    {
        a++;
        cout << a;
        
    }
так вот, если ввести допустим первым числом 5, а вторым 8 то на выходе получим 6 7 и 8, которая не является диапазоном.
понимаю, почему она выводится, но не понимаю, как это пофиксить.
вопрос тупой, но все же, если не трудно - помогите
 

Musaigen

abobusnik
Проверенный
1,606
1,361
задача: запросить у пользователя два целых числа и вычислить диапазон, заданный этими числами (обязательно через while и только через него)
диапазон:
#include <iostream>
using namespace std;

int main()
{
    int a, b;
    cout << "Enter two numbers: " << endl;
    cin >> a >> b;

    while (a < b)
    {
        a++;
        cout << a;
     
    }
так вот, если ввести допустим первым числом 5, а вторым 8 то на выходе получим 6 7 и 8, которая не является диапазоном.
понимаю, почему она выводится, но не понимаю, как это пофиксить.
вопрос тупой, но все же, если не трудно - помогите
while (a <= b)

еще можно и этим гениальным кодом
C++:
if(a == b)
    a -= 1;

было бы все так просто, я бы сюда не отписывался, после того как мы получили 7 и вывели ее на экран - ide дальше продолжает цикл так как 7 не больше и не равняется 8, цикл продолжается - a (7)++ и сразу же сиаутом выводит результат (8)
я нуб в плюсах, но можешь попробовать ++a;
 
Последнее редактирование:

f.lux

Новичок
8
0
while (a <= b)

еще можно и этим гениальным кодом
C++:
if(a == b)
    a -= 1;
было бы все так просто, я бы сюда не отписывался, после того как мы получили 7 и вывели ее на экран - ide дальше продолжает цикл так как 7 не больше и не равняется 8, цикл продолжается - a (7)++ и сразу же сиаутом выводит результат (8)
 

Petr_Sergeevich

Известный
Проверенный
707
297
было бы все так просто, я бы сюда не отписывался, после того как мы получили 7 и вывели ее на экран - ide дальше продолжает цикл так как 7 не больше и не равняется 8, цикл продолжается - a (7)++ и сразу же сиаутом выводит результат (8)
b - 1, не?

Если нужно включая границы,
while (a <= b) {
cout << a;
a++
}
while (a <= b)

еще можно и этим гениальным кодом
C++:
if(a == b)
    a -= 1;
5, 8 => 6, 7, 8, 9
?
 

f.lux

Новичок
8
0
в том плане что, пользователь задает два числа, например 5 и 8, следовательно диапазон обусловленный этими двумя числами - 6 и 7.
и границы, коими являются числа 5 и 8 выводить не нужно, нужен только один лишь диапазон.
 
Последнее редактирование:

Dark_Knight

Me, me and me.
Друг
4,078
2,095
Ну на. Пробуй.
C++:
#include <iostream>
using namespace std;
int main() {
    int min, max, a, b;
    min = max = a = b = 0;
    cout << "Enter min and max" << "\n" ;
    cin >> min >> max;
    if(min > max ){
        cout << "Error 1";
        return 0;
    }
    else if( min == max){
        cout << "Error 2" << "\n";
        return 0;
    } else {
        a = min + 1;
        b = max - 1;
        if(a >= b ){
            cout << "Error 3" << "\n";
            return 0;
        }
        else if(a == b) {
            cout << "Error 4" << "\n";
            return 0;
        }
        else {
            cout << "Print range: " << "\n";
            while(a <= b){
                cout << a << "\n";
                a++;
            }
        }
    }
    return 0;
}
 
  • Bug
Реакции: BlackKnigga

bet.io

Известный
117
16
1. Подскажите пожалуйста, что я не так сделал. Программа должна сделать следующее условие: Необходимо найти минимальный m1 и максимальный m2 нечётные элементы (если в массиве нет нечётных элементов, m1 и m2 считаются равными нулю), уменьшить все чётные элементы, значения которых попадают в интервал (m1; m2), на величину m1 и вывести изменённый массив. Например, для исходного массива из пяти элементов 30, 89, 27, 90, 68 программа должна вывести числа 3, 89, 27, 90, 41 (минимум и максимум равны 27 и 89, все чётные элементы из интервала (27; 89) уменьшены на 27).
Код:
#include <iostream>
using namespace std;
void main()
{
    setlocale(0, "");
    int a[5], m1=INT_MAX, m2=INT_MIN, i=5;
    for (int i = 0; i < 5; i++)
    {
        cin >> a[i];
        if (a[i] % 2 != 0 && a[i] > m2) m2 = a[i];
        if (a[i] % 2 != 0 && a[i] < m1) m1 = a[i];
    }
    if (m2 < INT_MIN) m2 = 0;
    for (int i = 0; i < 5; i++)
    {
        if (a[i] % 2 == 0 && a[i] > m2&& a[i] < m1) a[i] -= m1;
    }
    cout << a[i];
    cin.get(); cin.get();
}
 

ImPasha

Software Developer & System Administrator
Друг
1,789
2,141
1. Подскажите пожалуйста, что я не так сделал. Программа должна сделать следующее условие: Необходимо найти минимальный m1 и максимальный m2 нечётные элементы (если в массиве нет нечётных элементов, m1 и m2 считаются равными нулю), уменьшить все чётные элементы, значения которых попадают в интервал (m1; m2), на величину m1 и вывести изменённый массив. Например, для исходного массива из пяти элементов 30, 89, 27, 90, 68 программа должна вывести числа 3, 89, 27, 90, 41 (минимум и максимум равны 27 и 89, все чётные элементы из интервала (27; 89) уменьшены на 27).
Код:
#include <iostream>
using namespace std;
void main()
{
    setlocale(0, "");
    int a[5], m1=INT_MAX, m2=INT_MIN, i=5;
    for (int i = 0; i < 5; i++)
    {
        cin >> a[i];
        if (a[i] % 2 != 0 && a[i] > m2) m2 = a[i];
        if (a[i] % 2 != 0 && a[i] < m1) m1 = a[i];
    }
    if (m2 < INT_MIN) m2 = 0;
    for (int i = 0; i < 5; i++)
    {
        if (a[i] % 2 == 0 && a[i] > m2&& a[i] < m1) a[i] -= m1;
    }
    cout << a[i];
    cin.get(); cin.get();
}

C++:
#include <iostream>
using namespace std;

int main()
{
  int a[5], m1 = 0, m2 = 0;
  for (int i = 0; i < 5; i++) {
    cin >> a[i];  
    if (a[i] % 2 != 0 && m2 == 0)
      m2 = a[i];
    if (a[i] % 2 != 0 && a[i] > m1)
      m1 = a[i];
    if (a[i] % 2 != 0 && a[i] < m2)
      m2 = a[i];
  }
  for (int i = 0; i < 5; i++) {
    if (a[i] % 2 == 0 && a[i] > m2 && a[i] < m1)
      a[i] -= m2;
      if (i == 4)
        cout << a[i];
      else
        cout << a[i] << ", ";
  }
}
 
Последнее редактирование:
  • Влюблен
Реакции: bet.io

bet.io

Известный
117
16
C++:
#include <iostream>
using namespace std;

int main()
{
  int a[5], m1 = 0, m2 = 0;
  for (int i = 0; i < 5; i++) {
    cin >> a[i];
    if (a[i] % 2 != 0 && m2 == 0)
      m2 = a[i];
    if (a[i] % 2 != 0 && a[i] > m1)
      m1 = a[i];
    if (a[i] % 2 != 0 && a[i] < m2)
      m2 = a[i];
  }
  for (int i = 0; i < 5; i++) {
    if (a[i] % 2 == 0 && a[i] > m2 && a[i] < m1)
      a[i] -= m2;
      if (i == 4)
        cout << a[i];
      else
        cout << a[i] << ", ";
  }
}
Поясни пожалуйста все изменения, которые ты сделал. Особо не понятна вот эта строка:
Код:
      if (i == 4)
        cout << a[i];
      else
        cout << a[i] << ", ";
 
Последнее редактирование:

ImPasha

Software Developer & System Administrator
Друг
1,789
2,141
Поясни пожалуйста что делают эти строки
Код:
      if (i == 4)
        cout << a[i];
      else
        cout << a[i] << ", ";
Если в обработке находится последний пятый элемент массива, просто выводим его, а если нет, добавляем после элемента запятую.
ты убрал из переменных i=5?
Это не нужно, так как переменная i автоматически объявляется при воспроизведении каждого из циклов.
 
  • Влюблен
Реакции: bet.io