Удалить первый элемент массива с заданным значением - C (СИ)
Формулировка задачи:
Нужна помощь. Если можно с комментариями, буду очень благодарен.
Задание:
1) Сформировать одномерный массив целых чисел, используя датчик случайных чисел.
2) Распечатать полученный массив.
3) Удалить первый элемент с заданным значением.
4) Сдвинуть массив циклически на К элементов вправо.
5) Распечатать полученный массив.
Решение задачи: «Удалить первый элемент массива с заданным значением»
textual
Листинг программы
#include <stdio.h>
#include <time.h>
#include <Windows.h>
// Defined values for changing array size, low and high border of the array
#define ARRAY_SIZE 8
#define NEW_ARRAY_SIZE (ARRAY_SIZE-1)
#define LOW_BORDER -30
#define HIGH_BORDER 30
int main(void)
{
srand(time(NULL));
// Variables initialization
int i, j;
int arr[ARRAY_SIZE];
int new_arr[NEW_ARRAY_SIZE];
int del_el = 0, pos = 0, found = 0, shift = 0;
for (i = 0; i < ARRAY_SIZE; i++)
{
// TASK1. Generating and printing in the console window generated array with rand() function
arr[i] = rand() % (HIGH_BORDER - LOW_BORDER + 1) + LOW_BORDER;
// TASK2. Outputting the generated array to the console
printf("%d ",arr[i]);
}
// Processing user's input of the element to be deleted
printf("\nEnter the element to be deleted: ");
scanf("%d", &del_el);
// Search for the entered del_el element in array arr[ARRAY_SIZE]
for (i = 0; i < ARRAY_SIZE; i++)
{
if (arr[i] == del_el)
{
found = 1;
pos = i;
break;
}
}
if (found == 1) // If element was found(entered correctly)
{
for (i = 0, j = 0; i < ARRAY_SIZE, j < NEW_ARRAY_SIZE; i++,j++)
{
if (i == pos)
{
j--;
continue;
}
new_arr[j] = arr[i];
}
}
else // Jump here if user has entered the element which is not in the array
printf("Element %d is not found in the vector\n", del_el);
// TASK4. Shifting the array on the entered number of positions
printf("Enter the value of the right shift: ");
scanf("%d", &shift);
shift %= NEW_ARRAY_SIZE;
while (shift)
{
int tmp = new_arr[NEW_ARRAY_SIZE - 1];
for (int i = NEW_ARRAY_SIZE - 1; i>0; i--)
new_arr[i] = new_arr[i - 1];
new_arr[0] = tmp;
shift--;
}
// TASK5. Outputting the resultant array after all the operations
printf("The resultant array after the removing of the element with the entered value is \n");
for (i = 0; i < NEW_ARRAY_SIZE; i++)
{
printf("%d ", new_arr[i]);
}
printf("\n");
system("pause");
return 0;
}
Объяснение кода листинга программы
- Установить размер массива, границу нижнего и верхнего индексов
- Сгенерировать и вывести в консоль массив с помощью функции rand()
- Попросить пользователя ввести элемент для удаления
- Найти введенный элемент в массиве
- Создать новый массив с уменьшенным размером
- Сдвинуть элементы массива на введенное количество позиций вправо
- Вывести полученный массив в консоль