Практика программирования (Бейсик, Си, Паскаль)



         

Задачи, советы и ответы


Задание 4.03. Перестановка элементов одномерного массива в обратном порядке

Составить процедуру инвертирования целочисленного массива, которая меняет местами первый элемент с последним, второй — с предпоследним и т. д. Процедура должна обрабатывать массивы любой длины.

Совет 1 (общий)

В этой задаче особых проблем не возникает, и она включена как подготовительный этап к выполнению последующего задания. Цикл по перестановке элементов следует продолжать до целой части п/2 (n — число элементов в массиве), не обращая внимания на четность или нечетность п. Возможно, что при этом средний элемент, который должен оставаться на месте, переставится сам с собой.

Программа 4_03.bas

DECLARE SUB INVERT (A%(), N%)

DEFINT A-Z

CLS

N = 20

DIM A(N)

PRINT "Массив до перестановки :"

FOR I=0 ТО N-l: A(I)=I+1: PRINT A(I); : NEXT I

PRINT

INVERT A(), N

PRINT "Массив после перестановки :"

FOR I=0 ТО N-l: PRINT A(I); : NEXT I

END

SUB INVERT (A%(), N%)

DEFINT A-Z

FOR I = 0 TO (N-l)\2

TMP = A(I): A(I) = A(N-I-l): A(N-I-1) = TMP

NEXT I

END SUB

Программа 4_03.с

#include <stdio.h>

#include <conio.h>

void invert(int *a, int n) ;

void main(void)

{

#define N 20

int i,a[N];

clrscr ();

printf("Массив до перестановки :\n");

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

fa[i]=i+l; printf("%3d",a[i]); }

invert(a,N);

printf("\n Массив после перестановки :\n");

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

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

getch(); } void invert(int *a, int n)

int j,tmp;

for(j=0; j < n/2; j++)

{ tmp=a[j];

a[j]=a[n-j-1];

a[n-j-l]=tmp; } }

головной и хвостовой частях. Основным препятствием для реализации процедуры является запрет на использование вспомогательного массива.

Совет 1 (общий)

Это довольно известная в мире задача из набора программистских "жемчужин" (Бентли Д. Жемчужины творчества программистов / Пер. с англ. М.: Радио и связь, 1990). Она имеет изящное трехшаговое решение. На первом шаге производится обратная перестановка элементов только головной части массива. На втором шаге такой же перестановке подвергаются элементы хвостовой части. И заключительный этап — еще одна перестановка, но уже всех элементов массива.




Содержание  Назад  Вперед