Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 24.09.2013, 14:23   #11
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,291
По умолчанию

Код:
#include<stdio.h>
#include<iostream>

using namespace std;

int
sumSequence()
{
    int accumulator = 0, cislo = 0;
    while (true) {
        cin >> cislo;
        if (cislo < 0)
            return accumulator;
        else
            accumulator += cislo;
    }
}

int
main(int arg, char* pszArgs[])
{
    int accumulatedValue = 0, tmp, fl = 2;
    do {
        cout << "Vvedite posledovatelnost:" << endl;
        tmp = sumSequence();
        accumulatedValue += tmp;
        if (fl)
           --fl;
    } while (fl || tmp);
    cout << "accumulatedValue = " << accumulatedValue << endl;
    system("pause");
    return 0;
}
Вот с таким костылем работает, как нужно, вроде
Благодаря нему цикл в main срабатывает как минимум 2 раза.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )

Последний раз редактировалось BDA; 24.09.2013 в 14:41.
BDA вне форума Ответить с цитированием
Старый 24.09.2013, 15:43   #12
Igor95
Форумчанин
 
Регистрация: 03.01.2013
Сообщений: 388
По умолчанию

Код:
return accumulator;
Вы после первой итерации (если было введено число положительное), возвращаете значенее и выходите из ф-ции.
Igor95 вне форума Ответить с цитированием
Старый 24.09.2013, 16:08   #13
Bugrimov
C/C++, Java
Участник клуба
 
Аватар для Bugrimov
 
Регистрация: 28.03.2012
Сообщений: 1,679
По умолчанию

Цитата:
Сообщение от Igor95 Посмотреть сообщение
Код:
return accumulator;
Вы после первой итерации (если было введено число положительное), возвращаете значенее и выходите из ф-ции.
Если введенное число меньше нуля, то возвращается значение переменной accumulator, а пока это не так аккумулируются введенные значения...
"Keep it simple" - придерживайтесь простоты!
Уильям Оккам - "Не следует множить сущее без необходимости"
Сложность - враг простоты и удобства!
Bugrimov вне форума Ответить с цитированием
Старый 24.09.2013, 16:45   #14
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,291
По умолчанию

Bugrimov, Igor95 комментировал код ТСа, скорее всего. Там действительно была такая проблема.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 24.09.2013, 18:37   #15
МатроскинЯ
Пользователь
 
Аватар для МатроскинЯ
 
Регистрация: 24.09.2013
Сообщений: 10
По умолчанию

всё работает, но теперь (я всё таки чайник) возникают несколько вопросов, в частности: каким образом срабатывает команда if(f1)? какое там условие используется (просто я привык, что в данном операторе как правило сравнения или хотя бы выражения)? и я всё таки использовал оператор for, так как смысл while(true) не понимаю, что он значит? "выполнять пока истинно", а что именно должно быть истинным? в общем у меня получилась следующая программа (как ни странно работающая адекватно) с учётом исправлений:
Код:
#include<stdio.h>
#include<iostream>
using namespace std;
int sumSequence()
{
    int accumulator=0;
    for(;;)
    {
           int cislo=0;
           cout << "Vvedi cislo:";
           cin >> cislo;
           if (cislo<0)
           {
           return accumulator;
           }
          else
          {
          accumulator=accumulator+cislo;
          }          
           
    } 
}

 int main(int arg, char* pszArgs[])
 {
     int accumulatedValue=0, tmp=0, f1=2;
     do
     {
         cout << "Vvedite posledovatelnost:";
         tmp=sumSequence();
         accumulatedValue+=tmp;
         cout << "accumulatedValue=:" << accumulatedValue << "\n";
         if (f1)
         {
                --f1;
         }
     } while (f1||tmp);
     cout << "zvezdec!";
     system("pause");
     return 0;
 }
хотелось бы услышать пояснения к не совсем понятным мне командам))) а именно выделенным красным цветом) заранее спасибо)
МатроскинЯ вне форума Ответить с цитированием
Старый 24.09.2013, 19:12   #16
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,291
По умолчанию

while (true) такой же бесконечный цикл, как и for ( ; ; ). Обычно пишут while (условие), но поскольку нужен бесконечный цикл, то условие всегда истинно. if (fl) нужно читать, как if (fl != 0), т.е. любое число, отличное от нуля, трактуется как истина, а ноль - ложь. while (fl || tmp) - "выполняй, пока fl не равно 0 или tmp не равно 0". Благодаря такой проверке при вводе двух отрицательных чисел в самом начале работы программы все сработает верно. if нужен, чтобы fl стало равно 0 и больше не уменьшалось.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 24.09.2013, 19:14   #17
ACE Valery
Сама себе режиссер
Старожил
 
Аватар для ACE Valery
 
Регистрация: 27.04.2007
Сообщений: 3,365
По умолчанию

if(f1) равноценно условию if(f1 != 0)
while(true) - это бесконечный цикл (мы же не знаем, сколько раз будет введено число).
Если я вас напрягаю или раздражаю, вы всегда можете забиться в угол и поплакать
ACE Valery вне форума Ответить с цитированием
Старый 24.09.2013, 21:10   #18
МатроскинЯ
Пользователь
 
Аватар для МатроскинЯ
 
Регистрация: 24.09.2013
Сообщений: 10
По умолчанию

таким образом мы получаем, что последовательность: 0, -1; 0, -1 является ошибочным... обидно, думал, что проблема решена... следовательно, для абсолютной точности работы программы нужно либо какое-то дополнительное условие, либо изменять старые... спасибо за разъяснение)
МатроскинЯ вне форума Ответить с цитированием
Старый 24.09.2013, 21:32   #19
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,291
По умолчанию

Спасибо за хороший тест (0 -1 0 -1). Действительно, нужно немного переделать логику.
Код:
#include <stdlib.h>
#include <iostream>

using namespace std;

int
sumSequence(int &flag)
{
    int accumulator = 0, cislo = 0;
    while (true) {
        cin >> cislo;
        if (cislo < 0)
            return accumulator;
        else {
            flag = 1;
            accumulator += cislo;
        }
    }
}

int
main()
{
    int accumulatedValue = 0, flag1 = 2, flag2;
    do {
        cout << "Vvedite posledovatelnost:" << endl;
        flag2 = 0;
        accumulatedValue += sumSequence(flag2);
        if (flag1)
           --flag1;
    } while (flag1 || flag2);
    cout << "accumulatedValue = " << accumulatedValue << endl;
    system("pause");
    return 0;
}
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )

Последний раз редактировалось BDA; 24.09.2013 в 21:39.
BDA вне форума Ответить с цитированием
Старый 24.09.2013, 22:18   #20
МатроскинЯ
Пользователь
 
Аватар для МатроскинЯ
 
Регистрация: 24.09.2013
Сообщений: 10
По умолчанию

чувствую замучаю с этими тестами, но, пусть данная программа решает проблему 0, -1; 0, -1, тем не менее появляется другая проблема: это бесконечный цикл, который не находит варианта, когда данное условие ложно
Код:
} while (flag1 || flag2);
даже при количестве отрицательных подряд порядка 10 он из цикла не выходит... тем не менее программа работает в том плане, что складывает адекватно (проверял переставляя строку вывода в тело цикла)... и, честно говоря, не улавливаю логику введения 3 переменных flag... так же интересно для чего в команде cout нужна команда end1, или это аналог "\n"?
МатроскинЯ вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
работа функциями "ЕСЛИ", "И" и вывод текстового результата johny_03 Microsoft Office Excel 3 04.08.2014 11:01
Не могу найти книгу "Javascript для чайников" Hardander Помощь студентам 0 27.05.2013 12:28
PHP для " Чайников" swiss_made Помощь студентам 5 17.08.2008 15:46