- •Лабораторная работа №1 Линейные и разветвляющиеся алгоритмы
- •Арифметические выражения
- •Операции с целыми числами
- •Логические выражения
- •Организация ветвлений в алгоритмах
- •Лабораторная работа №2 Циклические алгоритмы
- •Рекуррентные последовательности
- •Вычисление характеристик числовой последовательности
- •Определение свойства числовой последовательности
- •Формирование массива Пример
- •Вычисление характеристик массива
- •Модификация массивов
- •I часть
- •II часть Пример
- •III часть
- •Лабораторная работа №4 «Двумерные массивы»
- •Вывод элементов
- •Вычисление характеристик матриц
- •Модификация
- •Литература
Модификация массивов
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;
}
Задания для самостоятельного решения
Дан массив A размера N и целые числа K и L (1 <= K < L <= N). Переставить в обратном порядке элементы массива, расположенные между элементами AK и AL, не включая эти элементы.
Дан массив размера N (N — четное число). Поменять местами первую и вторую половины массива
Дан массив размера N и целое число K (1 < K < N). Осуществить циклический сдвиг элементов массива влево на K позиций
Дан массив размера N (N — четное число). Поменять местами его первый элемент со вторым, третий — с четвертым и т. д.
Поменять местами минимальный и максимальный элементы заданного массива
