21

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

koala написав:

Спробую пояснити: масив {1,2,3} відсортований за зростанням; масив {3,2,1} відсортований за спаданням, масив {2,1,3} не відсортований узагалі; масив з одного елемента за визначенням відсортований і за зростанням, і за спаданням. Тепер зрозуміли, чого від вас хочуть?

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

22

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

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

Програма робить щось беззмістовне: в кожному повторі циклу виводиться результат (що треба робити один раз укінці) і навіщось обмінюються елементи (що мало б сенс, якби масив треба було відсортувати, але тут його треба лише перевірити на впорядкованість). Потім, навіщось вкладені цикли (для чого? Це ж одновимірний масив, і порівнювати вам треба лише пари сусідніх елементів). Коротше, виглядає як недоперероблена програма сортування, з якої ви намагаєтесь зробити те, про що сказано в умові задачі. Раджу стерти все, що йде після циклу вводу, і спробувати написати з нуля — код програми сортування вам лише заважає, я не знаю, як його виправити, щоб програма сортування стала програмою перевірки впорядкованості.

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

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

23

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

Akos_Bond написав:

але для цієї перевірки хіба не потрібно циклу так, як і є в мене:перший для поточного, а другий для наступного елемента масиву

Наступний елемент лише один. Якщо поточний елемент має номер i, то наступний матиме номер i+1. Щоб додати до числа одиницю, робити окремий вкладений цикл непотрібно. Це якби, скажімо, треба було порівнювати поточний елемент з усіма іншими елементами масиву, тоді вкладені цикли справді мали б сенс, а так — ні.

24

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

plusxx написав:

якщо умова не виконується то break, std::cout<<"No";

не зовсім так

25

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

Тобто можна прописати після циклу умову

if(m[n] == i && i < i + 1)
{
    printf("Yes>>");
    n++;
    i++;
}

і так кожного разу перевіряти кожну умову.. чи як має виглядати та перевірка?

26

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

Перекладіть це на людську мову

if(m[n] == i   &&   i < i+1) { 
    printf("Yes>>");
    n++;
    i++;
}

27 Востаннє редагувалося P.Y. (31.12.2019 01:19:12)

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

Akos_Bond написав:

Тобто можна прописати після циклу умову

if(m[n] == i && i < i + 1)
{
    printf("Yes>>");
    n++;
    i++;
}

і так кожного разу перевіряти кожну умову.. чи як має виглядати та перевірка?

По-моєму, ви плутаєте значення елемента і номер елемента. З точки зору банальної арифметики, умова i<i+1 буде істиною завжди (якщо в змінній i лежить число 5, то i+1 буде на одиницю більше — 6, і т.д.) — в такому порівнянні особливого сенсу нема. Але якщо порівнювати не значення змінної i, а використати її як номер елемента масиву, то умова m[ i ] < m [ i+1 ] буде істиною лише тоді, коли поточний елемент з номером i буде меншим за наступний — у цьому є сенс.

І що таке m[n]==i? Якщо ви хочете перевірити, чи елемент номер i — це останній елемент, то треба брати не m[n], а просто n.
m[n] — це значення елемента з номером, записаним у змінній n; аналогічно, m[ i ] — це значення елемента з номером, записаним у змінній i. Якщо вам треба порівняти номери елементів, то порівнюйте змінні n та i, а якщо треба порівняти значення елементів, то порівнюйте m[n] та m[ i ].

Далі, якщо я правильно розумію, ви використовуєте n як номер останнього елемента в масиві? Навіщо тоді цей номер збільшувати?

28

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

m[n] — це значення елемента з номером

впевнені?

29

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

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

Тобто можна прописати після циклу умову

if(m[n]==i&&i<i+1)
{ printf("Yes>>");
n++;
i++;}

і так кожного разу перевіряти кожну умову.. чи як має виглядати та перевірка?

По-моєму, ви плутаєте значення елемента і номер елемента. З точки зору банальної арифметики, умова i<i+1 буде істиною завжди (якщо в змінній i лежить число 5, то i+1 буде на одиницю більше — 6, і т.д.) — в такому порівнянні особливого сенсу нема. Але якщо порівнювати не значення змінної i, а використати її як номер елемента масиву, то умова m[ i ] < m [ i+1 ] буде істиною лише тоді, коли поточний елемент з номером i буде меншим за наступний — у цьому є сенс.

І що таке m[n]==i? Якщо ви хочете перевірити, чи елемент номер i — це останній елемент, то треба брати не m[n], а просто n.
m[n] — це значення елемента з номером, записаним у змінній n; аналогічно, m[ i ] — це значення елемента з номером, записаним у змінній i. Якщо вам треба порівняти номери елементів, то порівнюйте змінні n та i, а якщо треба порівняти значення елементів, то порівнюйте m[n] та m[ i ].

Далі, якщо я правильно розумію, ви використовуєте n як номер останнього елемента в масиві? Навіщо тоді цей номер збільшувати?

В принципі так, згідна з вами.. але для і хіба не потрібно циклу??

30

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

Akos_Bond написав:

В принципі так, згідна з вами.. але для і хіба не потрібно циклу??

Потрібен. Очевидно, це має бути однорівневий цикл (тобто, не вкладений). Там насправді багато чого ще переробляти треба... Поки що напишіть код усієї програми, як ви її уявляєте на даному етапі. І ще, використовуйте тег [code][/code]

31

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

Мені цікаво чи можна зробити O(n) в цьому випадку меншим ніж n/2. Типу через якесь зворотнє бінарне дерево чи що.

32

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

Я почала спочатку, як ви мені і порадили, але змінилося мало що..

#include <iostream>
#include <stdio.h>
#define MAX 50
int main()
{
    unsigned int i, j, 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;
    for (i = 0; i < n - 1; i++)
    {
        if (m[i] < m[i + 1])
            printf("Yes>>");
        else if (m[i + 1] < m[i])
            printf("Yes<<");
        else
            printf("No");
    }
    system("pause");
    return 0;
}

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

33

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

while ((m[n++]) && (n != MAX));
    n = (m[n-1]) ? n : --n;

що це? якщо не розумієте що пишете, коментуйте кожний рядок

34

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

ur_naz написав:

while ((m[n++]) && (n != MAX));
    n = (m[n-1]) ? n : --n;

що це? якщо не розумієте що пишете, коментуйте кожний рядок

Якщо я правильно зрозумів, цикл вводу дозволяє ввести меншу кількість значень, використавши 0 як ознаку кінця, а наступний рядок потрібен для корекції n залежно від того, як завершився ввід (заповненням усього масиву чи вводом нуля).

35

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

так, масив закінчується, коли користувач вводить 0

36

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

Akos_Bond написав:

так, масив закінчується, коли користувач вводить 0

де це написано? як користувач повинен здогадуватись що треба увести нуль, щоб закінчити цикл?
І якщо користувач такий розумний, чом не дозволити йому створити масив такої довжини, якої йому потрібно?
до речі, раніше за такий код, тобто за нераціональне використання пам'яті відрубали макітру  *JOKINGLY*

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

for (i = 0; i < n - 1; i++)
    {
        if (m[i] < m[i + 1])
            printf("Yes>>");
        else if (m[i + 1] < m[i])
            printf("Yes<<");
        else
            printf("No");
    }

37 Востаннє редагувалося plusxx (31.12.2019 16:36:22)

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

Якшо я пишу дурню прошу поправити може треба використати динамічний масив. I for замість do while

38

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

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

так, масив закінчується, коли користувач вводить 0

де це написано? як користувач повинен здогадуватись що треба увести нуль, щоб закінчити цикл?
І якщо користувач такий розумний, чом не дозволити йому створити масив такої довжини, якої йому потрібно?
до речі, раніше за такий код, тобто за нераціональне використання пам'яті відрубали макітру  *JOKINGLY*

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

for (i = 0; i < n - 1; i++)
    {
        if (m[i] < m[i + 1])
            printf("Yes>>");
        else if (m[i + 1] < m[i])
            printf("Yes<<");
        else
            printf("No");
    }

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

39 Востаннє редагувалося ur_naz (31.12.2019 17:03:11)

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

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

40

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

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