Оставить без изменений последовательность, если она упорядочена по не убыванию или по не возрастанию - C (СИ)
Формулировка задачи:
Ребят,я начинающая программистка) помогите решить задачу на С
Даны действительные числа a1, …, a30. Оставить без изменений последовательность a1, …, a30, если она упорядочена по не убыванию или по не возрастанию; в противоположном случае заменить нулями те члени, порядковые номера которых кратны четырем.
Решение задачи: «Оставить без изменений последовательность, если она упорядочена по не убыванию или по не возрастанию»
textual
Листинг программы
#include <iostream>
#include <windows.h>
using namespace std;
int sign (int v) { //знак числа -1, 0 или 1
return (v<0 ? -1 : (v==0 ? 0 : 1));
}
int main () {
const int m=5;
int a[m] = { 3, 2, 2, 2, 3 };
int i;
bool uporota = true;
int sign1=0, sign2=0;
for (i=1; i<m-1; i++) {
if (sign(a[i]-a[i-1])) sign1 = sign(a[i]-a[i-1]);
if (sign(a[i+1]-a[i])) sign2 = sign(a[i+1]-a[i]);
if (sign1!=0 && sign2!=0 && sign1!=sign2) {
uporota = false;
break;
}
}
if (uporota) cout << "It Is Sorted!";
else {
cout << "Cnanged: ";
for (i=0; i<m; i++) {
if (i>0 && i%4==0) //считаем, что 0 не кратен 4
a[i] = 0;
cout << a[i] << " ";
}
}
cout << endl;
system("pause");
return 0;
}
Объяснение кода листинга программы
Код выполняет следующие действия:
- В функции
mainсоздается массивaразмеромm=5и инициализируется значениями {3, 2, 2, 2, 3}. - Переменная
iинициализируется значением 1 и используется в циклеfor, который выполняетсяm-1раз. - В каждой итерации цикла выполняется проверка: если текущее значение
a[i]больше предыдущего (a[i-1]), то меняется знак переменнойsign1. Если текущее значениеa[i+1]больше предыдущего (a[i]), то меняется знак переменнойsign2. - Если значения
sign1иsign2не равны нулю и не равны друг другу, то это означает, что последовательность не является упорядоченной по возрастанию или убыванию, и переменнаяuporotaустанавливается в значениеfalse. Цикл прерывается. - Если последовательность остается упорядоченной, то выводится сообщение
It Is Sorted!. - Если последовательность не является упорядоченной, то выводится сообщение
Cnanged:и значения массиваaвыводятся через пробел. - Программа ожидает нажатия клавиши для продолжения.
- Возвращается значение 0, что означает успешное выполнение программы.