Помогите решить задачу. Нужно транспонировать матрицу 6х6 в shell.
Написала код, но выводит не корректно. Подскажите, что нужно изменить.rows=6
columns=6
n=35
m=6
export index
export tmp
declare -a array1=(1 2 3 4 5 6 7 8 9 0 9 8 3 4 5 6 7 8 9 8 7 6 5 4 3 2 1 2 3 4 5 1 1 1 6 7)
declare -a resarray
echo "Первоначальная: "
echo ${array1[*]} | xargs -n $columns
for ((i=0;i< $n;i++)) do
for ((j=0;j< $columns;j++)) dolet "index=$i*$columns+$j"
let "index2=$j*$columns+$i"
echo "index" $index
echo "index2" $index2
resarray[$index]=${array1[$index2]}
donedone
echo "итог: "
echo ${resarray[*]} | xargs -n $columns
>Нужно транспонировать матрицу 6х6 в shell.
>Подскажите, что нужно изменить.Предлагаю изменить постановку задачи...............
>Предлагаю изменить постановку задачи...............Задание дал преподаватель.
>>Предлагаю изменить постановку задачи...............
>Задание дал преподаватель.Тогда учитесь делать самостоятельно
>Тогда учитесь делать самостоятельноЯ и пытаюсь. Подсказать кто-нибудь может по делу. Может я изначально не правильно начала делать. Матрицу он мне транспонирует, но еще выводит какие-то числа.
>>Тогда учитесь делать самостоятельно
>
>Я и пытаюсь. Подсказать кто-нибудь может по делу. Может я изначально не
>правильно начала делать. Матрицу он мне транспонирует, но еще выводит какие-то
>числа.Подсказать? Да без проблем. Присмотритесь к переменным n, m и rows, подумайте как следует и
решение задачи у вас в кармане. Кстати, откуда у вас вообще взялись эти переменные и какую
функцию они выполняют?P. S. Я вот к этим переменным присмотрелся, подумал и матрица нормально транспонировалась. ;-)
m и rows - не нужны. забыла их удалить от прежнего варианта. n - число элементов в массиве.
Она у меня транспонируется, но с итоговой матрицей выводится еще 15 сторок с цифрами.
Что не так с переменными. Я не знаю. Думаю над задачей уже сутки. Если бы, до чего-то умного додумалась, не стала бы писать. Помогмте!
>Что не так с переменными. Я не знаю. Думаю над задачей уже
>сутки. Если бы, до чего-то умного додумалась, не стала бы писать.
>Помогмте!Ну что с ними может быть не так? Разве что то, что две из них нафиг не нужны. Кстати, попробуйте
умножить 35 (а точнее, 36) на 6, а потом посчитать количество лишних цифр в выводе вашего
скрипта. И зачем вам явным образом указывать количество элементов матрицы, если известно
количество столбцов (columns) и строк (как это будет по-английски - n, m или все-таки rows, а? ;-))?P. S. Впрочем, можете в мое сообщение сильно не углубляться. Вам Андрей Митрофанов уже дал
исчерпывающий ответ.
>rows=6
>columns=6
>n=35
>m=6
>for ((i=0;i< $n;i++)) doНепорпавимое повреждение кармы наступит немедленно:
;i<rows;
>for ((j=0;j< $columns;j++)) do
>;i<rows;
тот же результат: транспонированная матрица+ 15 лишних строк.
Не могу понять откуда они появляются.
пробовола проверять index, что бы он не был больше 35, но на проверку(через if) выдает ошибку.
Двойное, гыгыг, повреждение занесено в:unset resarray
for ((i=0;i< rows;i++)) do
>
>
>>;i<rows;
>
> тот же результат: транспонированная матрица+ 15 лишних строк.
>Не могу понять откуда они появляются.
>пробовола проверять index, что бы он не был больше 35, но на
>проверку(через if) выдает ошибку.М-да, как все запущено... :-)
В общем, найдите энное количество отличий между вашим изначальным скриптом и этим:
$ cat matrix.sh
#!/bin/bashrows=6
columns=6
# Следующие четыре строки не нужны совсем, то есть абсолютно :-)
#n=35
#m=6
#export index
#export tmp
declare -a array1=(1 2 3 4 5 6 7 8 9 0 9 8 3 4 5 6 7 8 9 8 7 6 5 4 3 2 1 2 3 4 5 1 1 1 6 7)
declare -a resarray
echo "Первоначальная: "
echo ${array1[*]} | xargs -n $columns
for ((i=0;i< $rows;i++)) do
for ((j=0;j< $columns;j++)) dolet index=$i*$columns+$j
let index2=$j*$columns+$i
# Убрано для наглядности, чтобы вывод не загромождался лишней информацией
# echo "index = $index"
# echo "index2 = $index2"
resarray[$index]=${array1[$index2]}
donedone
echo "итог: "
echo ${resarray[*]} | xargs -n $columns$ ./matrix.sh
Первоначальная:
1 2 3 4 5 6
7 8 9 0 9 8
3 4 5 6 7 8
9 8 7 6 5 4
3 2 1 2 3 4
5 1 1 1 6 7
итог:
1 7 3 9 3 5
2 8 4 8 2 1
3 9 5 7 1 1
4 0 6 6 2 1
5 9 7 5 3 6
6 8 8 4 4 7
Все получилось. ОГРОМНОЕ спасибо всем кто помог.
Матрицы на баше?! Куда я попал....>rows=6
>columns=6
>n=35
>m=6
>export index
>export tmp
>declare -a array1=(1 2 3 4 5 6 7 8 9 0
>9 8 3 4 5 6 7 8 9 8 7
>6 5 4 3 2 1 2 3 4 5 1
>1 1 6 7)unset resarray
>declare -a resarray
>echo "Первоначальная: "
>echo ${array1[*]} | xargs -n $columnsfor ((i=0;i<=n;i++)) do
j=$((i/columns+i%columns*rows))
resarray[$i]=${array1[j]}
done>echo "итог: "
>echo ${resarray[*]} | xargs -n $columns