PDA

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



kwazarik
24.03.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
24.03.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)


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

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

Tmp=A : A=B : B=Tmp

kwazarik
24.03.2009, 23:50
Спасибо, разобрался, помогло =)



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

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

---------- 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
25.03.2009, 00:11
Числа стоящие в первой строке в первый столбец, вторую строку во второй столбец и так далее

Это называется транспонирование. Делается так:


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
25.03.2009, 00:47
Если рассечь матрицу по диагонали, и посмотреть на нее, то получается, что она становится симметрична относительно этой диагонали, те меняется только часть значений... Возможно ли транспонирование абсолютно всех значений строк на значения столбцов.

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

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

А мне надо:
147
258
369