laba5/ConsoleApplication1/ConsoleApplication1.cpp
2024-11-01 16:09:22 +04:00

358 lines
8.5 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#include <stdio.h>
#include <Windows.h>
#define NUM_ELEMENTS 10
int arr[NUM_ELEMENTS];
int n = 0;
void printElements() {
printf("< ");
for (int i = 0; i < n; i++) {
printf("%d ", arr[i]);
}
printf(">\n");
}
void keyboardInput() {
printf("n = ");
scanf_s("%d", &n);
printf("input %d values: ", n);
for (int i = 0; i < n; i++) {
scanf_s("%d", &arr[i]);
}
}
void oddsX10() {
for (int i = 0; i < n; i++) {
if (arr[i] % 2 == 1) arr[i] = arr[i] * 10;
}
}
int findMin() {
int min = arr[0];
for (int i = 1; i < n; i++) {
if (arr[i] < min) min = arr[i];
}
return min;
}
void biggerten() {
int cnt = 0;
for (int i = 0; i < n; i++) {
if (arr[i] > 10) cnt++;
}
printf("%d элементов больше чем 10", cnt);
}
int FindLastEven() {
for (int i = n - 1; i > 0; i--) {
if (arr[i] % 2 == 0) return i;
}
}
int findIndexMin() {
int min = arr[0];
int inMin = 0;
for (int i = 1; i < n; i++) {
if (arr[i] < min) {
min = arr[i];
inMin = i;
}
}
return inMin;
}
int findIndexMax() {
int max = arr[0];
int inmx = 0;
for (int i = 1; i < n; i++) {
if (arr[i] > max) {
max = arr[i];
inmx = i;
}
}
return inmx;
}
void bred() {
for (int i = 0; i < n; i++) {
if (arr[i] % 2 == 0) {
arr[i] = -1 * arr[i];
}
}
}
void bred1() {
for (int i = 0; i < n; i++) {
if (arr[i] < 4) {
arr[i] = 4;
}
}
}
void bred2() {
for (int i = 0; i < n; i++) {
if (arr[i] % 2 == 0) {
arr[i] = 0;
}
}
}
int FindFirstEven() {
for (int i = 0; i < n; i++) {
if (arr[i] % 2 == 0) {
return i;
}
}
return -1;
}
void deletElement(int dl) {
for (int i = dl; i < n - 1; i++) {
arr[i] = arr[i + 1];
}
n--;
}
void insertElement(int ins, int val) {
for (int i = n; i > ins; i--) {
arr[i] = arr[i - 1];
}
n++;
arr[ins] = val;
}
void main() {
SetConsoleCP(1251);
SetConsoleOutputCP(1251);
int item;
do {
printf("\n");
printf("------------------------------\n");
printf("Содержимое массива:");
printElements();
printf("Выберите нужную вам операцию:\n");
printf("1: Ввести с клавиатуры массив\n");
printf("2: x10 для всех нечетных элементов\n");
printf("3: Найти минимальный элемент\n");
printf("4: Сколько элементов > 10\n");
printf("5: x2 для последнего четного элемента\n");
printf("6: Сколько четных левее минимального\n");
printf("7: x10 для нечетных правее минимального\n");
printf("8: переставить месами min и max\n");
printf("9: Все четные элементы массива умножить на -1\n");
printf("10: Все элементы массива имеющие значения меньше 4 заменить на 4\n");
printf("11: Все четные элементы обнулить\n");
printf("12: Все элементы стоящие между максимальным и минимальным увеличить в 10 раз\n");
printf("13: Все элементы между первым и последним четным увеличить в 100 раз\n");
printf("14: удалить заданный элемент\n");
printf("15: Вставить новый элемент в заданное место\n");
printf("16: Удалить минимальный элемент\n");
printf("17: Перед минимальным элементом встваить ноль\n");
printf("18: Удалить все четные элементы\n");
printf("19: Продублировать все четные элементы\n");
printf("20: Добавить в начало элемент, равный минимальному\n");
printf("21: Удалить из массива все элементы, значение которых меньше 4\n");
printf("22: удалить первый из четных элементов\n");
printf("23: удалить четные элементы, стоящие после максимального\n");
printf("24: удалить самую длинную цепочку четных элементов\n");
printf("\n");
printf("0: Выйти из программы\n");
printf("Выбранная операция >>>>>> ");
scanf_s("%d", &item);
switch (item) {
case 1:
keyboardInput();
break;
case 2:
oddsX10();
break;
case 3:
{
int min = findMin();
printf("min = %d\n", min);
}
case 4:
biggerten();
break;
case 5:
{
int index = FindLastEven();
if (index >= 0) arr[index] *= 2;
}
case 6:
{
int indEx = findIndexMin();
printf("Индекс минимального элемента = %d\n", indEx);
int cnt = 0;
for (int i = 0; i < indEx; i++) {
if (arr[i] % 2 == 0) cnt++;
}
printf("Левее минимального %d четных элементов\n", cnt);
}
break;
case 7:
{
int index = findIndexMin();
printf("Индекс минимального элемента = %d\n", index);
for (int i = n; i > index; i--) {
if (arr[i] % 2 != 0) arr[i] *= 10;
}
}
break;
case 8:
{
int indexmin = findIndexMin();
printf("Индекс минимального элемента = %d\n", indexmin);
int indexmax = findIndexMax();
printf("Индекс максимального элемента = %d\n", indexmax);
int tmp = arr[indexmin];
arr[indexmin] = arr[indexmax];
arr[indexmax] = tmp;
}
break;
case 9:
bred();
break;
case 10:
bred1();
break;
case 11:
bred2();
break;
case 12:
{
int indexmin = findIndexMin();
printf("Индекс минимального элемента = %d\n", indexmin);
int indexmax = findIndexMax();
printf("Индекс максимального элемента = %d\n", indexmax);
for (int i = indexmax + 1; i < indexmin; i++) {
arr[i] *= 10;
}
}
break;
case 13:
{
int indexf = FindFirstEven();
printf("Индекс минимального элемента = %d\n", indexf);
int indexl = FindLastEven();
printf("Индекс максимального элемента = %d\n", indexl);
for (int i = indexf + 1; i < indexl; i++) {
arr[i] *= 100;
}
}
break;
case 14:
{
int index;
printf("Индекс удаляемого элемента = ");
scanf_s("%d", &index);
deletElement(index);
}
break;
case 15:
{
int index;
int value;
printf("Перед каким элементом нужно вставить новый? Индекс = ");
scanf_s("%d", &index);
printf("Значение которое нужно вставить = ");
scanf_s("%d", &value);
insertElement(index, value);
}
break;
case 16:
{
int min = findIndexMin();
printf("min=%d\n", arr[min]);
deletElement(min);
}
break;
case 17:
{
int inmn = findIndexMin();
printf("Индекс минимального элемента = %d\n", inmn);
insertElement(inmn, 0);
}
break;
case 18:
{
for (int i = 0; i < n; i++) {
if (arr[i] % 2 == 0) {
deletElement(i);
i--;
}
}
}
break;
case 19:
{
for (int i = 0; i < n; i++) {
if (arr[i] % 2 == 0) {
insertElement(i, arr[i]);
i++;
}
}
}
break;
case 20:
{
int inmn = findIndexMin();
printf("Индекс минимального элемента = %d\n", inmn);
insertElement(0, arr[inmn]);
}
break;
case 21:
{
for (int i = 0; i < n; i++) {
if (arr[i] < 4) {
deletElement(i);
i--;
}
}
}
break;
case 22:
{
int indexf = FindFirstEven();
printf("Индекс минимального элемента = %d\n", indexf);
deletElement(indexf);
}
break;
case 23:
{
int indexmax = findIndexMax();
printf("Индекс максимального элемента = %d\n", indexmax);
for (int i = indexmax + 1; i < n; i++) {
if (arr[i] % 2 == 0) {
deletElement(i);
i--;
}
}
}
break;
case 24:
{
int teklen = 0, teknach = -1;
int maxlen = 0, maxnach = -1;
for (int i = 0; i < n; i++) {
if (arr[i] % 2 == 0) {
if (teklen == 0) {
teknach = i;
}
teklen++;
}
else {
if (teklen > maxlen) {
maxlen = teklen;
maxnach = teknach;
}
teklen = 0;
}
}
if (teklen > maxlen) {
maxlen = teklen;
maxnach = teknach;
}
if (maxnach != -1) {
for (int i = 0; i < maxlen; i++) {
deletElement(maxnach);
}
}
}
break;
}
} while (item != 0);
}