Nowe posty

Autor Wątek: Wyświetlanie drzewka, jak na zdjęciu! (Kolokwium)  (Przeczytany 2225 razy)

koles10

  • Gość
Wyświetlanie drzewka, jak na zdjęciu! (Kolokwium)
« dnia: 2015-06-03, 14:16:13 »
Witam! Mam do oddania program, który wyświetli drzewko takie, jak na załączonym zdjęciu. Bardzo proszę o pomoc. Od tego zależy czy zdam przedmiot!


Offline 1709

  • Users
  • Guru
  • *****
  • Wiadomości: 2769
  • 1709
    • Zobacz profil
Wyświetlanie drzewka, jak na zdjęciu! (Kolokwium)
« Odpowiedź #1 dnia: 2015-06-03, 14:37:49 »
A jakaś pomoc ? Wzór ? Fragment jakby to miało wyglądać ?
To Fork to jakaś wymyślona nazwa ?
Uworzony obrazek ma być w .png ?
To ma być zbudowane przypomocy Bash i Graphviz ?

Tu masz przykłady:
http://www.graphviz.org/pdf/dotguide.pdf

http://error501.wikidot.com/graphviz-moje-pierwsze-grafy
PS: Brak polskiej czcionki, nie jest to brak lenistwa, a jej brak w systemie i brak czasu na reczne poprawki.

koles10

  • Gość
Wyświetlanie drzewka, jak na zdjęciu! (Kolokwium)
« Odpowiedź #2 dnia: 2015-06-03, 14:55:58 »
Stworzenie katalogów, aby utworzyły drzewo takie, jak na zdjęciu i wyświetliło to drzewo w konsoli na linuxie . Ma być to w języku Bash. Nie wiem co to fork, ale to raczej bez znaczenia.

Offline 1709

  • Users
  • Guru
  • *****
  • Wiadomości: 2769
  • 1709
    • Zobacz profil
Wyświetlanie drzewka, jak na zdjęciu! (Kolokwium)
« Odpowiedź #3 dnia: 2015-06-03, 15:20:35 »
Pierw napoczatku skryptu musisz dac
#!/bin/sh
ale to chyba wiesz,
katalogi tworzysz komendą mkdir nazwa.
między katalogami poruszasz się używając komendy cd ścieżka

http://mediologia.pl/katalogi-i-pliki-linux/2-7-polecenia-linux-wykonywane-na-katalogach

https://youtu.be/cfLxlFxNGuc?t=483

Co do wyświetlenia zawartosci katalogów to nie wiem co miał na myśli autor zadania,
ls -R ścieżka_do_katalogu
wypisze wszystkie katalogi i pliki katalogu do którego podasz scieżkę.
Ale to brzydko wygląda, i nie przypomina drzewka,
 O wiele ładniej to wygląda przy pomocy komendy tree
ale ta komenda nie jest standardem w linuxie, trzeba sobie pierw program tree zainstalować, by móc używać tej komendy.
No chyba ze sam spróbujesz narysować drzewko w terminalu.
( np. przy pomocy
echo " cos tam " 
 echo " |------ costam"  
echo " costam "
)

Moze z jakichs kursów skorzystasz...
http://dief.republika.pl/cytat.html
http://dief.republika.pl/varp.html

Jak nie masz linuxa, masz bash on-line:
http://www.shellcheck.net/
PS: Brak polskiej czcionki, nie jest to brak lenistwa, a jej brak w systemie i brak czasu na reczne poprawki.

Offline Paweł Kraszewski

  • Administrator
  • Guru
  • *****
  • Wiadomości: 3066
  • Lenistwo jest matką potrzeby = babcią wynalazku
    • Zobacz profil
Wyświetlanie drzewka, jak na zdjęciu! (Kolokwium)
« Odpowiedź #4 dnia: 2015-06-03, 21:40:50 »
Ten FORK może mieć znaczenie, bo może w zadaniu chodzi o stworzenie drzewa procesów, tak aby PSTREE wyświetlił obraz jak na zdjęciu. Jak najbardziej do zrobienia w bashu.

Zresztą drzewko wygląda właśnie jak wynik pstree (od procesów) a nie tree (od plików). W tree nie ma czysto poziomych gałęzi a w pstree są.
Paweł Kraszewski
~Arch/Void/Gentoo/FreeBSD/OpenBSD/Specjalizowane customy

Offline ultr

  • Users
  • Guru
  • *****
  • Wiadomości: 1177
    • Zobacz profil
Wyświetlanie drzewka, jak na zdjęciu! (Kolokwium)
« Odpowiedź #5 dnia: 2015-06-04, 09:03:18 »
@koles10
Cytat: koles10
Witam! Mam do oddania program, który wyświetli drzewko takie, jak na załączonym zdjęciu. Bardzo proszę o pomoc. Od tego zależy czy zdam przedmiot!
Cytuj
Witam! Pracodawca wysłał mnie na miesięczne płatne szkolenie, które olałem. Jak mogę udowodnić, że czegokolwiek się nauczyłem? Od tego zależy, czy dostanę wypłatę!
Cytuj
Witam! Klient prosił o dostarczenie XYZ. Proszę o pomoc. Jak oszukać klienta, że niby dostał to co chciał tak żeby nie zauważył? Od tego zależy, czy mi zapłaci!
Po twoim poście widać, że nawet nie wiesz o co chodzi (a na pewno było omawiane na zajęciach).
Kolokwium już się zapewne skończyło, więc miłego powtarzania przedmiotu.

Jako, że jak widać nie nauczyłeś się wiele na tym przedmiocie, wynieś z ostatniego semestru inną naukę:
Że nie potrzeba więcej informatyków-analfabetów od generowania kosztów za gotowe rozwiązania, które przy odrobinie wiedzy można poskładać samemu z klocków dostępnych za darmo (często lepszych, a zawsze bardziej skalowalnych).
Być może powinieneś poszukać innego zawodu? Bo przy obecnym podejściu w tym się nie sprawdzisz, a co najwyżej narobisz pracodawcy szkody.

Offline ultr

  • Users
  • Guru
  • *****
  • Wiadomości: 1177
    • Zobacz profil
Wyświetlanie drzewka, jak na zdjęciu! (Kolokwium)
« Odpowiedź #6 dnia: 2015-06-04, 12:08:48 »
Rozwiązanie wersji z podprocesami porządnie było całkiem ciekawym zadaniem, więc poświęciłem temu chwilę.
Komentarze i sugestie mile widziane.

Kod: /kto nieuk, ten i tak nie zrozumie :)/
#!/bin/bash

MAIN='0'

RX1='s/([^-])-([^-])/\\1 \\2/g'          # regexp for splitting tree param
RX2='s/-(-+)/\\1/g'                     # regexp for shifting tree branches
dofork() {
  # extract this processes tree description:
  line=$( echo "$1" | sed -E "$RX1" | sed -E "$RX1" | sed -E "$RX2" )
  while true; do                       # just a dummy block of code
    read -d ' ' me                     # read in this process name
    echo "Hello, I'm $me ($BASHPID)"   # new process says hello with PID
    while read -d ' ' subtree; do      # read in the next subtree
      dofork $subtree &                # fork and pass the subtree param
    done
    break                              # exit the dummy block of code
  done <<<"$line "                     # allow read-ing from $line+space
  if [ "$me" != "$MAIN" ]; then        # is this a subprocess?
    exec -a "$me" sleep 10             # go to long sleep
  fi
}

dofork 0-1--2---3---4---5-6-7--8-9     # do the forking for given tree:
                                       # 0---1---2---3
                                       #   |       |-4
                                       #   |       |-5
                                       #   |-6
                                       #   |-7---8
                                       #   |-9

sleep 1                                # wait for all forks to execute

exec -a "$MAIN" pstree -c -p $$        # replace this process with pstree

echo "This will never be executed."    # we should never get here
Wynik:
$ ./fork 
Hello, I'm 0 (27006)
Hello, I'm 7 (27014)
Hello, I'm 1 (27012)
Hello, I'm 9 (27016)
Hello, I'm 6 (27013)
Hello, I'm 8 (27037)
Hello, I'm 2 (27043)
Hello, I'm 4 (27050)
Hello, I'm 3 (27049)
Hello, I'm 5 (27051)
pstree(27006)---sleep(27012)---sleep(27043)---sleep(27049)
              |                             |-sleep(27050)
              |                             |-sleep(27051)
              |-sleep(27013)
              |-sleep(27014)---sleep(27037)
              |-sleep(27016)