элемент с индексом п, предварительно перемещенный в позицию k+l, займет место элемента с номером (n+l)-(k+l)=n-k.
Таким образом, хвостовые элементы, сохраняя взаимное расположение, перейдут в голову нового массива и будут находиться вплотную перед его прежней головой.
Совет 2 (общий)
Программа 4_04.bas
DECLARE SUB INVERT1 (A%(), J%, N%)
DEFINT A-Z
CLS
N=20: K=15
DIM A(N)
PRINT "Массив до перестановки :"
FOR I=0 TO N-l: A(I)=I+1: PRINT A(I); : NEXT I
PRINT
INVERT1 A(),0,K
PRINT "После перестановки в головной части :"
FOR I=0 ТО N-l: PRINT A(I); : NEXT I: PRINT
INVERT1 A(),K,N-K
PRINT "После перестановки в хвостовой части :"
FOR I=0 ТО N-l: PRINT A(I); : NEXT I: PRINT
INVERT1 A(),0,N
PRINT "После полной перестановки :"
FOR I=0 TO N-l: PRINT A(I); : NEXT I
END
SUB INVERT1 (A%(), J%, N%)
DEFINT A-Z
FOR I = J TO J+(N-1)\2
TMP=A(I): A(I)=A(2*J+N-1-I): A(2*J+N-l-I)=TMP
NEXT I
END SUB
Программа 4_04.с
#include <stdio.h>
#include <conio.h>
void invertl(int *a, int j , int k) ;
void main(void) {
#define N 20
#define К 15
int i,a[N];
clrscr () ;
printf("Массив до перестановки :\n");
for(i=0; i < N; 1++)
{
a[i] = 1 + 1;
printf("%3d",a[i]); }
invertl(a,0,K);
printf("\n После перестановки в головной части :\n");
for(i=0; i < N; i++)
printf("%3d",a[i]);
invertl(a,K,N-K);
printf("\n После перестановки в хвостовой части :\n");
for(i=0; i < N; i++)
printf("%3d",a[i]);
invertl(a,0,K);
printf("\n После полной перестановки :\n");
for(i=0; i < N; i++)
printf("%3d",a[i]);
getch(); }
void invertl(int *a, int j, int k) {