61

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

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

навіщо, все одно він не правильний. навіть ТС це зрозуміла

#include <iostream>
#include <stdio.h>
#define MAX 50
int main()
{
    int *m = new int[MAX];
    int n;
    std::cout<<"Заповніть масив. Ввід закінчиться якщо введене число буде == 0  \n";
    for(int i=0;i<MAX;i++)
        {
            std::cin>>n;
            if(n==0)
                {
                    break;
                }
            m[i]=n;
        }
    if (m[0]<m[1])
        {
            for(int i=0;i>MAX;i++)
                {
                    if(m[i-1]>m[i])
                    {
                        std::cout<<"No";
                        return 0;
                    }
                }
            std::cout << "Yes>>";
        }
    else if (m[0]>m[1])
        {
            for(int i=0;i<MAX;i++)
                {
                    if(m[i]<m[i+1])
                    {
                        std::cout<<"No";
                        return 0;
                    }
                }
            std::cout<<"Yes>>";
        }
    return 0;
}

Запустіть у себе.

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

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

Тут немає але якщоб користувач задавав розмір масиву то це б грало роль.

62

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

я думала, що потрібно перевіряти це шляхом сортування, але як виявилось моя думка неправильна

63 Востаннє редагувалося plusxx (31.12.2019 19:42:15)

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

ur_naz написав:

поспішиш - людей насмішиш... *JOKINGLY*
Та невже так складно вмикнути мізки? Ок, новий рік, нема часу, щоб подумати... так йдіть до столу...

То може підкажете можна в пп я  не програміст, вчусь і займаюсь цим по фану тож мені можна. Буду вдячний.

64

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

Akos_Bond написав:

я думала, що потрібно перевіряти це шляхом сортування, але як виявилось моя думка неправильна

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

65

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

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

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

66

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

ur_naz написав:

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

Дійшло. Ліпше пізно як ніколи.

67

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

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

я думала, що потрібно перевіряти це шляхом сортування, але як виявилось моя думка неправильна

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

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

68

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

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

я думала, що потрібно перевіряти це шляхом сортування, але як виявилось моя думка неправильна

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

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

В загальних рисах я там трохи раніше написав, що треба робити — спробуйте зробити з цього програму.

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

Уявіть, що комп'ютера нема, і вам доводиться самостійно руками перевіряти, чи впорядкований список чисел і в якому напрямку він упорядкований. Опишіть послідовність дій, як ви це робите. Це і буде алгоритм, який можна потім буде переписати якоюсь мовою програмування.

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

69

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;
    for (i = 0; i < n - 1; i++)
    {
        if (m[i] < m[i + 1])
            t = 1;
        else if (m[i + 1] < m[i])
            t=2;
        else
            t=0;
    }
    system("pause");
    return 0;
}

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

70 Востаннє редагувалося P.Y. (31.12.2019 22:24:27)

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

Щоб вивести результат, після циклу треба буде зробити не ще один цикл (бо вивід робитиметься один раз), а просто if, який виводитиме результат залежно від значення t.

Потім, у самому циклі ще треба буде врахувати значення t, яке було перед цим:

При цьому, в кожному повторі циклу вам треба враховувати, яке значення лежить у цій змінній з результатом (наприклад, якщо поточна пара елементів іде в зростаючому порядку, але перед цим у змінну було записано, що порядок був спадаючим, то результат буде «невпорядкований»).

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

Отже, змінна t може мати значення «зростання», «спадання», «невпорядкований» і «невідомо» — позначте їх цифрами і випишіть у коментарях, щоб потім не плутатись. Якщо перед повтором циклу було значення «невідомо»,  робити порівняння як раніше, записуючи відповідне значення за результатом перевірки. Якщо було значення «зростання», то, якщо два сусідні елементи йдуть у спадному порядку, записати «невпорядковано». І так само, якщо було «спадання», а два сусідні елементи йдуть у зростаючому порядку, це теж означає невпорядкованість. В решті випадків, значення t лишатиметься тим же, що було перед цим.

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

71

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 (m[i] < m[i + 1])
            t = 1; // результат зростає
        else if (m[i + 1] < m[i])
            t=2; //результат спадає
        else
            t=3; //результат невпорядкований
    }
    if (t = 1)
        printf("Yes>>");
    else if (t = 2)
        printf("Yes <<");
    else
        printf("No");
    system("pause");
    return 0;
}

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

і скажіть, будь ласка, чи все інше правильно зрозуміла і записала

72

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

У вас у виводі if з присвоєнням замість порівняння — виправте це.

В циклі можна зробити вкладені if'и: зовнішній if вибирає значення t, внутрішні if'и порівнють елемент з сусіднім.
Або можна зробити if зі складними умовами: if(t==1 && m[ i ]<m[i+1]) ... else if(t==0 &&m[ i ]>m[i+1] і т.д.

73

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

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

чи я вже щось неправильно розумію?

74

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

бітова арифметика...
це моя остання підказка. з новим роком!

75

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

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

76

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

Akos_Bond написав:

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

чи я вже щось неправильно розумію?

У циклі — if з кількома гілками зі складними умовами (де ми присвоюємо значення t з урахуванням того, яке значення лежить у ньому з попереднього повтору циклу). Протягом роботи цього циклу значення t може змінюватись (напр., якщо в нас є масив 1 2 3 4 5 6 8 7, то в t буде записано «зростання», доки не дійдемо до пари 8 7, після чого треба буде записати «невпорядковано», бо в змінну t було перед цим записано «зростання», а порядок цієї пари спадний).

Після циклу — if, де виводиться результат (це ви вже зробили, тільки там треба помилку виправити).

77

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

Akos_Bond написав:

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

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

78

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 (m[i] < m[i + 1])
        {
            t = 1;// результат зростає
            if (t == 1 && m[i] < m[i + 1])
                ?????
            /*else if (m[i + 1] < m[i])
                t = 2; //результат спадає
            else
                t = 3; //результат невпорядкований*/
        }
    }
    if (t == 1)
        printf("Yes>>");
    else if (t == 2)
        printf("Yes <<");
    else
        printf("No");
    system("pause");
    return 0;
}

можливо, це так має бути if в if'і.. але тоді питання, я чомусь не дуже розумію, що треба прописати в середньому іф? як записати там t?

79

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

Akos_Bond написав:

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

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

80

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

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