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

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

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

Студворк — интернет-сервис помощи студентам
Напишите программу, суммирующую числа в указанном пользователем диапазоне, но без оператора 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
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
19.06.2013, 21:43
Ответы с готовыми решениями:

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

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

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

24
~ Эврика! ~
 Аватар для OhMyGodSoLong
1258 / 1007 / 74
Регистрация: 24.07.2012
Сообщений: 2,002
20.06.2013, 02:22
Студворк — интернет-сервис помощи студентам

Не по теме:

Поняны, почему я до сих пор не увидел очевидного решения? Почему у всех какие-то ?:, && и циклы, которые на самом деле неявно используют ветвления?

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <iostream>
#include <cmath>
 
int sum(int a, int b)
{
    return (std::abs(a - b) + 1) * (a + b) / 2;
}
 
int main()
{
    int a;
    int b;
 
    std::cin >> a >> b;
    std::cout << sum(a, b);
}
Если что, то abs тоже можно написать без ветвлений:
C++
1
2
3
4
5
int abs(int x)
{
    int y = x >> 31;
    return (x ^ y) - y;
}
(Работает при условии, что компилятор определяет >> как арифметический сдвиг, а вместо 31 будет стоять реальное количество битов в инте без одного знакового.)



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

Не по теме:

Ну или так:

C++
1
2
3
4
5
int abs(int x)
{
    unsigned y = x;
    return x * (1 - 2 * !!(y & (y >> 1)));
}

2
Модератор
Эксперт по электронике
8982 / 6749 / 921
Регистрация: 14.02.2011
Сообщений: 23,878
20.06.2013, 05:52
Цитата Сообщение от Croessmah Посмотреть сообщение
При выходе из цикла - когда v1!=v2 даст false.
ну да все правильно
пока v1 не равно v2 до него дело не дойдет
это у меня уже глаз "замылился"

Добавлено через 7 минут
Цитата Сообщение от OhMyGodSoLong Посмотреть сообщение
C++
1
2
3
4
5
int abs(int x)
{
  int y = x >> 31;
  return (x ^ y) - y;
}
(Работает при условии, что компилятор определяет >> как арифметический сдвиг, а вместо 31 будет стоять реальное количество битов в инте без одного знакового.)
это зависит от компилятора и размера инт в нем
а вот так должно быть переносимо
int abs(int x)
{
* * int y = x >> (sizeof(int)*8-1);
* * return (x ^ y) - y;
}

Не по теме:

я тоже хотел использовать знаковый бит
но про сдвиг забыл
нечего по ночам работать:(



Добавлено через 9 минут
Цитата Сообщение от OhMyGodSoLong Посмотреть сообщение
return x * (1 - 2 * !!(y & (y >> 1)));
x=y =3 (0011)
y>>1=1(0001)
0011 & (0001)) =0001
!!0001=1
в результате вместо 3 будет -3
0
Эксперт С++
 Аватар для Thinker
4267 / 2241 / 203
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
20.06.2013, 09:20
Цитата Сообщение от OhMyGodSoLong Посмотреть сообщение

Не по теме:

не увидел очевидного решения? Почему у всех какие-то ?:, && и циклы

да ладно, с самого начала этим направлением пошел , а потом
Цитата Сообщение от ValeryS Посмотреть сообщение
for нужен
переключился на другой фланг
но идеи ваши полезны

C++
1
2
3
4
5
6
7
8
int Sum(int a, int b)
{
   int sum, bit, znak;
   bit = ((b - a) >> (sizeof(a) * 8 - 1)) & 1;
   znak = 1 - 2 * bit;
   sum = (znak * (b - a) + 1) * (a + b) / 2;
   return sum;
}
0
~ Эврика! ~
 Аватар для OhMyGodSoLong
1258 / 1007 / 74
Регистрация: 24.07.2012
Сообщений: 2,002
20.06.2013, 10:24
Цитата Сообщение от ValeryS Посмотреть сообщение
а вот так должно быть переносимо
Строго говоря, это тоже непереносимо. В чаре не обязательно 8 битов, а int не обязательно использует все sizeof(int) * CHAR_BIT битов в своём представлении.

И сдвиг знаковых чисел вправо может быть как арифметическим, так и логическим: вместо знаковых битов могут записываться как нолики, так и значение знакового бита.
0
Модератор
Эксперт по электронике
8982 / 6749 / 921
Регистрация: 14.02.2011
Сообщений: 23,878
20.06.2013, 10:39
Цитата Сообщение от OhMyGodSoLong Посмотреть сообщение
Строго говоря, это тоже непереносимо. В чаре не обязательно 8 битов,
Теоретически да, практически давно не видел не 8 бит

Цитата Сообщение от OhMyGodSoLong Посмотреть сообщение
И сдвиг знаковых чисел вправо может быть как арифметическим, так и логическим: вместо знаковых битов могут записываться как нолики, так и значение знакового бита.
а здесь это без разницы
знаковый бит переходит в первый и что там вначале стоит не имеет значения
арифметический
1111 1111 = 1111 1111
логический
1111 1111= 0000 0001
можно даже не проверять последний бит положительное 0(false) отрицательное не ноль (true)
да и в C арифметический для signed логический для unsigned


Цитата Сообщение от OhMyGodSoLong Посмотреть сообщение
а int не обязательно использует все sizeof(int) * CHAR_BIT битов в своём представлении.
не понял
по стандарту int измеряется в char(байт) и ты хочешь сказать что
sizeof(int) может быть например 1.5 ?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
20.06.2013, 10:39

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

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

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


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

Или воспользуйтесь поиском по форуму:
25
Ответ Создать тему
Новые блоги и статьи
Про "Windows must die!"
kumehtar 04.11.2026
Знаете, чет накатило. . . . Когда-то это было почти боевым кличем: мол, нормальный человек сидит на DOS, OS/ 2 или Linux, а вот это вот - Must Die. А теперь человек произносит «мастдай» с усмешкой - и. . .
Красочные поля с номером страницы svg+background-image
russiannick 04.11.2026
Красочные поля с номером страницы не менее важны чем в эпоху бумажных книг. Посему спешу представить почтеннейшей публике этот важный инструмент который эти поля и формирует. В процессе разработки. . .
Вступаем в новую фазу генерации favicons, векторную.
russiannick 02.11.2026
Теперь нет нужды скрывать что используется простой svg. Исходный код изображения помещаем в поле и жмем кнопку. Исходник преобразуется в вид корректный для помещения в favicon или в url(). Нажатие. . .
Генератор паролей (вариант №4)
Maks 01.11.2026
После публикации 3-го варианта генератора паролей, разослал его своим коллегам (с целью оценки), в итоге были получены следующие рекомендации: 1. Вернуть возможность использования знаков | 1 l I;. . .
Генератор паролей (вариант №3)
Maks 30.10.2026
Финальная версия генератора паролей 1С. Доработка решения в этот раз коснулась только визуальной части, а именно, добавлен реквизит ДопПараметры (тип Булево), который скрывает/ отображает реквизиты:. . .
Магическое мышление и магия, современная наука не отличима от магии (говорит ИИ Джемени)
zorxor 30.10.2026
Джемени, расскажи, пожалуйста, что такое магическое мышление, что такое магия, почему современная наука чем-то напоминает магию? Фраза «Любая достаточно развитая технология неотличима от магии». . .
За какое время ИИ может подобрать пароль по хешу (рассказывает Джемени ИИ)
zorxor 30.10.2026
Расскажи, Джемени, если известен хэш МД5, например, за сколько ИИ сможет подобрать соответствующий пароль? Искусственный интеллект (ИИ) может подобрать простой или средний по сложности пароль по. . .
Кто убил Suno? Почему наше солнышко погасло? (диалог с ИИ Джемени)
zorxor 30.10.2026
Как убивали Suno. Хронология. «Убийство» музыкальной нейросети Suno — это затяжной процесс, в котором технологический хайп стартапа разбился о жесткую реальность судебных исков от гигантов. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru