Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Метод_Практ_new1.doc
Скачиваний:
0
Добавлен:
01.04.2025
Размер:
225.79 Кб
Скачать

III часть

Пример

Дано целое число L (L> 1) и целочисленный массив размера N. Заменить каждую серию массива, длина которой меньше L, на один элемент с нулевым значением (Назовем серией группу подряд идущих одинаковых элементов).

Вариант программы на языке С

#include <stdio.h>

#include <locale.h>

#include <stdlib.h>

#include <time.h>

int main()

{

int n, l, i, j, k;

int *a;

setlocale(LC_ALL, "");

srand(time(0));

printf("Введите n: ");

scanf("%d", &n);

printf("Введите l: ");

scanf("%d", &l);

// Выделяем память для массива.

a = (int *) malloc(sizeof(int) * n);

for(i = 0; i < n; i++)

a[i] = rand() % 3;

printf("Массив: ");

for(i = 0; i < n; i++)

printf(" %d", a[i]);

printf("\n");

for(i = 0; i < n; )

{

for(j = i + 1; j < n && a[i] == a[j]; j++)

;

k = j - i; // k - размер серии,

if(k > 1 && k < l)

// если с i-го элемента начинается серия,

// длина которой меньше l

{

a[i] = 0;

// Сдвигаем правую часть массива.

for(; j < n; j++)

a[j - (k - 1)] = a[j];

// Уменьшаем n (размер массива при этом не изменяется -

// мы просто используем только первые n элементов).

n -= k - 1;

i++;

}

else // пропускаем серию

i += k;

}

// Выводим результат.

printf("Результат: ");

for(i = 0; i < n; i++)

printf(" %d", a[i]);

printf("\n");

// Освобождаем память.

free(a);

return 0;

}

Вариант программы на языке С++

#include <stdio.h>

#include <locale.h>

#include <stdlib.h>

#include <time.h>

int main()

{

int n, l, i, j, k;

int *a;

setlocale(LC_ALL, "");

srand(time(0));

printf("Введите n: ");

scanf("%d", &n);

printf("Введите l: ");

scanf("%d", &l);

// Выделяем память для массива.

a = (int *) malloc(sizeof(int) * n);

for(i = 0; i < n; i++)

a[i] = rand() % 3;

printf("Массив: ");

for(i = 0; i < n; i++)

printf(" %d", a[i]);

printf("\n");

for(i = 0; i < n; )

{

for(j = i + 1; j < n && a[i] == a[j]; j++)

;

k = j - i; // k - размер серии,

if(k > 1 && k < l)

// если с i-го элемента начинается серия,

// длина которой меньше l

{

a[i] = 0;

// Сдвигаем правую часть массива.

for(; j < n; j++)

a[j - (k - 1)] = a[j];

// Уменьшаем n (размер массива при этом не изменяется -

// мы просто используем только первые n элементов).

n -= k - 1;

i++;

}

else // пропускаем серию

i += k;

}

// Выводим результат.

printf("Результат: ");

for(i = 0; i < n; i++)

printf(" %d", a[i]);

printf("\n");

// Освобождаем память.

free(a);

return 0;

}

Задания для самостоятельного решения

  1. Дано целое число K (K> 1) и целочисленный массив размера N. Поменять местами первую серию массива и его серию с номером K. Если серий в массиве меньше K, то вывести массив без изменений.

  2. Дано целое число K (K> 0) и целочисленный массив размера N. Поменять местами последнюю серию массива и его серию с номером K Если серий в массиве меньше K, то вывести массив без изменений

  3. Дан целочисленный массив размера N. Преобразовать массив, увеличив его первую серию наибольшей длины на один элемент.

  4. Дан целочисленный массив размера N. Преобразовать массив, увеличив каждую его серию на один элемент

  5. Дан целочисленный массив размера N, содержащий по крайней мере одну серию, длина которой больше 1. Преобразовать массив, уменьшив каждую его серию на один элемент.