Александр34
23-05-2020, 19:05
Доброго времени суток всем! В работе с массивами возникла проблема - не получается выполнить эти проверки для программы:
Массив упорядочен по возрастанию
Массив упорядочен по убыванию
Массив имеет один глобальный минимум
Массив имеет один глобальный максимум
Массив имеет несколько глобальных максимумов
Имеется "плоский" максимум (т.е. в максимуме 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;
}
Массив упорядочен по возрастанию
Массив упорядочен по убыванию
Массив имеет один глобальный минимум
Массив имеет один глобальный максимум
Массив имеет несколько глобальных максимумов
Имеется "плоский" максимум (т.е. в максимуме 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;
}