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



         

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


элемент с индексом п, предварительно перемещенный в позицию k+l, займет место элемента с номером (n+l)-(k+l)=n-k.

Таким образом, хвостовые элементы, сохраняя взаимное расположение, перейдут в голову нового массива и будут находиться вплотную перед его прежней головой.

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

Процедуру invert, приведенную в предыдущем задании, целесообразно модифицировать, задавая в ней дополнительные параметры. Например — индекс j, начиная с которого производится инвертирование, и количество len элементов, участвующих в перестановке.

Программа 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) {




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