The OpenNET Project / Index page

[ новости /+++ | форум | wiki | теги | ]

форумы  помощь  поиск  регистрация  майллист  вход/выход  слежка  RSS
"Транспонирование матрицы 6х6"
Вариант для распечатки  
Пред. тема | След. тема 
Форумы Программирование под UNIX (Shell скрипты)
Изначальное сообщение [ Отслеживать ]

"Транспонирование матрицы 6х6"  +/
Сообщение от medved_1408 (ok) on 29-Апр-10, 13:50 
Помогите решить задачу. Нужно транспонировать матрицу 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++)) do

let "index=$i*$columns+$j"
let "index2=$j*$columns+$i"
echo "index" $index
echo "index2" $index2
          resarray[$index]=${array1[$index2]}
done

done
echo "итог: "
echo ${resarray[*]} | xargs -n $columns

Высказать мнение | Ответить | Правка | Cообщить модератору

Оглавление

Сообщения по теме [Сортировка по времени | RSS]


1. "Транспонирование матрицы 6х6"  +/
Сообщение от Andrey Mitrofanov on 29-Апр-10, 14:01 
>Нужно транспонировать матрицу 6х6 в shell.
>Подскажите, что нужно изменить.

Предлагаю изменить постановку задачи...............

Высказать мнение | Ответить | Правка | ^ | Наверх | Cообщить модератору

2. "Транспонирование матрицы 6х6"  +/
Сообщение от medved_1408 (ok) on 29-Апр-10, 14:29 
>Предлагаю изменить постановку задачи...............

Задание дал преподаватель.

Высказать мнение | Ответить | Правка | ^ | Наверх | Cообщить модератору

3. "Транспонирование матрицы 6х6"  +/
Сообщение от Недовольный on 29-Апр-10, 14:35 
>>Предлагаю изменить постановку задачи...............
>Задание дал преподаватель.

Тогда учитесь делать самостоятельно

Высказать мнение | Ответить | Правка | ^ | Наверх | Cообщить модератору

4. "Транспонирование матрицы 6х6"  +/
Сообщение от medved_1408 (ok) on 29-Апр-10, 14:42 
>Тогда учитесь делать самостоятельно

Я и пытаюсь. Подсказать кто-нибудь может по делу. Может я изначально не правильно начала делать. Матрицу он мне транспонирует, но еще выводит какие-то числа.


Высказать мнение | Ответить | Правка | ^ | Наверх | Cообщить модератору

5. "Транспонирование матрицы 6х6"  +/
Сообщение от allez (ok) on 29-Апр-10, 15:28 
>>Тогда учитесь делать самостоятельно
>
>Я и пытаюсь. Подсказать кто-нибудь может по делу. Может я изначально не
>правильно начала делать. Матрицу он мне транспонирует, но еще выводит какие-то
>числа.

Подсказать? Да без проблем. Присмотритесь к переменным n, m и rows, подумайте как следует и
решение задачи у вас в кармане. Кстати, откуда у вас вообще взялись эти переменные и какую
функцию они выполняют?

P. S. Я вот к этим переменным присмотрелся, подумал и матрица нормально транспонировалась. ;-)

Высказать мнение | Ответить | Правка | ^ | Наверх | Cообщить модератору

6. "Транспонирование матрицы 6х6"  +/
Сообщение от medved_1408 (ok) on 29-Апр-10, 15:34 
m и rows - не нужны. забыла их удалить от прежнего варианта. n - число элементов в массиве.
Высказать мнение | Ответить | Правка | ^ | Наверх | Cообщить модератору

7. "Транспонирование матрицы 6х6"  +/
Сообщение от medved_1408 (ok) on 29-Апр-10, 15:41 
Она у меня транспонируется, но с  итоговой матрицей выводится еще 15 сторок с цифрами.
Высказать мнение | Ответить | Правка | ^ | Наверх | Cообщить модератору

8. "Транспонирование матрицы 6х6"  +/
Сообщение от medved_1408 (ok) on 29-Апр-10, 15:58 
Что не так с переменными. Я не знаю. Думаю над задачей уже сутки. Если бы, до чего-то умного додумалась, не стала бы писать. Помогмте!
Высказать мнение | Ответить | Правка | ^ | Наверх | Cообщить модератору

10. "Транспонирование матрицы 6х6"  +/
Сообщение от allez (ok) on 29-Апр-10, 18:03 
>Что не так с переменными. Я не знаю. Думаю над задачей уже
>сутки. Если бы, до чего-то умного додумалась, не стала бы писать.
>Помогмте!

Ну что с ними может быть не так? Разве что то, что две из них нафиг не нужны. Кстати, попробуйте
умножить 35 (а точнее, 36) на 6, а потом посчитать количество лишних цифр в выводе вашего
скрипта. И зачем вам явным образом указывать количество элементов матрицы, если известно
количество столбцов (columns) и строк (как это будет по-английски - n, m или все-таки rows, а? ;-))?

P. S. Впрочем, можете в мое сообщение сильно не углубляться. Вам Андрей Митрофанов уже дал
исчерпывающий ответ.

Высказать мнение | Ответить | Правка | ^ | Наверх | Cообщить модератору

9. "Транспонирование матрицы 6х6"  +/
Сообщение от Andrey Mitrofanov on 29-Апр-10, 16:35 
>rows=6
>columns=6
>n=35
>m=6
>for ((i=0;i< $n;i++)) do

Непорпавимое повреждение кармы наступит немедленно:

;i<rows;

>for ((j=0;j< $columns;j++)) do

Высказать мнение | Ответить | Правка | ^ | Наверх | Cообщить модератору

11. "Транспонирование матрицы 6х6"  +/
Сообщение от medved_1408 (ok) on 29-Апр-10, 18:04 

>;i<rows;

тот же результат: транспонированная матрица+ 15 лишних строк.
Не могу понять откуда они появляются.
пробовола проверять index, что бы он не был больше 35, но на проверку(через if) выдает ошибку.


Высказать мнение | Ответить | Правка | ^ | Наверх | Cообщить модератору

12. "Транспонирование матрицы 6х6"  +/
Сообщение от Andrey Mitrofanov on 29-Апр-10, 18:21 
Двойное, гыгыг, повреждение занесено в:

unset resarray
for ((i=0;i< rows;i++)) do

Высказать мнение | Ответить | Правка | ^ | Наверх | Cообщить модератору

14. "Транспонирование матрицы 6х6"  +/
Сообщение от allez (ok) on 29-Апр-10, 21:01 
>
>
>>;i<rows;
>
> тот же результат: транспонированная матрица+ 15 лишних строк.
>Не могу понять откуда они появляются.
>пробовола проверять index, что бы он не был больше 35, но на
>проверку(через if) выдает ошибку.

М-да, как все запущено... :-)
В общем, найдите энное количество отличий между вашим изначальным скриптом и этим:


$ cat matrix.sh
#!/bin/bash

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< $rows;i++)) do
  for ((j=0;j< $columns;j++)) do

    let index=$i*$columns+$j
    let index2=$j*$columns+$i
# Убрано для наглядности, чтобы вывод не загромождался лишней информацией
#    echo "index = $index"
#    echo "index2 = $index2"
    resarray[$index]=${array1[$index2]}
  done

done
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


Высказать мнение | Ответить | Правка | ^ | Наверх | Cообщить модератору

15. "Транспонирование матрицы 6х6"  +/
Сообщение от medved_1408 (ok) on 29-Апр-10, 22:08 
Все получилось. ОГРОМНОЕ спасибо всем кто помог.
Высказать мнение | Ответить | Правка | ^ | Наверх | Cообщить модератору

13. "Транспонирование матрицы 6х6"  +/
Сообщение от Andrey Mitrofanov on 29-Апр-10, 18:32 
Матрицы на баше?! Куда я попал....

>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 $columns

for ((i=0;i<=n;i++)) do
  j=$((i/columns+i%columns*rows))
  resarray[$i]=${array1[j]}
done

>echo "итог: "
>echo ${resarray[*]} | xargs -n $columns

Высказать мнение | Ответить | Правка | ^ | Наверх | Cообщить модератору

Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




Спонсоры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2022 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру