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

Модификация массивов

I часть

Пример

Дан массив размера N и целое число K (1 ÷ K < N). Осуществить циклический сдвиг элементов массива вправо на K позиций

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

#include <stdio.h>

#include <locale.h>

#include <stdlib.h>

#include <time.h>

int main()

{

int n, k, i;

int *a, *t;

setlocale(LC_ALL, "");

srand(time(0));

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

scanf("%d", &n);

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

scanf("%d", &k);

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

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

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

t = (int *) malloc(sizeof(int) * k);

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

a[i] = rand() % 20;

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

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

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

printf("\n");

// Копируем во временный массив последние элементы

// исходного массива.

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

t[i] = a[n - k + i];

// Осуществляем сдвиг элементов.

for(i = n - k - 1; i >= 0; i--)

a[i + k] = a[i];

// Копируем элементы из временного массива в начало

// исходного.

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

a[i] = t[i];

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

printf("Массив после сдвига :");

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

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

printf("\n");

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

free(a);

free(t);

return 0;

}

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

#include <iostream>

#include <locale>

#include <cstdlib>

#include <ctime>

using namespace std;

/*Дан массив размера N и целое число K (1 < K < N). Осуществить циклический сдвиг элементов массива вправо на K позиций.

*/

int main()

{

int n, k;

int *a, *t;

setlocale(LC_ALL, "");

srand(time(0));

cout << "Введите n: ";

cin >> n;

cout << "Введите k: ";

cin >> k;

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

a = new int[n];

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

t = new int[k];

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

a[i] = rand() % 20;

cout << "Массив :";

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

cout << " " << a[i];

cout << endl;

// Копируем во временный массив последние элементы

// исходного массива.

for(int i = 0; i < k; i++)

t[i] = a[n - k + i];

// Осуществляем сдвиг элементов.

for(int i = n - k - 1; i >= 0; i--)

a[i + k] = a[i];

// Копируем элементы из временного массива в начало

// исходного.

for(int i = 0; i < k; i++)

a[i] = t[i];

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

cout << "Массив после сдвига :";

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

cout << " " << a[i];

cout << endl;

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

delete[] a;

delete[] t;

return 0;

}

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

  1. Дан массив A размера N и целые числа K и L (1 <= K < L <= N). Переставить в обратном порядке элементы массива, расположенные между элементами AK и AL, не включая эти элементы.

  2. Дан массив размера N (N — четное число). Поменять местами первую и вторую половины массива

  3. Дан массив размера N и целое число K (1 < K < N). Осуществить циклический сдвиг элементов массива влево на K позиций

  4. Дан массив размера N (N — четное число). Поменять местами его первый элемент со вторым, третий — с четвертым и т. д.

  5. Поменять местами минимальный и максимальный элементы заданного массива