Re: Перевірка впорядкованості елементів одновимірного масиву
і що не так? яка різниця між тим. що треба, і тим що є?
Ви не увійшли. Будь ласка, увійдіть або зареєструйтесь.
Ласкаво просимо вас на україномовний форум з програмування, веб-дизайну, SEO та всього пов'язаного з інтернетом та комп'ютерами.
Будемо вдячні, якщо ви поділитись посиланням на Replace.org.ua на інших ресурсах.
Для того щоб створювати теми та надсилати повідомлення вам потрібно Зареєструватись.
Український форум програмістів → C++ → Перевірка впорядкованості елементів одновимірного масиву
Сторінки Попередня 1 2 3 4 5 6 Наступна
Для відправлення відповіді ви повинні увійти або зареєструватися
і що не так? яка різниця між тим. що треба, і тим що є?
Якшо я пишу дурню прошу поправити може треба використати динамічний масив. I for замість do while
Можна, але не впевнений, чи для даної задачі це важливо. Давайте спершу зробимо те, що вимагається в умові, а тоді доповнюватимемо додатковим функціоналом.
тут функціонал - здати і забути
я думаю, що потрібно перевірити весь масив, а потім в кінці вивести необхідне повідомлення.. але в моєму випадку проблема в тому, що перевіряється поточний і наступний елементи, а тому виводиться декілька повідомлень в залежності від розмірності масиву.. тому я й вважаю, що проблема може бути в тому, що я не там вивід прописала.. бо чому воно не може в залежності від необхідної гілки умов вивести повідомлення не до кожного по окремо елемента, а загалом до цілого масиву??..
Частина коду як я то розумію далі по зразку там є ще маленька заковичка.
#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>>";
}
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>>";
}
нічого не забув?
Я почала спочатку, як ви мені і порадили, але змінилося мало що..
#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; }
По суті, я так і уявляю програму.. тобто, перевіряю умови і якщо умова задовільна, то те повідомлення і виводиться.. але тут проблема в тому, що воно рахує не весь масив, а тільки поточний елемент і наступний і весь цикл не проходить... тобто в кінці і відповідний результат: повідомлень декілька..
Що програма робить щось не те, ви бачите й самі: вона виводить результат щоразу для кожної пари сусідніх елементів, тоді як треба виводити його один раз після циклу. В самому циклі нічого виводити не треба (ну або вивести один раз, після чого вийти — дивлячись яким чином ви вирішите реалізувати цю задачу, її можна робити по-різному).
Отже, що треба робити в циклі: порівняти два сусідні елементи і запам'ятати результат. «Запам'ятати» означає, що вам потрібна додаткова змінна, куди цей результат записуватиметься (напр., це може бути змінна типу int, куди ви записуєте 0, 1 і т.д. залежно від варіанту кінцевої відповіді — 0 означає «не знаю», 1 означає «зростаючий», 2 означає «спадаючий» і т.д.). При цьому, в кожному повторі циклу вам треба враховувати, яке значення лежить у цій змінній з результатом (наприклад, якщо поточна пара елементів іде в зростаючому порядку, але перед цим у змінну було записано, що порядок був спадаючим, то результат буде «невпорядкований»).
А вже після того, як цикл завершиться, робите вибір за значенням змінної-результату і виводите відповідь.
(Це один з можливих підходів, хоча я бачу й інші варіанти розв'язку).
та я дуже дякую за код і допомогу, але оскільки в коледжі ми ще не проходили динамічний масив з вказівниками і взагалі розадресацію ще не вивчали, тому боюсь, що в мене викладачка не прийме роботу.. я почала самостійно вивчати цю тему і розумію зміст.. а хіба не можна початок і ввід прописати моїм методом?
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>>"; }
нічого не забув?
Тикніть носом я вкурсі шо ви втім краще тямете. Тут неописаний варіант де є кілька одинакових чисел підряд (мені ліньки)
просто уважно прочитай завдання і знайди чого в тебе нема
просто уважно прочитай завдання і знайди чого в тебе нема
Там нема виводу "Yes<<"
Я ж неможу викласти готовий код тут так не прийнято. Інакше я просто не доганяю.
навіщо, все одно він не правильний. навіть ТС це зрозуміла
навіщо, все одно він не правильний. навіть ТС це зрозуміла
#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;
}
Запустіть у себе.
та я дуже дякую за код і допомогу, але оскільки в коледжі ми ще не проходили динамічний масив з вказівниками і взагалі розадресацію ще не вивчали, тому боюсь, що в мене викладачка не прийме роботу.. я почала самостійно вивчати цю тему і розумію зміст.. а хіба не можна початок і ввід прописати моїм методом?
Не бачу проблеми в вашому підході. В багатьох випадках роблять ще простіше, не заморочуючись з кількістю елементів взагалі і роблячи її фіксованою. Ви ж передбачили можливість не заповнювати щоразу весь масив, а ввести меншу кількість елементів.
Єдина перевага динамічного масиву — можливість зробити його як-завгодно великим. Що могло б мати сенс у якомусь реальному проекті, але в рамках цього навчального завдання, гадаю, буде зайвим.
поспішиш - людей насмішиш...
Та невже так складно вмикнути мізки? Ок, новий рік, нема часу, щоб подумати... так йдіть до столу...
та я дуже дякую за код і допомогу, але оскільки в коледжі ми ще не проходили динамічний масив з вказівниками і взагалі розадресацію ще не вивчали, тому боюсь, що в мене викладачка не прийме роботу.. я почала самостійно вивчати цю тему і розумію зміст.. а хіба не можна початок і ввід прописати моїм методом?
То використайте нединамічний нема нїякої різниці в результаті.
поспішиш - людей насмішиш...
Та невже так складно вмикнути мізки? Ок, новий рік, нема часу, щоб подумати... так йдіть до столу...
MAX-1
навіть дивлячись на ваш код, рішення поставленої задачі все одно невірне.. тут така ж проблема, як і в мене, хоча виводиться вже тільки одне повідомлення.. насправді чомусь не аналізується повністю весь масив..
чи може це я неправильно розумію завдання???
на мою думку масив зростає в такому випадку: 2,4 6,7,8,9;
спадає - 8,7,5,3,2,1;
неупорядкований - 2,4,6,5,7,3,2,1
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; }
Запустіть у себе.
Ну і в чому перевага динамічного виділення пам'яті, якщо це виділення робиться разово й розмір задається константою?
В такому вигляді це нічим не краще за фіксований масив у локальній змінній, хіба що трохи більше зайвого коду.
Якась користь з динамічного масиву була б у тому випадку, якби щоразу по досягненні кінця динамічного масиву виділявся більший блок, усі дані зі старого масиву переписувались у новий, а старий видалявся — тоді це справді мало б якусь практичну перевагу...
на мою думку масив зростає в такому випадку: 2,4 6,7,8,9;
спадає - 8,7,5,3,2,1;
неупорядкований - 2,4,6,5,7,3,2,1
тобто відомо яким може бути масив? як це зафіксувати?