QBasic, масивы, форматированный вывод и перестановки

Ответить
kwazarik
Сообщения: 3
Зарегистрирован: 24 мар 2009, 22:02

24 мар 2009, 22:19

Здравствуйте.


1)скажите пожалуйста, как в qbasic при нажатии shitf+F5 сделать так, чтобы вывод каждого члена массива происходил не в столбик а в виде некоевого подобия матрицы? Чтение FAQ в самом QB и Гугление не помогло, покопался в опциях самого QB - тоже безрезультатно... возможно это зависит от версии QB или просто существует специальный оператор?

2) есть ли операторы позволяющие менять местами значения столбика со значениями столбца в массиве?

Вот примерчик куска кода:

Код: Выделить всё

cls
dim c(6,6)
data 1,2,3,4,5,6
data 7,8,9,10,11,12
data 13,14,15,16,17,18
data 19,20,21,22,23,24
data 25,26,27,28,29,30
data 31,32,33,34,35,36
for i=1 to 6
for j=1 to 6
read c(i,j)
print c(i,j)
next j
next i
for i=1 to 6
for j=1 to 6
все, дальше я понятия не имею какие могут быть операторы для замены членов стобца с членами строки.
Единственное что лезет в голову это
c(i,j)=c(j,i)
но, что будет верен только первая строка, а дальше значения уже будут браться из уже заменных, хотя фиг его знает, проверить на практике не могу из-за проблемы в 1 вопросе(((
Аватара пользователя
Naeel Maqsudov
Сообщения: 2551
Зарегистрирован: 20 фев 2004, 19:17
Откуда: Moscow, Russia
Контактная информация:

24 мар 2009, 22:55

Код: Выделить всё

for i=1 to 6
for j=1 to 6
read c(i,j)
print c(i,j); ", ";
next j
print
next i
Можно также выровнять столбцы. Смотрите справку по оператору PRINT и конкретно функцию tab(n)
&quot писал(а):операторы позволяющие менять местами значения столбика со значениями столбца
Не понятно, значения какого "столбика" нужно менять со некотороым столбцом?
В любом случае это делается в цикле по количеству строк. Пробегаем по столбцу и меняем их по очереди.
Для обмена местами двух значений нужна треться переменная.

Tmp=A : A=B : B=Tmp
kwazarik
Сообщения: 3
Зарегистрирован: 24 мар 2009, 22:02

24 мар 2009, 23:50

Спасибо, разобрался, помогло =)
Naeel Maqsudov писал(а): Не понятно, значения какого "столбика" нужно менять со некотороым столбцом?
В любом случае это делается в цикле по количеству строк. Пробегаем по столбцу и меняем их по очереди.
Для обмена местами двух значений нужна треться переменная.

Tmp=A : A=B : B=Tmp
Числа стоящие в первой строке в первый столбец, вторую строку во второй столбец и так далее. Извините, не так выразился, сами строки менять нет необходимости, главное записать саму строку в соответствующий столбец.

---------- Post added at 23:50 ---------- Previous post was at 23:37 ----------


Код: Выделить всё

cls
dim c(6,6)
data 1,2,3,4,5,6
data 7,8,9,10,11,12
data 13,14,15,16,17,18
data 19,20,21,22,23,24
data 25,26,27,28,29,30
data 31,32,33,34,35,36
for i=1 to 6
for j=1 to 6
read c(i,j)
print c(i,j); ", ";
next j
next i
for j=1 to 6
for i=1 to 6
tmp=c(i,j)
c(i,j)=c(j,i)
c(j,i)=tmp
print c(i,j); ", ";
next i
print
next j
end
Выдает следующий ответ
1,2,3,4,5,6
7,8,9,10,11,12
13,14,15,16,17,18
19,20,21,22,23,24
25,26,27,28,29,30
31,32,33,34,35,36

1,2,3,4,5,6
2,8,9,10,11,12
3,9,15,16,17,18
4,10,16,22,23,24
5,11,17,23,29,30
6,12,18,24,30,36

Видно, что заменяется не полностью столбей, а только чсть строки(1 столбик, однако, заменен весь).
В чем ошибка?
Аватара пользователя
Naeel Maqsudov
Сообщения: 2551
Зарегистрирован: 20 фев 2004, 19:17
Откуда: Moscow, Russia
Контактная информация:

25 мар 2009, 00:11

&quot писал(а):Числа стоящие в первой строке в первый столбец, вторую строку во второй столбец и так далее
Это называется транспонирование. Делается так:

Код: Выделить всё

for i=2 to 6 
  for j=1 to 6
    tmp=c(i,j): c(i,j)=c(j,i) : c(j,i)=tmp
  next
next
kwazarik
Сообщения: 3
Зарегистрирован: 24 мар 2009, 22:02

25 мар 2009, 00:47

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

При описанном Вами методом QB выводит:
Было:
123
456
789

Стало:
123
256
369
.....

А мне надо:
147
258
369
Ответить