pytanie/prośba/poszukuje

Alternatywny system operacyjny - coraz bardziej popularny w Naszych komputerach, ale niestety nadal są z nim problemy.

pytanie/prośba/poszukuje

Postprzez behemoth » 2010-06-24, 00:42:20

Witajcie!
Zwracam się do Was z pytaniem, czy jest ktoś na szanownym forum, kto zna dobrze AWK?
http://www.lastfm.pl/user/ksiadz666
http://ftims.pl
Avatar użytkownika
behemothNone specified
Moderator
Moderator
 
Posty: 381
Dołączył(a): 2010-03-26, 13:50:03
Lokalizacja: Łódź
Podziękował : 0 razy
Otrzymał podziękowań: 1 razy

Postprzez BlueMan » 2010-06-24, 08:35:00

thalcave w miarę dobrze zna AWK :)
Czytaj regulamin - unikniesz wielu problemów.
Korzystajcie z załączników na forum aby pliki nie ginęły w przyszłości w zewnętrznych serwisach.
Avatar użytkownika
BlueManMale
Administrator
Administrator
 
Posty: 19105
Dołączył(a): 2004-05-26, 17:34:59
Lokalizacja: Dabrowa Górn.
Podziękował : 6 razy
Otrzymał podziękowań: 5 razy
Imię: Szymon

Postprzez junior » 2010-06-24, 09:33:56

a co chcesz zrobić w awk... bo tego wbrew pozorom wcale nie trzeba dobrze znać bo jest w miarę proste.
zawsze możesz się nie zgodzić z opinią autora tego postu.
Avatar użytkownika
juniorMale
V.I.P.
V.I.P.
 
Posty: 1446
Dołączył(a): 2008-06-22, 11:07:52
Lokalizacja: Łódź
Podziękował : 0 razy
Otrzymał podziękowań: 4 razy

Postprzez behemoth » 2010-06-24, 11:03:41

Operacja mnożenia macierzy dwóch macierzy ma tę własność, że każdy z elementów wynikowej macierzy C= A * B wyznacza się tylko na podstawie odpowiednich elementów macierzy A i B. Celem zadania jest napisanie programu obliczającego iloczyn dwóch macierzy w sposób rozproszony przy wykorzystaniu pamięci dzielonej.

Należy w języku C/C++ napisać program, który pozwoli pomnożyć dwie macierze określone na jego wejściu.

Działanie programu jest następujace: program otrzymuje jako parametr linii poleceń liczbę określającą za pomocą ilu procesów potomnych ma być zrealizowane mnożenie macierzy. Następnie ze standardowego wejścia odczytuje macierze do przemnożenia w następującej postaci:

pierwsza linia zawiera dwie liczby całkowite oddzielone spacjami określające rozmiary pierwszej macierzy
kolejne linie zawierają odpowiednią liczbę wierszy macierzy, przy czym każdy wiersz składa się z liczb zmiennoprzecinkowych oddzielonych spacjami
kolejne linie zawierają opis drugiej macierzy w postaci identycznej jak powyżej (tzn. najpierw wymiary, a następnie wartości)
Program powinien sprawdzić, czy dla wprowdzonych danych mnożenie macierzy jest wykonalne i jeśli nie, zakończyć swoje działanie z odpowiednim komunikatem i kodem błędu.

Następnie program inicjalizuje pamięć dzieloną i uruchamia wskazaną liczbę procesów potomnych (patrz funkcja fork(2)), które będą realizowały cząstkowe mnożenia. Schemat podziału (tzn. to które elementy mają być wyznaczane przez które procesy potomne) jest dowolny - powinien on zostać zaproponowany przez autora programu. Każdy z procesów potomnych oblicza odpowiednie elementy i umieszcza je we właściwym miejscu pamięci dzielonej. Po zakończeniu obliczeń proces potomny kończy się.

Działanie procesu głównego kończy się w momencie, kiedy wszystkie jego procesy potomne zakończyły swoje działanie - należy wówczas wypisać na standardowe wyjście macierz wynikową.

Pamięć dzielona jest efektywnym mechanizmem przekazywania danych między programami. Działanie tego mechanizmu komunikacji międzyprocesowej polega na tym, że program tworzy obszar pamięci, który jest dostępny dla innych programów. W zależności od ustawionych uprawnień programy mogą czytać lub modyfikować ten obszar pamięci. Do manipulacji pamięcią dzieloną służą funkcje shmget(2), shmat(2), shmdt(2), shmctl(2).

Po uruchomieniu proces główny tworzy stosowny obszar pamięci dzielonej i za jego pomocą udostępnia macierze wejściowe oraz przyjmuje efekty pracy procesów potomnych. W momencie kończenia pracy konieczne jest usunięcie wykorzystywanej pamięci dzielonej. Należy również zwrócić uwagę na fakt, że segmenty pamięci dzielonej identyfikowane są za pomocą kluczy (specjalnych identyfikatorów) i zarówno proces główny jak i procesy potomne muszą posługiwać się tym samym identyfikatorem.
http://www.lastfm.pl/user/ksiadz666
http://ftims.pl
Avatar użytkownika
behemothNone specified
Moderator
Moderator
 
Posty: 381
Dołączył(a): 2010-03-26, 13:50:03
Lokalizacja: Łódź
Podziękował : 0 razy
Otrzymał podziękowań: 1 razy

Postprzez junior » 2010-06-24, 11:48:58

a co to ma do awk bo nie bardzo rozumiem?
AWK - interpretowany język programowania, którego główną funkcją jest wyszukiwanie i przetwarzanie wzorców. Jest także nazwą programu początkowo dostępnego dla systemów operacyjnych będących pochodnymi UNIX-a, obecnie także na inne platformy.
zawsze możesz się nie zgodzić z opinią autora tego postu.
Avatar użytkownika
juniorMale
V.I.P.
V.I.P.
 
Posty: 1446
Dołączył(a): 2008-06-22, 11:07:52
Lokalizacja: Łódź
Podziękował : 0 razy
Otrzymał podziękowań: 4 razy

Postprzez behemoth » 2010-06-24, 12:07:13

Dokładnie takie zadanie mam zrealizować w połączeniu C++, basha i awk
http://www.lastfm.pl/user/ksiadz666
http://ftims.pl
Avatar użytkownika
behemothNone specified
Moderator
Moderator
 
Posty: 381
Dołączył(a): 2010-03-26, 13:50:03
Lokalizacja: Łódź
Podziękował : 0 razy
Otrzymał podziękowań: 1 razy

Postprzez junior » 2010-06-24, 18:08:08

zrobić się da...
#!/bin/awk
BEGIN {
FS = " ";

}
{
if (NR == 1) {
w1= $1;
k1= $2;
} else if (NR <= (w1 +1)) {
for (i = 1; i <=k1; i++)
A[NR-1, i] = $i

} else if(NR == (w1 +2)) {
w2=$1;
k2=$2;
} else {
for (i = 1; i <= k2; i++)
B[NR-2-w1, i] = $i
}

}
END {
for(y=1; y<=w1; y++)
{
for(x=1; x<=k1; x++)
{
printf ("%f ",A[y,x]);
}
printf("\n");
}
for(y=1; y<=w2; y++)
{
for(x=1; x<=k2; x++)
{
printf ("%f ",B[y,x]);
}
printf("\n");
}
print k1;
print w1;
print podzial;
}

cat dane | awk -v podzial=4 -f skrypt.awk

mam zrobić wszystko za Ciebie czy sam powalczysz?
zawsze możesz się nie zgodzić z opinią autora tego postu.
Avatar użytkownika
juniorMale
V.I.P.
V.I.P.
 
Posty: 1446
Dołączył(a): 2008-06-22, 11:07:52
Lokalizacja: Łódź
Podziękował : 0 razy
Otrzymał podziękowań: 4 razy

Postprzez adams_a » 2010-06-24, 22:36:45

Ja mam taką prośbę: mógłby ktoś to rozwiązać w C++ tak jak jest to napisane w treści zadania?
Avatar użytkownika
adams_aNone specified
Nowy
 
Posty: 1
Dołączył(a): 2010-06-24, 21:35:45
Podziękował : 0 razy
Otrzymał podziękowań: 0 razy

Postprzez behemoth » 2010-07-02, 12:34:31

Problem, zadanie, pomógł mi rozwiązać kolega z roku.
Junior, dzięki za zainteresowanie :)
http://www.lastfm.pl/user/ksiadz666
http://ftims.pl
Avatar użytkownika
behemothNone specified
Moderator
Moderator
 
Posty: 381
Dołączył(a): 2010-03-26, 13:50:03
Lokalizacja: Łódź
Podziękował : 0 razy
Otrzymał podziękowań: 1 razy


  • Inne

Powrót do Linux

Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 124 gości

cron