Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 5.00/15: Рейтинг темы: голосов - 15, средняя оценка - 5.00
21 / 10 / 5
Регистрация: 07.01.2013
Сообщений: 222
1

Оператор for, без if (Напишите программу, суммирующую числа в указанном пользователем диапазоне, но без оператора if, который устанавливает границы)

19.06.2013, 21:43. Показов 2871. Ответов 24
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Напишите программу, суммирующую числа в указанном пользователем диапазоне, но без оператора if, который устанавливает верхнюю и нижнюю границы. Что произойдет, если числа 7 и 3 ввести именно в таком порядке? Запустите программу, введите 7 и 3. Добейтесь того, чтобы программа работала и при таком порядке ввода чисел.

Никак не могу сделать эту задачу. Как не бился. Без ифа никак(((
Хелп, что нужно добавить в этот код, чтобы он работал:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
#include <iostream>
using namespace std;
 
int main ()
{
    int v1,v2;
    cout<<"enter two nubers: "<<endl;
    cin>>v1>>v2;
    for (int i=v1; i<=v2; ++i)
        sum+=i;
    cout<<sum<<endl;
    return 0;
}
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
19.06.2013, 21:43
Ответы с готовыми решениями:

Напишите программу, которая в указанном пользователем каталоге и его подкаталогах выполняет поиск файла
Напишите программу, которая в указанном пользователем каталоге и его подкаталогах выполняет поиск...

Напишите программу, вычисляющую определенный интеграл на указанном пользователем промежутке и с указанным шагом разбиения этого промежутка
Напишите программу, вычисляющую определенный интеграл на указанном пользователем промежутке и с...

С помощью оператора while напишите программу определения суммы всех нечетных чисел в диапазоне от 1 до 99 включительно.
Помогите кто может найти решения!!! С помощью оператора while напишите программу определения...

С помощью оператора while напишите программу определения суммы всех нечетных чисел в диапазоне от 1 до 99 включительно.
Практическая работа Задание 9. С помощью оператора while напишите программу определения суммы...

24
Эксперт С++
4267 / 2241 / 203
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
19.06.2013, 21:49 2
Лучший ответ Сообщение было отмечено как решение

Решение

вот вам совсем без if и for:
C++
1
cout << (a <= b) * (a * (b - a + 1) + (b - a) * (b - a + 1) / 2) + (b < a) * (b * (a - b + 1) + (a - b) * (a - b + 1) / 2);
3
2664 / 2239 / 240
Регистрация: 03.07.2012
Сообщений: 8,141
Записей в блоге: 1
19.06.2013, 21:52 3
Можно тернарную операцию использовать...
0
Модератор
Эксперт по электронике
8908 / 6677 / 918
Регистрация: 14.02.2011
Сообщений: 23,520
19.06.2013, 21:56 4
Цитата Сообщение от Аццкий Прогер Посмотреть сообщение
что нужно добавить в этот код, чтобы он работал
C++
1
2
3
4
5
6
7
8
9
10
11
12
#include <iostream>
using namespace std;
int main ()
{
 int v1,v2;
 cout<<"enter two nubers: "<<endl;
 cin>>v1>>v2;
 for (int i=v1; i<=v2; ++i)
      sum+=i;
 cout<<sum<<endl;
 return 0;
}
объявить sum и приравнять его к 0
например так
C++
1
 int sum=0;
0
21 / 10 / 5
Регистрация: 07.01.2013
Сообщений: 222
19.06.2013, 21:58  [ТС] 5
Цитата Сообщение от ValeryS Посмотреть сообщение
объявить sum и приравнять его к 0
например так
*
C++
1
 int sum=0;
*
это я просто пропустил, суть вопроса, как решить задание не используя оператор иф! )))
0
Эксперт С++
4267 / 2241 / 203
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
19.06.2013, 22:00 6
Цитата Сообщение от Аццкий Прогер Посмотреть сообщение
это я просто пропустил, суть вопроса, как решить задание не используя оператор иф! )))
так в посте #2 пример как совсем без if и for. проще некуда
0
Модератор
Эксперт по электронике
8908 / 6677 / 918
Регистрация: 14.02.2011
Сообщений: 23,520
19.06.2013, 22:13 7
тебе нужна сумма от 3 до 7 не зависимо как их вызвали?
можно так
C++
1
2
3
4
for (int i=v1; i<=v2; ++i)
        sum+=i;
for (int i=v2; i<=v1; ++i)
        sum+=i;
если v1 меньше v2
то будет работать первый цикл иначе второй
косяк будет если пределы равны сработают оба цикла sum будет удвоенный
хотя это можно обойти так
C++
1
2
3
4
5
for (int i=v1; i<=v2; ++i)
        sum+=i;
for (int i=v2; i<=v1; ++i)
        sum+=i;
sum-=v1*(!(v1-v2))
Добавлено через 1 минуту
Цитата Сообщение от Thinker Посмотреть сообщение
так в посте #2 пример как совсем без if и for.
Я так понял что for нужен

Добавлено через 5 минут

Не по теме:

Цитата Сообщение от Thinker Посмотреть сообщение
проще некуда
ты опять в своем репертуаре :)
сумма арифметической прогрессии но без расшифровки

1
Эксперт С++
4267 / 2241 / 203
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
19.06.2013, 22:19 8
с for так c for
C++
1
2
3
4
5
   sum = 0;
   for(i = a; i <= b; ++i)
      sum += i;
   for(i = b; i < a; ++i)
      sum += i;
Добавлено через 5 минут
Цитата Сообщение от ValeryS Посмотреть сообщение

Не по теме:


ты опять в своем репертуаре

Не по теме:

что поделать:)

1
Модератор
Эксперт по электронике
8908 / 6677 / 918
Регистрация: 14.02.2011
Сообщений: 23,520
19.06.2013, 22:19 9
Цитата Сообщение от Thinker Посмотреть сообщение
sum += (a <= b) * i;
лишнее это
если a <b то исполнится первый цикл
если больше второй
не зачем условие вставлять
но если a == b то исполнятся оба по разу в результате в sum удвоенное значение
0
Эксперт С++
4267 / 2241 / 203
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
19.06.2013, 22:20 10
Цитата Сообщение от ValeryS Посмотреть сообщение
косяк будет
не будет, если границы правильно расставить
0
Модератор
Эксперт по электронике
8908 / 6677 / 918
Регистрация: 14.02.2011
Сообщений: 23,520
19.06.2013, 22:20 11
а ты уже поправил
0
Эксперт С++
4267 / 2241 / 203
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
19.06.2013, 22:21 12
Цитата Сообщение от ValeryS Посмотреть сообщение
лишнее это
давно исправил
1
Модератор
Эксперт по электронике
8908 / 6677 / 918
Регистрация: 14.02.2011
Сообщений: 23,520
19.06.2013, 22:23 13
Цитата Сообщение от Thinker Посмотреть сообщение
не будет, если границы правильно расставить
согласен
это я чейто ступил
Ну не могут два человека мыслить одинаково

Добавлено через 1 минуту

Не по теме:

Цитата Сообщение от Thinker Посмотреть сообщение
давно исправил
давно :) две минуты прошло:)
я за тобой не успеваю:)

1
21 / 10 / 5
Регистрация: 07.01.2013
Сообщений: 222
19.06.2013, 22:39  [ТС] 14
Спасибо ребята, помогли))
0
Неэпический
17870 / 10635 / 2054
Регистрация: 27.09.2012
Сообщений: 26,736
Записей в блоге: 1
19.06.2013, 22:43 15
Вот еще простенький вариант:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <iostream>
using namespace std;
 
int main ()
{
    int v1,v2;
    int sum=0;
    cout<<"enter two nubers: "<<endl;
    cin>>v1>>v2;
    int step=1+(-2*(v1>v2));
    for (; v1!=v2 || ((sum+=v1) && false) ; v1+=step)
        sum+=v1;
    cout<<sum<<endl;
    return 0;
}
2
Модератор
Эксперт по электронике
8908 / 6677 / 918
Регистрация: 14.02.2011
Сообщений: 23,520
19.06.2013, 22:53 16
Цитата Сообщение от Аццкий Прогер Посмотреть сообщение
Напишите программу, суммирующую числа в указанном пользователем диапазоне, но без оператора if, который устанавливает верхнюю и нижнюю границы.
Цитата Сообщение от zer0mail Посмотреть сообщение
Можно тернарную операцию использовать...
Можно так еще
C++
1
2
for (int i=(v2-v1>0)?v1:v2; i<=(v2-v1>0)?v2:v1; ++i)
        sum+=i;
но лично мне это не нравится

Добавлено через 5 минут
Цитата Сообщение от Croessmah Посмотреть сообщение
((sum+=v1) && false)
а в чем смысл false?
всегда ложь
тогда это выражение
Цитата Сообщение от Croessmah Посмотреть сообщение
v1!=v2 || ((sum+=v1) && false)
превращается в
C++
1
v1!=v2
или я чегойто недопонял?
0
Неэпический
17870 / 10635 / 2054
Регистрация: 27.09.2012
Сообщений: 26,736
Записей в блоге: 1
19.06.2013, 22:58 17
Цитата Сообщение от ValeryS Посмотреть сообщение
превращается в
тогда пропустим суммирование последнего элемента

Цитата Сообщение от ValeryS Посмотреть сообщение
а в чем смысл false?
в том, чтобы не допустить общего true
выражение целиком построено на лентяях
0
Модератор
Эксперт по электронике
8908 / 6677 / 918
Регистрация: 14.02.2011
Сообщений: 23,520
19.06.2013, 23:14 18
Цитата Сообщение от Croessmah Посмотреть сообщение
в том, чтобы не допустить общего true
переведи
все врубился
ну ты и закрутил пришлось в ручную цикл проходить
и возник вопрос

Цитата Сообщение от Croessmah Посмотреть сообщение
* * for (; v1!=v2 || ((sum+=v1) && false) ; v1+=step)
здесь sum каждую итерацию будет прибавляться или только один раз при входе в цикл?
0
Комп_Оратор)
Эксперт по математике/физике
8949 / 4703 / 629
Регистрация: 04.12.2011
Сообщений: 13,999
Записей в блоге: 16
19.06.2013, 23:25 19
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
#include <iostream>
using namespace std;
int main(){
setlocale(0,"rus");
const int lower=1;
const int upper=111;
cout<<"Для выхода из цикла запросов введите отрицательное для любого числа "<<endl;
int f_numb=0;
int s_numb=0;
do{
cout<<"\nВведите 1-е число ";
cin>>f_numb;
cout<<endl;
cout<<"Введите 2-е число ";
cin>>s_numb;
cout<<endl;
while( lower <= f_numb && f_numb <= upper && lower <= s_numb && s_numb <= upper ){
cout << "Величины в диапазоне от " << lower << " до " << upper << endl;
cout << "Их сумма равна " << (f_numb + s_numb)<<endl;
break;
}
while( (f_numb >= 0 && f_numb >=0) && lower > f_numb || f_numb > upper || lower > s_numb || s_numb > upper ){
cout << "Величины НЕ в диапазоне от " << lower << " до " << upper << endl;
break;
}
}while( f_numb >= 0 && s_numb >= 0 );
 
while ( f_numb < 0 || s_numb < 0 ){
cout<<"\nДавай, - досвидания!";
break;
}
cin.get();
cin.get();
}
Ни ифа ни фора.
1
Неэпический
17870 / 10635 / 2054
Регистрация: 27.09.2012
Сообщений: 26,736
Записей в блоге: 1
20.06.2013, 01:20 20
Цитата Сообщение от ValeryS Посмотреть сообщение
здесь sum каждую итерацию будет прибавляться или только один раз при входе в цикл?
При выходе из цикла - когда v1!=v2 даст false. Но можно внести в условие так, что сам цикл останется пустым
0
20.06.2013, 01:20
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
20.06.2013, 01:20
Помогаю со студенческими работами здесь

Функция, заполняющая массив псевдослучайными числами в заданном пользователем диапазоне без повторений
Тема: Функции2. 4. Реализовать функцию RandWithoutRepetition, с помощью которой можно было бы...

Используя оператор while напишите программу определения всех чисел в диапазоне от 1 до 100 включительно, кото
С помощью оператора while напишите программу определения всех чисел в диапазоне от 1 до 100...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru