Составить процедуру инвертирования целочисленного массива,
Задание 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). Она имеет изящное трехшаговое решение. На первом шаге производится обратная перестановка элементов только головной части массива. На втором шаге такой же перестановке подвергаются элементы хвостовой части. И заключительный этап — еще одна перестановка, но уже всех элементов массива.
Содержание Назад Вперед