begin show(b[j],2);
break;
end;
m2: input; { Ввод последующих ходов игрока }
step345; { Последующие ходы программы }
goto m2;
end.
Задание 4.13. Слияние массивов
Составить процедуру, которая объединяет два предварительно упорядоченных по возрастанию массива, получая в результате массив с возрастающими по величине элементами.
Совет 1 (общий)
текущий указатель в массиве, из которого на предыдущем шаге был выбран минимальный элемент. Однако предварительно разумно проверить, не исчерпан ли уже один из массивов.
Программа 4_13.bas
DECLARE SUB MERGE (A%(),NA%,B%(),NB%,C%())
DEFINT A-Z
CLS
NA=3:
DIM A(NA)
DATA 0,2,4
FOR K=0 TO NA-1: READ A(K): PRINT A(K); : NEXT K: PRINT
NB=4
DIM B(NB)
DATA 1,3,5,7
FOR K=0 TO NB-1: READ B(K): PRINT B(K); : NEXT K: PRINT
DIM C(NA+NB)
MERGE A(),NA,B(),NB,C()
FOR K=0 TO NA+NB-1: PRINT C(K); : NEXT К
END
SUB MERGE(A(),NA,В(),NB,С())
JA=0: JB=0
FOR JC=0 TO NA+NB-1
IF JA=NA THEN GOTO MB
IF JB=NB THEN GOTO MA
IF A(JA)<B(JB) THEN GOTO MA MB: C(JC)=B(JB): JB=JB+1: GOTO M1 MA: C(JC)=A(JA): JA=JA+1: Ml:
NEXT JC
END SUB
Программа 4_13.с
#include <stdio.h>
#include <conio.h>
void merge(int *a,int ka,int *b,int kb,int *c);
main() {
#define na 3
#define nb 4
int j,a[na]={0,2,4},b[nb]={l,3,5,7},c[na+nb];
clrscr();
for(j=0; j<na; j++)
printf("%4d",a[j]);
printf("\n");
for(j=0; j<nb; j++)
printf("%4d",b[j]);
printf("\n");
merge(a,na,b,nb,c);
for(j=0; j<na+nb; j++)
printf("%4d",с[j]);
getch(); }
void merge(int *a,int ka,int *b,int kb,int *c) {
int ja=0,jb=0,jc;
for(jc=0; jc<ka+kb; jc++) {
if (ja==ka) goto mb;