Mam taki problem ponieważ na zaliczenie w szkole dostałem skrypt mnożący dwie macierze:
Znalazłem na forum skrypt który sumuje dwie macierze, jakby ktoś mógłby mi pomuc i napisać jak go zmienić aby mnożył te macierze byłbym bardzo wdzięczny.
Podaje skrypt:
#!/bin/bash
if test -f "suma.txt"
then
rm "suma.txt"
fi
if [ -a "dane1.txt" ]
then
rm "dane1.txt"
fi
if [ -a "dane2.txt" ]
then
rm "dane2.txt"
fi
wymiar=`cat konfig.txt | awk '{ print $1 }'` #wymiar macierzy pobrany z pliku
ilosc=$(($wymiar*$wymiar)) #ilosc wszystkich pozycji w macierzy
i=0
liczba1=1
wspX=1
wspY=1
while [ $i -lt $ilosc ] #petla tworzaca macierze w plikach dane1.txt oraz dane2.txt - macierze sa wypelnione cyframi 1-9
do
if [ $liczba1 -gt 9 ]
then
liczba1=1
fi
liczba2=$((10-$liczba1))
if [ $wspX -eq $wymiar ]
then
echo $liczba1 | awk '{ printf "%d\n", $1 }' >> dane1.txt
echo $liczba2 | awk '{ printf "%d\n", $1 }' >> dane2.txt
wspX=1
wspY=$(($wspY+1))
else
echo $liczba1 | awk '{ printf "%d ", $1 }' >> dane1.txt
echo $liczba2 | awk '{ printf "%d ", $1 }' >> dane2.txt
wspX=$(($wspX+1))
fi
if [ $wspY -gt $wymiar ]
then
break
fi
liczba1=$(($liczba1+1))
done
wspX=1
wspY=1
i=0
while [ $i -lt $ilosc ] #petla sumujaca macierze zawarte w plikach dane1.txt i dane2.txt
do
if [ $wspX -gt $wymiar ]
then
wspY=$(($wspY+2))
wspX=1
fi
zmienna1=`cat dane1.txt | awk '{ print $"'$wspX'" }'` #wyciagniecie kolomny okreslonej wspolrzedna X
zmienna1=`echo $zmienna1 | awk '{ print $"'$wspY'" }'` #wyciagniecie konkretnej cyfry
zmienna2=`cat dane2.txt | awk '{ print $"'$wspX'" }'`
zmienna2=`echo $zmienna2 | awk '{ print $"'$wspY'" }'`
suma=$((zmienna1+zmienna2))
if [ $wspX -eq $wymiar ]
then
echo $suma | awk '{ printf "%d\n", $1 }'
wspX=1
wspY=$(($wspY+1))
else
echo $suma | awk '{ printf "%d ", $1 }'
wspX=$(($wspX+1))
fi
i=$(($i+1))
done
Mnożenie macierzy, skrypt w bashu
- wafello
- Użytkownik
- Posty: 35
- Rejestracja: 7 sty 2009, o 21:50
- Płeć: Mężczyzna
- Lokalizacja: Józefina
- Pomógł: 6 razy
Mnożenie macierzy, skrypt w bashu
Musisz na początek zastanowić się czym się różni dodawanie macierzy od mnożenia. Gdy już nad tym się zastanowisz spróbuj sam napisać, gdy to Ci nie wyjdzie - podaj z czym masz konkretny problem.
Mnożenie macierzy, skrypt w bashu
Z góry dziękuję za zainteresowanie. Moim największym problemem jest to, że w bashu nigdy nie programowałem nawet na zajęciach w szkole,
tylko zmienili nam wykładowce, a on uznał żę każdy ma zrobić skrypt. Trafił mi się niestety jeden z trudniejszych.
Przez trzy ostatnie dni czytam różnego rodzaju kursy i od tego już wariuje. Jak narazie udało mi się zmienić skrypt sumujący na dużo prostszy:
#!/bin/bash
awk '
FNR==NR {
for(i=1; i[ Dodano: 11 Stycznia 2009, 18:14 ]
#!/bin/bash
awk '
FNR==NR {
for(i=1; i<=NF; i++)
_[FNR,i]=$i
next
}
{
for(i=1; i<=NF; i++)
printf("%d%s", $i*_[FNR,i]+$i*_[FNR+1,i]+$i*_[FNR+1,i]+$i*_[FNR+1,i], (i==NF) ? "\n" : FS);
}' macierz2.txt macierz1.txt
Nie wiem jak zrobić aby w pierwszej macierzy przesuwał si w prawo, w drugiej przesuwa si e w dół więc chyba dobrze, nie wiem pytam !!!!
tylko zmienili nam wykładowce, a on uznał żę każdy ma zrobić skrypt. Trafił mi się niestety jeden z trudniejszych.
Przez trzy ostatnie dni czytam różnego rodzaju kursy i od tego już wariuje. Jak narazie udało mi się zmienić skrypt sumujący na dużo prostszy:
#!/bin/bash
awk '
FNR==NR {
for(i=1; i[ Dodano: 11 Stycznia 2009, 18:14 ]
#!/bin/bash
awk '
FNR==NR {
for(i=1; i<=NF; i++)
_[FNR,i]=$i
next
}
{
for(i=1; i<=NF; i++)
printf("%d%s", $i*_[FNR,i]+$i*_[FNR+1,i]+$i*_[FNR+1,i]+$i*_[FNR+1,i], (i==NF) ? "\n" : FS);
}' macierz2.txt macierz1.txt
Nie wiem jak zrobić aby w pierwszej macierzy przesuwał si w prawo, w drugiej przesuwa si e w dół więc chyba dobrze, nie wiem pytam !!!!
- wafello
- Użytkownik
- Posty: 35
- Rejestracja: 7 sty 2009, o 21:50
- Płeć: Mężczyzna
- Lokalizacja: Józefina
- Pomógł: 6 razy
Mnożenie macierzy, skrypt w bashu
Używaj znaczników "code"
Funkcja printf jest stosowana bez nawiasów w awk.
Dokumentacje do awk znajdziesz na:
Zanim zaczniesz zapisywać kod napisz sobie cały algorytm w postaci blokowej, później w pseudokodzie a na sam koniec w języku programowania - unikniesz w ten sposób wielu problemów.
Funkcja printf jest stosowana bez nawiasów w awk.
Dokumentacje do awk znajdziesz na:
Zanim zaczniesz zapisywać kod napisz sobie cały algorytm w postaci blokowej, później w pseudokodzie a na sam koniec w języku programowania - unikniesz w ten sposób wielu problemów.