Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Правильно ли составлено условие?

82K
06 июня 2012 года
DtWulf
4 / / 06.06.2012
Правильно ли составлено условие while?

Код:
while  ((p1 != x) ||(p2 != x))
    {
        n_p = n;
        printf("Wwedite chislo ");
        scanf("%d", &n);
        if (n >= 0)
            {
                if (n_p >= 0)
                    p1++;
                else
                    p1 = 1;
            }
        else
            {
                if (n_p < 0)
                    {
                        p2++;
                        s2 += n;
                    }
                else
                    {
                        p2 = 1;
                        s2 = n;
                    }
            }
    }
  • Опиши, что должно проверять условие, человеческими словами. Синтаксически оно верно. от CassandraDied, 06 июня 2012 года
252
08 июня 2012 года
koderAlex
1.4K / / 07.09.2005
а почему "while" , а не "for" ?
82K
07 июня 2012 года
DtWulf
4 / / 06.06.2012
Задача: ввести максимальное количество подряд стоящих чисел в последовательности, имеющих одинаковые знаки и последовательность чисел. Признаком окончания ввода последовательности чисел является ввод подряд заданного ранее количества чисел, имеющих одинаковые знаки. Вычислить сумму последних в последовательности отрицательных чисел, введенных подряд.

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

int main()
{
    int x, p1, p2, s2, n, n_p;
    printf("Wwedite maksimalnoe chislo ");
    scanf("%d", &x);
    p1 = p2 = s2 = 0;
    printf("Wwedite chislo ");
    scanf("%d", &n);
    while  ((p1 != x) || (p2 != x))
    {
        n_p = n;
        printf("Wwedite chislo ");
        scanf("%d", &n);
        if (n >= 0)
            {
                if (n_p >= 0)
                    p1++;
                else
                    p1 = 1;
            }
        else
            {
                if (n_p < 0)
                    {
                        p2++;
                        s2 += n;
                    }
                else
                    {
                        p2 = 1;
                        s2 = n;
                    }
            }
    }
    printf("Summa poslednih  otrizatel'nih chisel %d", s2);
    getch();
    return 0;
}
Проблема: не выходит из цикла

P.S.
n – число из последовательности
x – максимальное количество
подряд стоящих чисел
p1– количество подряд стоящих
положительных чисел
p2 – количество подряд стоящих
отрицательных чисел
s2 – сумма последних отрицательных чисел
n_p – предыдущее число последовательности
414
07 июня 2012 года
CassandraDied
763 / / 24.05.2012
Очевидно, что ни p1, ни p2 не доходят до х. Это случится, если менять знаки между только что введённым числом и предыдущим введённым числом. То есть, если понял верно, по логике в таком случае должна начинаться новая последовательность(условно)? Попробуй ввести n+1 только положительных чисел или только отрицательных и цикл должен завершиться.
82K
07 июня 2012 года
DtWulf
4 / / 06.06.2012
Всё равно, даже если ввожу во много раз больше чем нужно, не выходит из цикла
414
07 июня 2012 года
CassandraDied
763 / / 24.05.2012
 
Код:
((p1 != x) || (p2 != x))
Чтобы цикл завершился, и p2, и p1 должны быть равны x. То есть, он продолжается, пока условие истинно, а оно будет истинно всегда, не досмотрел в первый раз.
82K
07 июня 2012 года
DtWulf
4 / / 06.06.2012
Хм, а мне нужно, чтобы цикл завершился когда либо p1 станет равным x, либо p2 станет равным x. Как это тогда сделать? Просто || -это же "или", так?
414
07 июня 2012 года
CassandraDied
763 / / 24.05.2012
|| - логическое "или".
&& - логическое "и".
Дальше самостоятельно.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог