|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » C/C++ - [решено] затруднение при тестировании программы с массивами |
|
C/C++ - [решено] затруднение при тестировании программы с массивами
|
Новый участник Сообщения: 5 |
Профиль | Отправить PM | Цитировать
Доброго времени суток всем! В работе с массивами возникла проблема - не получается выполнить эти проверки для программы:
Массив упорядочен по возрастанию Массив упорядочен по убыванию Массив имеет один глобальный минимум Массив имеет один глобальный максимум Массив имеет несколько глобальных максимумов Имеется "плоский" максимум (т.е. в максимуме 2 одинаковых элемента) Имеются локальные и глобальные максимумы Одно и тоже число входит и в "плоский" и в глобальный максимум Все остальные успешно прошли, поэтому в список не включены. В чём проблема, подскажите пожалуйста. Какой-то алгоритм действий, идея, способ реализации этих проверок. Заранее благодарю. #define _CRT_SECURE_NO_WARNINGS #pragma warning(disable : 4996) #include <iostream> #include <conio.h> #include "testing.h" int main() { int X;// переменная для выделения памяти int v = 0;// переменная для определения рез-тата input_printf("Введите кол-во элементов"); scanf_s("%d", &X); int* A;// выделение памяти A = (int*)malloc(X * sizeof(int)); // ввод элементов массива for (int N = 0; N < X; N++) { printf("A[N]=", N); scanf_s("%d", &A[N]); } int f;// переменная-предел массива f = -1001; // выделение максимумов по условию задания: // В массиве A(N) найти и напечатать номера глобальных максимумов. // Локальным максимумом считается такой элемент массива A[i], // что для него выполняется условие A[i-1] < A[i] > A[i+1]. // Глобальным считается наибольший из локальных максимумов. for (int i = 1; i < X; i++) { if (A[i] > A[i + 1] && A[i] > A[i - 1]) f = A[i]; if (f < A[i]) f = A[i]; // случай, при котором максимумы отсутствуют if (A[i] == A[i + 1] && A[i] == A[i - 1]) { error_printf("no solution"); return 1; } } // цикл проверки массива на упорядоченность по возрастанию for (int i = 1; i < X; i++) { int flag1 = 1;// флаг, который должен определять, какой цикл будет запущен, а какой - нет // если одна проверка на упорядоченность прошла успешно, этот флаг не даст запустить другую // создан только из-за отсутствия видения более аккуратного решения int v = 0;// переменная, которая должна определять, какой результат будет напечатан // проверка на упорядоченность по возрастанию // если каждый следующий элемент больше предыдущего, тогда будет указано, что массив упорядочен по возрастанию if (A[i + 1] > A[i]) { v = 1;// если оператор выдает истину, будет выдан положительный рез-тат // оператор не продуман - вероятно, необходим цикл, как реализовать - не знаю } // если переменная v приняла значение 1, то будет напечатано, что массив упорядочен по возрастанию if (v == 1) { printf("массив упорядочен по возрастанию\n\n"); flag1 = 0;// если массив упорядочен по возрастанию, то флаг изменится, чтобы не выполнялась другая проверка } // проверка массива на упорядоченность по убыванию if (flag1 == 1) { if (A[i] > A[i + 1]) { v = 2;// если оператор выдает истину, будет выдан положительный рез-тат } } // если переменная v приняла значение 2, то будет напечатано, что массив упорядочен по убыванию if (v == 2) { printf("Массив упорядочен по убыванию\n\n"); flag1 = -1; } } for (int i = 1; i < X; i++)// выявление максимума if (f == A[i])// если элемент является максимумом printf("%d", i);// вывод индекса этого элемента if (f == -1001)// если произошла ошибка при выделении памяти printf("no solution"); return 0; } |
|
Отправлено: 19:05, 23-05-2020 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Цитата Александр34:
|
|
Отправлено: 20:18, 23-05-2020 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Новый участник Сообщения: 5
|
Профиль | Отправить PM | Цитировать Цитата Iska:
|
|
Отправлено: 09:39, 24-05-2020 | #3 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Александр34, расставьте, пожалуйста, поясняющие комментарии в существующем коде.
|
Отправлено: 05:44, 25-05-2020 | #4 |
Необычный Сообщения: 4463
|
Профиль | Сайт | Отправить PM | Цитировать Цитата Александр34:
Т.е. массив может быть каким угодно, но если два последних соответствуют условию, то все нормально. Цитата Александр34:
По какому признаку должно произойти изменение флага, как условия выхода из цикла? Второй закомментированный блок непонятен. Почему-то взялась констана в 10, хотя ее раньше не было. И смысл проверки так же не ясен. Как указывал Iska, нужны ваши комментарии к коду. Ссылки, выделение массива в памяти ... кто вам все это рассказывал? т.е. как бы ... нафига? Не, можно конечно, но зачем? |
|||
------- Отправлено: 08:50, 25-05-2020 | #5 |
Новый участник Сообщения: 5
|
Профиль | Отправить PM | Цитировать Цитата lxa85:
Цитата lxa85:
Цитата lxa85:
Цитата Iska:
|
||||
Отправлено: 18:09, 25-05-2020 | #6 |
Необычный Сообщения: 4463
|
Профиль | Сайт | Отправить PM | Цитировать Цитата Александр34:
Цитата Александр34:
Цитата Александр34:
Вторгаясь в область памяти и твердо не зная, что при этом будет, может создать плохую привычку "копаться в памяти неумелыми руками", что может приводить к непредсказуемым последствиям. Не проще. Вот "ногу отстрелить", это запросто. Поэтому возьмите (http://cppstudio.com/post/389/ и https://code-live.ru/post/cpp-arrays/) и будет вам счастье. Работу с памятью возьмут на себя конструкции языка. Второе важное замечание. Пишите полные конструкции условий if и пр. Даже если действие одно и формально фигурных скобок (они же операторные скобки) можно не писать. Так вот нельзя. Писать строго всегда. ---- Отложите сейчас С++ и решите эту задачу на листе бумаги. Я серьезно. С++ -- дело десятое. Пока вы не поймете математику задачи, вы будете ходить кругами. Выпишите для себя 10 случайных массивов, сидите и выполняйте операции сравнения руками. Если что-то надо -- вводите дополнительные переменные, "флаги" и пр. Пусть будет много, не страшно, за то каждая будет отвечать ровно за свою сущность. Как поймете алгоритм, напишите его на псевдоязыке. Проверьте себя еще раз. И только потом (5ая очередь) приступайте к С++, отдавая предпочтение понятным для вас конструкциям. а книгу ту сожгите |
|||
------- Отправлено: 21:46, 25-05-2020 | #7 |
Новый участник Сообщения: 5
|
Профиль | Отправить PM | Цитировать Цитата lxa85:
|
|
Отправлено: 12:06, 26-05-2020 | #8 |
Участник сейчас на форуме | Участник вне форума | Автор темы | Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
Отключение компа при тестировании памяти | 47rus | Материнские платы и память | 11 | 31-10-2013 16:26 | |
Компьютер выключается при тестировании в Furmark. | DreDo | Видеокарты | 6 | 30-06-2013 21:43 | |
HDD - Красные кластеры при тестировании жесткого диска | Diman19 | Накопители (SSD, HDD, USB Flash) | 11 | 15-11-2012 18:06 | |
[решено] Непонятная ситуация при тестировании переразогнанного CPU. | Oleg_SK | Разгон, охлаждение и моддинг | 8 | 03-02-2009 14:58 | |
Ошибка при тестировании оперативной памяти | Michael | Непонятные проблемы с Железом | 16 | 11-10-2006 08:23 |
|