Задачи перестановок в массивах

Решение таких задач сводится к выбору алгоритма просмотра массива с целью выполнить требуемые перестановки.

Пример 4. Дан одномерный целочисленный массив, заданный случайными числами на промежутке [-10; 10). Выполните циклический сдвиг элементов с нулевой позиции вправо на одну позицию. То есть должна быть реализована схема перестановок: x[0] ® x[1], x[1] ® x[2], … , x[k-1] ® x[0].

Одним из алгоритмов такого циклического сдвига является следующая последовательность действий. Поместим в буфер последний элемент массива (buf=x[k-1]). Выполним смещение остальных элементов вправо на одну позицию (x[i]=x[i-1]). При этом важен порядок смещения: на освободившееся место последнего элемента перемещается предпоследний, на место предпоследнего – предшествующий ему и т.д. В результате таких перемещений освобождается место нулевого элемента, на которое перемещается элемент из буфера. В данной задаче целесообразно выполнить вывод массива дважды: до и после циклического сдвига.

//Циклический сдвиг элементов в массиве с нулевой позиции на одну позицию вправо

#include <stdio.h>

#include <stdlib.h>

#include <time.h>

//подключение модуля для генератора случайных чисел

#define max 100

 

void gen (int k, int a, int b,int x[max]);

//прототип функции генерации массива

void out (int k, int x[max]);

//прототип функции вывода массива

void sdvig (int k, int x[max]);

//прототип функции циклического сдвига элементов массива

 

void main (){

int mas[max];

int n;

do {

printf("\nВведите количество элементов массива n

(n<=100): ");

scanf ("%d",&n);

}

while (n>max);

gen(n,-10,10,mas);

printf("Вывод сгенерированного массива из %d элементов:

\n",n);

out(n,mas);

sdvig (n,mas);

printf("\nВывод массива после циклического сдвига

элементов: \n");

out(n,mas);

}

//Описание функции генерации массива с клавиатуры

void gen(int k,int a, int b, int x[max]){

int i;

srand(time(NULL)*1000);

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

x[i]=int(rand()*1.0/(RAND_MAX)*(b-a)+a);

}

}

//Описание функции вывода массива в строку

void out (int k,int x[max]){

int i;

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

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

}

//Описание функции циклического сдвига элементов массива

void sdvig(int k,int x[max]){

int i,buf;

buf=x[k-1];

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

x[i]=x[i-1];

x[0]=buf;

}

Задания

1.Наберите коды программ из Примеров 1 и 2. Выполните компиляцию и запуск программ.

2.Дан одномерный целочисленный массив из N элементов, заданных с клавиатуры. Найти: количество и процентное соотношение положительных, отрицательных и нулевых элементов.

3.Дан одномерный целочисленный массив из N элементов, заданных случайными числами на промежутке [a; b). Заменить все элементы массива, кратные 3, на третий элемент массива.

4.Дан одномерный вещественный массив из N элементов (N – нечетное), заданных случайными числами на промежутке [a; b). Поменять местами элементы симметричные относительно центрального.

Домашние задания

1.Наберите коды программ из Примеров 3 и 4. Выполните компиляцию и запуск программ.

2.Дан одномерный целочисленный массив из N элементов, заданных с клавиатуры. Найти: количество и процентное соотношение четных и нечетных значений элементов.

3.Дан одномерный целочисленный массив из N элементов, заданных случайными числами на промежутке [a; b). Поменять местами первый минимальный и первый максимальный элементы.

4.Дан одномерный вещественный массив из N элементов, заданных случайными числами на промежутке [a; b). Выполните циклический сдвиг элементов с n-ой позиции вправо на k позиций.

 









Дата добавления: 2015-02-16; просмотров: 898;


Поиск по сайту:

При помощи поиска вы сможете найти нужную вам информацию.

Поделитесь с друзьями:

Если вам перенёс пользу информационный материал, или помог в учебе – поделитесь этим сайтом с друзьями и знакомыми.
helpiks.org - Хелпикс.Орг - 2014-2024 год. Материал сайта представляется для ознакомительного и учебного использования. | Поддержка
Генерация страницы за: 0.008 сек.