Поиск
 
 

Результаты :
 


Rechercher Расширенный поиск

Кто сейчас на форуме
Сейчас посетителей на форуме: 1, из них зарегистрированных: 0, скрытых: 0 и гостей: 1

Нет

[ Посмотреть весь список ]


Больше всего посетителей (9) здесь было Вс Фев 11, 2018 12:54 pm
Самые активные пользователи за неделю
Ярослав
 


Помощь в дз №3.

Страница 1 из 2 1, 2  Следующий

Перейти вниз

Помощь в дз №3.

Сообщение автор Gragory023 в Пн Янв 16, 2017 2:43 pm

Не получается сделать вторую задачку.
1. С помощью while надо расположить диапазон чисел на четные, если да то как?(пробовал использовать деление с остатком, но не получается)
2. После того как разложили, как взять эти цифры и сложить?
Понимаю, что прошу тут решение, но был бы благодарен хотя бы подсказкой )

Gragory023

Posts : 75
Join date : 2016-12-28

Посмотреть профиль

Вернуться к началу Перейти вниз

Re: Помощь в дз №3.

Сообщение автор Ярослав в Пн Янв 16, 2017 3:12 pm

1. Можно перебирать все числа диапазона, но учитывать только нечётные
2. Это цикл с накопляющей переменной. Нужна дополнительная переменная, в которую складываем результат.
avatar
Ярослав
Admin

Posts : 600
Join date : 2016-12-21
Location : Москва

Посмотреть профиль http://itstep.forum2x2.ru

Вернуться к началу Перейти вниз

Re: Помощь в дз №3.

Сообщение автор Gragory023 в Пн Янв 16, 2017 3:27 pm

А как учесть только нечетные?

Gragory023

Posts : 75
Join date : 2016-12-28

Посмотреть профиль

Вернуться к началу Перейти вниз

Re: Помощь в дз №3.

Сообщение автор Ярослав в Пн Янв 16, 2017 3:28 pm

С помощью if. Если нечётное, складываем, если чётное — ничего не надо делать.
avatar
Ярослав
Admin

Posts : 600
Join date : 2016-12-21
Location : Москва

Посмотреть профиль http://itstep.forum2x2.ru

Вернуться к началу Перейти вниз

Re: Помощь в дз №3.

Сообщение автор Gragory023 в Пн Янв 16, 2017 3:40 pm

#include <iostream>

using namespace std;

int main() {
int a, b, res;

cout << " Enter two numbers for summ of the odd numbers" << endl;
cin >> a;
cin >> b;
while (a < b) {

a++;
cout << a<<endl ;
if (a % 2 != 0) {
res =
}
}




}
И дальше просто ступор((( Огорчён

Gragory023

Posts : 75
Join date : 2016-12-28

Посмотреть профиль

Вернуться к началу Перейти вниз

Re: Помощь в дз №3.

Сообщение автор Ярослав в Пн Янв 16, 2017 3:48 pm

Циклы с накопляющей переменной обычно выглядят так:

Код:
int res = 0; // переменная для накопления результата. стартовое значение.
while (...) {
    res = res + что-то; // добавить к уже имеющейся сумме новое значение
    ...
}
cout << res; // смотрим накопившийся результат

Идея такая, что на каждом витке мы добавляем к переменной res ещё немного, а в итоге в ней набирается сумма. Результат используется после окончания цикла.
avatar
Ярослав
Admin

Posts : 600
Join date : 2016-12-21
Location : Москва

Посмотреть профиль http://itstep.forum2x2.ru

Вернуться к началу Перейти вниз

Re: Помощь в дз №3.

Сообщение автор Gragory023 в Пн Янв 16, 2017 4:11 pm

Не получается понять идею((((

Gragory023

Posts : 75
Join date : 2016-12-28

Посмотреть профиль

Вернуться к началу Перейти вниз

Re: Помощь в дз №3.

Сообщение автор Ярослав в Пн Янв 16, 2017 4:45 pm

Цикл с накопляющей переменной
Покажу на примере попроще: считаем сумму чисел от 1 до 5.

Управляющая переменная — i, пробегает значения от 1 до 5.
Накопляющая переменная — sum, изначально равная 0. По сути, мы делаем
Код:
sum = 0;
sum = sum + 1;
sum = sum + 2;
sum = sum + 3;
sum = sum + 4;
sum = sum + 5;

Последние пять строчек имеют очень одинаковую структуру. А именно, они выглядят как
sum = sum + i;
где i пробегает значения от 1 до 5.

Для пробегания i от 1 до 5 пишем цикл while:

Код:
int i = 1;
while (i <= 5) {
    // здесь надо сделать какую-то полезную работу с учётом i:
    sum = sum + i;
    // переход к следующему i
    i++;
}

Можно под отладчиком посмотреть, как изменяются i и sum, чтобы убедиться, что sum включает в себя сумму всех чисел от 1 до 5, добавляемых постепенно.

Это понятно или не очень?
avatar
Ярослав
Admin

Posts : 600
Join date : 2016-12-21
Location : Москва

Посмотреть профиль http://itstep.forum2x2.ru

Вернуться к началу Перейти вниз

Re: Помощь в дз №3.

Сообщение автор Gragory023 в Пн Янв 16, 2017 4:56 pm

Это я понял, мы как раз пример такой на уроке делали. А вот как от туда выделить нечетные числа и сложить их? Ведь переменная одна будет, которая меняется с каждым шагом(

Gragory023

Posts : 75
Join date : 2016-12-28

Посмотреть профиль

Вернуться к началу Перейти вниз

Re: Помощь в дз №3.

Сообщение автор Ярослав в Пн Янв 16, 2017 5:02 pm

Псевдокод:
Код:
sum = 0
для каждого i от a до b 
    если i нечётное
        увеличить sum на i

Мы используем управляющую переменную i двояко:
1) проверяем, что i подходящее (нечётное), и только в этом случае действуем:
2) увеличиваем сумму на очередное нечётное число, которое как раз совпадает с i
avatar
Ярослав
Admin

Posts : 600
Join date : 2016-12-21
Location : Москва

Посмотреть профиль http://itstep.forum2x2.ru

Вернуться к началу Перейти вниз

Re: Помощь в дз №3.

Сообщение автор Gragory023 в Вт Янв 17, 2017 9:04 am

Не понятно.
Например, есть два числа 11 и 19, где 11 это а, 19 это б. Так что подразумевается под i?
(как мне кажется, что это число 2, правильно или нет?)

Gragory023

Posts : 75
Join date : 2016-12-28

Посмотреть профиль

Вернуться к началу Перейти вниз

Re: Помощь в дз №3.

Сообщение автор Gragory023 в Вт Янв 17, 2017 9:34 am

#include <iostream>

using namespace std;

int main() {

int sum = 0;
int i = 1;
int b;

cin >> b;
while (i <= b) {
sum = sum +i;
i++;
if (i % 2 != 0) {
cout << i << " " << sum << endl;
}
}
}

Пока только так получается. Не понимаю, как ввести и i и a(первое число). Так же почему то первое число, которое сейчас является i(1) не учитывается(
Нечетные числа показывает правильно, а сумму считает не верно(

Gragory023

Posts : 75
Join date : 2016-12-28

Посмотреть профиль

Вернуться к началу Перейти вниз

Re: Помощь в дз №3.

Сообщение автор Ярослав в Вт Янв 17, 2017 12:33 pm

a и b — начало и конец диапазона, просто вводятся с клавиатуры.
i — переменная, которая поочерёдно принимает значения, начиная с a и заканчивая b.

Вот это в принципе было правильно:
Код:
cout << " Enter two numbers for summ of the odd numbers" << endl;
cin >> a;
cin >> b;
while (a < b) {

    a++;
    cout << a<<endl ;
    if (a % 2 != 0) {
        res =
    }
}
Только я ввёл дополнительную i, чтобы не корёжить исходные данные (переменную a).

Увеличение управляющей переменной, i++ (или a++), обычно ставится в конец: это должна быть последняя операция в цикле — переход к следующему значению.

Все действия я занёс внутрь if, чтобы в работе алгоритма учитывались только нечётные i. И там же, внутри if, суммируем.

i++ должно происходить независимо от того, i чётное или нечётное — оно остаётся снаружи.

Код:
cout << "Enter range: " << endl;
cin >> a;
cin >> b;

int i = a;
while (i < b) {
    if (i % 2 != 0) {
        cout << i<<endl ;
        res =
    }
    i++;
}


Последний раз редактировалось: Ярослав (Вт Янв 17, 2017 1:05 pm), всего редактировалось 1 раз(а)
avatar
Ярослав
Admin

Posts : 600
Join date : 2016-12-21
Location : Москва

Посмотреть профиль http://itstep.forum2x2.ru

Вернуться к началу Перейти вниз

Re: Помощь в дз №3.

Сообщение автор Gragory023 в Вт Янв 17, 2017 12:56 pm

Получилось, спасибо огромное) Прыг-прыг-прыг

Gragory023

Posts : 75
Join date : 2016-12-28

Посмотреть профиль

Вернуться к началу Перейти вниз

Re: Помощь в дз №3.

Сообщение автор Ярослав в Вт Янв 17, 2017 1:12 pm

Здесь должно быть «меньше» или «меньше или равно»?

Код:
while (i < b)
avatar
Ярослав
Admin

Posts : 600
Join date : 2016-12-21
Location : Москва

Посмотреть профиль http://itstep.forum2x2.ru

Вернуться к началу Перейти вниз

Re: Помощь в дз №3.

Сообщение автор Gragory023 в Вт Янв 17, 2017 1:20 pm

Поставил меньше, если стоит меньше и равно то получается не верно)))
Проблема возникает, когда второе число четным указываешь.
Как я понял добавляется к сумме число a и b.

Gragory023

Posts : 75
Join date : 2016-12-28

Посмотреть профиль

Вернуться к началу Перейти вниз

Re: Помощь в дз №3.

Сообщение автор Ярослав в Вт Янв 17, 2017 1:51 pm

Интервал должен включать концевые числа. Можно посмотреть на маленьких примерах:

В интервале [1; 5] всего три нечётных числа: 1, 3, 5. 1+3+5 = 9.
В интервале [1; 7]: 1+3+5+7 = 16.
avatar
Ярослав
Admin

Posts : 600
Join date : 2016-12-21
Location : Москва

Посмотреть профиль http://itstep.forum2x2.ru

Вернуться к началу Перейти вниз

Re: Помощь в дз №3.

Сообщение автор Gragory023 в Вт Янв 17, 2017 2:00 pm

А теперь запутался, у меня в интервале не включены концевые числа, но считает верно. А если включить то не верно(((

Gragory023

Posts : 75
Join date : 2016-12-28

Посмотреть профиль

Вернуться к началу Перейти вниз

Re: Помощь в дз №3.

Сообщение автор Ярослав в Вт Янв 17, 2017 2:01 pm

Под отладчиком надо смотреть, в какой момент начинает работать не так.
avatar
Ярослав
Admin

Posts : 600
Join date : 2016-12-21
Location : Москва

Посмотреть профиль http://itstep.forum2x2.ru

Вернуться к началу Перейти вниз

Re: Помощь в дз №3.

Сообщение автор Gragory023 в Вт Янв 17, 2017 2:07 pm

int sum = 0;
int a;
int b;
cout << " Please Enter two numbers for summ of the odd numbers" << endl;
cin >> a;
cin >> b;
int i = a;
while (i < b) {
if (i % 2 != 0) {
sum = sum + i;
}
else {
i++;
sum = sum + i;
}
i++;
}
cout << "Sum of the odd numbers = " << sum <<endl;
Вроде работает верно.

Gragory023

Posts : 75
Join date : 2016-12-28

Посмотреть профиль

Вернуться к началу Перейти вниз

Re: Помощь в дз №3.

Сообщение автор Ярослав в Вт Янв 17, 2017 2:15 pm

Можно заключать код в метки [ code ] ... [ /code ] (без пробелов), чтобы сохранять форамтирование.

Логика переусложнена. Ты обрабатываешь два случая: чётное и нечётное число, и в случае чётного происходит переход к «послеследующему» числу, что чревато нарушением краевых условий.

В данном случае, чем проще, тем лучше. Например:

Код:
i = a
пока i <= b {
    если i нечётное
        добавляем i к sum
    иначе // если i чётное
        ничего не делаем. пропускаем это i

    i++ // переходим к следующему i
}

Блок «иначе ничего не делать» можно написать в виде:
Код:
else
    ; // просто точка с запятой является допустимой командой в C, означающей «ничего не делать»
или ещё проще: вообще не писать блок else
avatar
Ярослав
Admin

Posts : 600
Join date : 2016-12-21
Location : Москва

Посмотреть профиль http://itstep.forum2x2.ru

Вернуться к началу Перейти вниз

Re: Помощь в дз №3.

Сообщение автор Gragory023 в Вт Янв 17, 2017 2:27 pm

С трудом, но вроде разобрался))))

Gragory023

Posts : 75
Join date : 2016-12-28

Посмотреть профиль

Вернуться к началу Перейти вниз

Re: Помощь в дз №3.

Сообщение автор Gragory023 в Вт Янв 17, 2017 2:30 pm

Вот плохо понимаю, если sum = стоит в if, то почему при не выполнении этого условия формула действительна и в else?

Gragory023

Posts : 75
Join date : 2016-12-28

Посмотреть профиль

Вернуться к началу Перейти вниз

Re: Помощь в дз №3.

Сообщение автор Ярослав в Вт Янв 17, 2017 5:49 pm

Не понял. Else, как я считаю, вообще лишний.
avatar
Ярослав
Admin

Posts : 600
Join date : 2016-12-21
Location : Москва

Посмотреть профиль http://itstep.forum2x2.ru

Вернуться к началу Перейти вниз

Re: Помощь в дз №3.

Сообщение автор Gragory023 в Вт Янв 17, 2017 7:14 pm

Код:
while (i <= b) {
 if (i % 2 != 0) {
 sum = sum + i;//просто не очень понятно, как эта формула в данном условии  выполняется и без условия
 }
 
 i++;
 }

p.s. Видимо я уже просто запутался))))

Gragory023

Posts : 75
Join date : 2016-12-28

Посмотреть профиль

Вернуться к началу Перейти вниз

Re: Помощь в дз №3.

Сообщение автор Спонсируемый контент


Спонсируемый контент


Вернуться к началу Перейти вниз

Страница 1 из 2 1, 2  Следующий

Вернуться к началу


 
Права доступа к этому форуму:
Вы не можете отвечать на сообщения