Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Центр помощи > "[QBasic] как поменять элементы в массиве"


Автор: Artiom18 9.3.2008, 11:19
В одномерном массиве из M эл-тов (M-четное) поменять местами 1-ый и последний, 2-й и предпоследний, и т. д.  эл-ты.

Вот что у меня получилось, но что-то оно не хочет работать.

Код

20 INPUT "кол-во эл-тов"; M
21 Z = M / 2: X = INT(Z) 
25 IF M > 0 GOTO 47
30 IF M <= 0 
45 GOTO 20
47 IF Z - X <> O THEN GOTO 20 'определяется четный ли массив (делится ли он на 2)
50 DIM A(M)
60 FOR I = 1 TO M
70 INPUT A(I)
80 NEXT I
...
Вот тут надо бы напечатать исходный массив, да чего-то у меня не получается.
...
90 FOR J = 1 TO (M / 2) ' 1-ая часть массива
92 DIM B(J)
100 NEXT J
110 FOR K = (M / 2) + 1 TO M ' 2-ая часть массива
112 DIM C(K)
120 NEXT K
130 SWAP B(J), C(K)  'меняем эл-ты местами <- вот тут пишет ошибка
140 PRINT B(J), C(K)
150 END


Кто-нибудь, подскажите.

Автор: THandle 9.3.2008, 12:52
Код

LOOP
INPUT M
UNTIL M > 0
DIM A(M)
FOR I = 1 TO M
INPUT A(I)
NEXT I
I = 1
J = M
LOOP
TMP = A(J)
A(J) = A(I)
A(I) = TMP
I = I + 1
J = J - 1
UNTIL I > J
FOR I = 1 TO M
PRINT A(I)
NEXT I
END


Не гарантирую что работает, так как QBasic'a у меня нет и последний раз на нем я программировал больше 2 с лишним лет назад.

На всякий случай привожу кад работающей программы на Делфи.

Код

program Project1;

{$APPTYPE CONSOLE}

var
  a : array of integer;
  i, j, m, tmp : integer;
begin
  repeat
    writeln('Vvedite M: ');
    readln(m);
  until m > 0;
  dec(m);
  setlength(a, m);
  for i := 0 to m do
    begin
      writeln('Vvedite chislo: ');
      readln(a[i]);
    end;
    i := 0;
    j := m;
  while i <= j  do
    begin
      tmp := a[j];
      a[j] := a[i];
      a[i] := tmp;
      inc(i);
      dec(j);
    end;
  for i := 0 to m do
    writeln(a[i]);
  readln;
end.


Автор: Artiom18 9.3.2008, 15:37
Спасибо огромное! Правда оно пока работать отказывается, но думаю, что заставлю. smile 

Автор: THandle 9.3.2008, 16:42
Artiom18, да не за что))) примерный алгоритм такой как там описан. могут быть просто ошибки с синтаксисом(все таки долго на QBasic не писал). Больше помочь ничем не могу так как не знаю какие ошибки в привеленном мною коде. Вобщем удачи тебе. smile 

Автор: Artiom18 9.3.2008, 19:57
ЗАРАБОТАЛА!! smile  smile 

Вот такое получилось:
Код

10 CLS
20 INPUT M
30 IF M <= 0 OR M / 2 <> INT(M / 2) THEN GOTO 20
40 DIM A(M)
50 FOR I = 1 TO M
60 INPUT A(I)
70 NEXT I
80 I = 1
90 J = M
100 WHILE I < J
110 SWAP A(J), A(I)
140 I = I + 1
150 J = J - 1
160 WEND
170 FOR I = 1 TO M
180 PRINT A(I)
190 NEXT I
200 END


Еще раз огромное спасибо!!

Автор: THandle 9.3.2008, 20:00
Artiom18, алгоритм впринципе тот который я и предлагал. smile 

Пометь тему как решенную. Для порядку. smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)