81

Re: Перевірка впорядкованості елементів одновимірного масиву

можливо, це так має бути if в if'і..

Або if в if'і, або if з більшою кількістю гілок зі складними умовами — одне з двох. Я мав на увазі щось таке:

if(t==0)
{
    if(m[i]>m[i+1])
      ...
    else if(m[i]<m[i+1])
      ...
    else
      ...
}
else if(t==1)
{
    if(m[i]>m[i+1])
      ...
    else if(m[i]<m[i+1])
      ...
    else
      ...
}
else if(t==2)
 // i т.д.

Або щось таке:

if(t==0 && m[i]>m[i+1])
  ...
else if(t==1 && m[i]>m[i+1])
  ...
else if(t==2 && m[i]>m[i+1])
  ...
else if(t==3 && m[i]>m[i+1])
  ...
else if(t==0 && m[i]<m[i+1])
  ...
else if(t==1 && m[i]<m[i+1])
  ...
else if(t==2 && m[i]<m[i+1])
  ...
else if(t==3 && m[i]<m[i+1])
  ...

(Насправді не всі з цих гілок потрібні — в деяких з них нічого не змінюється, тому їх можна викинути).

Там, де трикрапки, у змінну t записуватимуться значення.

82 Востаннє редагувалося P.Y. (01.01.2020 03:44:51)

Re: Перевірка впорядкованості елементів одновимірного масиву

P.Y. написав:
Akos_Bond написав:

так, я розумію і я використала бітові операції для складного if і що з цього? що далі?

Де? Не бачу ні бітових зсувів, ні бітових &, |, ^, ~ — лише логічні &&... Мабуть, ur_naz хоче сказати, що замість складного if, який я пропоную, значення t можна змінювати з використанням побітових операцій (напр., якщо в t лежить значення 1, то після побітового t|=2 в змінній t лежатиме значення 3). Це скоротить розмір програми (можна буде обійтися всього двома-трьома гілками if у циклі), але якщо вам важливо розуміти власний код, то робіть це лише в тому випадку, якщо розумієте, що робите.

В принципі, ту ж логіку, яку можна реалізувати побітовими операціями, можна зробити й без них — ввівши замість однієї змінної t дві окремі (назвімо їх zrost та spad). Як видно з назв, в одну з них 1 записується, коли в циклі натрапляємо на зростаючу пару сусідніх елементів, в іншу — коли натрапляємо на спадаючу. Після завершення циклу робимо перевірку цих змінних і виводимо результат: якщо zrost дорівнює 1, а spad дорівнює 0, повідомляємо, що порядок зростаючий; якщо spad — 1, а zrost — 0, то порядок спадаючий; якщо обидві ці змінні дорівнюють одиниці (тобто, було виявлено і зростаючі, і спадаючі пари), то масив невпорядкований.

Таким чином, можна обійтися без величезної батареї if’ів зі складними умовами, яку я пропонував вище — в такому варіанті в циклі буде if з усього двома гілками.

83

Re: Перевірка впорядкованості елементів одновимірного масиву

хмм, починаю розуміти свої промахи..  дякую за те, що так детально пояснюєте)) взяла до уваги ваші поради і ось що з цього вийшло:

#include <iostream>
#include <stdio.h>
#define MAX 50
int main()
{
    unsigned int i, n = 0;
    int m[MAX], t;
    do
    {
        printf("m[%i]=", n);
        scanf_s("%i", &m[n]);
    }
    while ((m[n++]) && (n != MAX));
    n = (m[n-1]) ? n : --n;
    t = 0; //результат невідомий
    for (i = 0; i < n - 1; i++)
    {
        if (t == 0)
        {
            if (m[i] > m[i + 1])
                t = 1; //результат зростає
            else if (m[i] < m[i + 1])
                t = 1;
            else
                t = 1;
        }
        else if (t == 1)
        {
            if (m[i] > m[i + 1])
                t = 2; //результат спадає
            else if (m[i] < m[i + 1])
                t = 2;
            else
                t = 2;
        }
        else if (t == 2)
        {
            if (m[i] > m[i + 1])
                t = 3; //результат невпорядкований
            else if (m[i] < m[i + 1])
                t = 3;
            else
                t = 3;
        }
        else
        {
            if (m[i] > m[i + 1])
                t = 0;
            else if (m[i] < m[i + 1])
                t = 0;
            else
                t = 0;
        }

    }
    if (t == 1)
        printf("Yes>>");
    else if (t == 2)
        printf("Yes <<");
    else
        printf("No");
    system("pause");
    return 0;
}

але я думаю, що все ж таки в циклі останннє else я записала невірно, бо вивід і далі неправильний

84

Re: Перевірка впорядкованості елементів одновимірного масиву

деякі речі як цнота

85

Re: Перевірка впорядкованості елементів одновимірного масиву

перепрошую, пане ur_naz, я тільки початківець і багато що не розумію, але намагаюся вчитися і розуміти суть.. можете пояснити, що ви мали на увазі цим висловом?

86

Re: Перевірка впорядкованості елементів одновимірного масиву

уяви собі послідовність таку собі незайману. чи можна припустити що вона відсортована за зростанням? так, це можливо.
чи можна припустити, що вона відсортована за спаданням? так, це лише припущення. можна навіть припустити що вона водночас відсортована за зростанням і за спаданням? так, наприклад, якщо всі елементи рівні одне одному.
І тут виявиться, що завдання в тебе неправильно складене...
Але повернемося до наших баранів.
Якщо виявиться, що послідовність втратила цноту, то чи можна назвати її незайманою? Чи треба це перевіряти далі? напевно ні. тож якщо послідовність і спадає і зростає, то вона вже доросла. Отака логіка від зворотного.

87

Re: Перевірка впорядкованості елементів одновимірного масиву

хмм,  хороший приклад.. багато чого відразу зрозуміла і виправила помилки, на мою думку.. але схоже, що дещо ще треба підкоректувати, адже чомусь нема аналізу всієї послідовності.. наприклад, якщо я вводжу 18, 21, 17, то вибиває повідомлення про те, що спадає, хоча насправді в такому випадку послідовність неупорядкована..

ось код:

    for (i = 0; i < n - 1; i++)
    {
        if (t == 0)
        {
            if (m[i] > m[i + 1])
                t = 1; //результат зростає
            else if (m[i] < m[i + 1])
                t = 2; //результат спадає
            else
                t = 3; //результат невпорядкований
        }
        else if (t == 1)
        {
            if (m[i] > m[i + 1])
                t = 1; 
            else if (m[i] < m[i + 1])
                t = 2;
            else
                t = 3;
        }
        else if (t == 2)
        {
            if (m[i] > m[i + 1])
                t = 1; 
            else if (m[i] < m[i + 1])
                t = 2;
            else
                t = 3;
        }
        else
        {
            if (m[i] > m[i + 1])
                t = 1;
            else if (m[i] < m[i + 1])
                t = 2;
            else
                t = 3;
        }

    }
    if (t == 1)
        printf("Yes>>");
    else if (t == 2)
        printf("Yes<<");
    else
        printf("No");

88

Re: Перевірка впорядкованості елементів одновимірного масиву

скільки варіантів упорядкування може бути взагалі?

89

Re: Перевірка впорядкованості елементів одновимірного масиву

спочатку нам невідомо, яка послідовність, тому t =0, а після аналізу вона або зростає, або спадає, або неупорядкована..

90 Востаннє редагувалося ur_naz (01.01.2020 22:43:16)

Re: Перевірка впорядкованості елементів одновимірного масиву

невірно. це навіть не відповідь на моє запитання

91

Re: Перевірка впорядкованості елементів одновимірного масиву

хмм, ну можемо упорядкувати 2 способами: або за зростанням, або за спаданням

92

Re: Перевірка впорядкованості елементів одновимірного масиву

що ще?

93

Re: Перевірка впорядкованості елементів одновимірного масиву

є ще версія, коли масив може одночасно і зростати, і спадати, тобто, коли елементи рівні

94

Re: Перевірка впорядкованості елементів одновимірного масиву

тобто загалом скільки?

95

Re: Перевірка впорядкованості елементів одновимірного масиву

виходить, що 3

96

Re: Перевірка впорядкованості елементів одновимірного масиву

не вірно

97

Re: Перевірка впорядкованості елементів одновимірного масиву

Akos_Bond написав:

є ще версія, коли масив може одночасно і зростати, і спадати, тобто, коли елементи рівні

Це зверться "за неспаданням" і "за незростанням". Якщо рівні - це не зростання і не спадання.

Подякували: Akos_Bond1

98

Re: Перевірка впорядкованості елементів одновимірного масиву

ur_naz написав:

тобто загалом скільки?

перепрошую, що тривалий час мене не було.. виходить, що 5 тоді: зростання, спадання, незростання, неспадання і рівні.. чи я щось плутаю?

99

Re: Перевірка впорядкованості елементів одновимірного масиву

Akos_Bond написав:
ur_naz написав:

тобто загалом скільки?

перепрошую, що тривалий час мене не було.. виходить, що 5 тоді: зростання, спадання, незростання, неспадання і рівні.. чи я щось плутаю?

Пані, це ваша задача. Звідки нам знати, які саме випадки вам треба виявляти? Ще бувають періодичні послідовності, наприклад. А також знакопостійні та знакозмінні. І ще Бог зна які.
В умові що написано - те вам і треба зробити. Не видумувати, не брати зайвого.

100

Re: Перевірка впорядкованості елементів одновимірного масиву

зростання, спадання, незростання, неспадання і рівні.. чи я щось плутаю?

бери олівець, аркуш паперу і малюй кожен випадок