eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.comp.programming › jak napisać szybki program
Ilość wypowiedzi w tym wątku: 106

  • 91. Data: 2009-05-21 03:57:23
    Temat: Re: jak napisać szybki program
    Od: "Mariusz Marszałkowski" <b...@W...gazeta.pl>

    Marteno Rodia <m...@o...pl> napisał(a):
    >
    > Co by=B6cie proponowali?

    Proponuję: Uczta Programistów - Henry S. Warren Jr.

    Pzdr


    --
    Wysłano z serwisu Usenet w portalu Gazeta.pl -> http://www.gazeta.pl/usenet/


  • 92. Data: 2009-05-21 06:35:27
    Temat: Re: jak napisać szybki program
    Od: Jacek Czerwinski <...@...z.pl>

    Mariusz Marszałkowski pisze:
    > Jędrzej Dudkiewicz <j...@g...com> napisał(a):
    >
    >> bartekLTG wrote:
    >>> Maciej Pilichowski wrote:
    >>>> aby zawsze pisac ++var zamiast
    >>>> var++


    > Może tak jest wydajniej, ale czy to nie jest pomylenie idei? Język C++
    > względem C i asemblera, zdecydowanie lepiej nadaje się do zarządzania
    > dużymi projektami i do ponownego wykorzystania kodu. Dzięki temu
    > jest optymalizowane co innego - czas i nakład ludzkiej pracy. Po co
    > używać języka wysokopoziomowego i jednocześnie wnikać w niuanse kompilacji?

    > Warto pamiętać że optymalizowanie zapisu może przyspieszyć program
    > co najwyżej liniowo. Zoptymalizowany w ten sposób program może
    > działać szybciej, ale jednocześnie przestaje być podatny na modyfikacje.
    > Jeśli po pewnym czasie pracy nad programem przychodzi pomysły na
    > modyfikację algorytmu, która może przyspieszyć więcej niż dobre
    > zakodowanie, to prawdopodobnie będzie trzeba napisać wszystko od nowa.
    > Twierdzę to w oparciu o doświadczenia jakie zdobyłem pisząc program do
    > gry w szachy - optymalizowałem go na oba sposoby około roku czasu.

    Miód na moje serce. Radykalnie przemyślany algorytm da (wiele) więcej
    niż 'optymalizacja zapisu' (bardzo to fajnie nazwałeś)

    Mariusz Marszałkowski pisze:
    > Marteno Rodia <m...@o...pl> napisał(a):
    >
    > Np. te dwie lektury:
    >
    > Procesory Pentium - Michael L. Schmit
    > Optymalizacja Kodu - Kris Kaspersky
    >
    > I z rok albo dwa doświadczenia jako koder

    Otóż niekoniecznie. Bardzo rzadka (w moim odczuciu) jest sytuacja
    autentycznego profilowania (i innych obiektywych metod precyzyjnej oceby
    wydajności). Powiedzmy sobie wymaga to sporo determinacji, czasu i
    środowiska. Znacznie częściej koderzy nabywają umiejętności przez
    przekaz pomiędzy ludźmi. O ile w dziedzinie wzorców, dobrego stylu
    jakość przekazu widać, to w dziedzinie optymalizacji pokutują różne
    nawet przesądy których nikt obiektywnie nie weryfikuje. Często ludowe
    sposoby dają zerowy lub ujemny efekt przyśpieszenia, przy zaciemnieniu kodu.
    Katastrofę optymalizacyjną to widać (99% CPU i rzężący dysk itd, zresztą
    nie od razu przekłada się to na diagnozę) ale jak nieoptymalnośc jest w
    mniejszym stopniu to intuicja nie wsparta wiedzą często jest zawodna

    Zakładam, że autor książki za to bierze kasę, że sprawdza swoje
    twierdzenia w labolatorium.


  • 93. Data: 2009-05-21 09:50:27
    Temat: Re: jak napisać szybki program
    Od: Paweł Kierski <n...@p...net>

    Marteno Rodia wrote:
    > On May 19, 11:48 am, "Mateusz Loskot" <m...@l...net> wrote:
    >>> albo co jest szybsze: int array[10] czy int *array = new int[10].
    >> Pierwsze to alokacja na stosie, drugie na tzw. stercie (dynamic storage)
    >> Ogólna zasada przy optymalizacji, to im mniej alokacji pamięci
    >> tym lepiej. Alokacja to wolna operacja.
    >
    > To co zrobić, żeby unikać konstrukcji spowalniających program? Pamięci
    > muszę używać, a żeby używać - muszę chyba jakoś ją zaalokować.

    Ale nie zawsze jej potrzebujesz, bo może już masz. Np. zamieniasz w
    napisie wszystkie literki na małe, to w C++ zamiast funkcji
    string strToLower(const string& x);
    lepiej
    void strToLower(string& x);

    Ten przykład nie dotyczy akurat języków, gdzie napisy są obiektami
    immutable, ale chodzi o ogólną zasadę.

    --
    Paweł Kierski
    n...@p...net


  • 94. Data: 2009-05-21 13:20:46
    Temat: Re: jak napisać szybki program
    Od: "Marcin 'Malcom' Malich" <m...@g...com>

    On 21 Maj, 05:26, "Mariusz Marszałkowski"
    <b...@W...gazeta.pl> wrote:

    > Może tak jest wydajniej, ale czy to nie jest pomylenie idei? Język C++
    > względem C i asemblera, zdecydowanie lepiej nadaje się do zarządzania
    > dużymi projektami i do ponownego wykorzystania kodu. Dzięki temu
    > jest optymalizowane co innego - czas i nakład ludzkiej pracy. Po co
    > używać języka wysokopoziomowego i jednocześnie wnikać w niuanse kompilacji?

    Moze ktos chce pisac wydajnie nie tracac mocniejszej kontroli typow i
    innych 'usprawnien', ktorych nie oferuje C ;p

    > Jeśli ktoś chce wydajnie zapisać program to musi użyć języka C i/albo
    > asemblera. Języki te mają to do siebie, że ich kompilatory nie wstawiają
    > do kodu wynikowego żadnych ukrytych wstawek. Kompilator wygeneruje to
    > co napiszesz.

    Jesli nie uzyje wlasciwosci, ktore potrzebuja wsparcia czy to w
    runtime, czy w czasie kompilacji dodatkowego narzutu w kodzie
    (virtual, exceptions, rtti), to w wyniku bedzie dokladnie to co
    napisze bez zadnych wstawek (a przynajmniej powinno).

    --
    Pozdrowienia,
    Marcin 'Malcom' Malich
    m...@m...pl
    http://malcom.pl


  • 95. Data: 2009-05-21 16:07:44
    Temat: Re: jak napisać szybki program
    Od: "Mariusz Marszałkowski" <b...@W...gazeta.pl>

    Marcin 'Malcom' Malich <m...@g...com> napisał(a):

    > On 21 Maj, 05:26, "Mariusz Marsza=B3kowski"
    > <b...@W...gazeta.pl> wrote:
    >
    > > Mo=BFe tak jest wydajniej, ale czy to nie jest pomylenie idei? J=EAzyk C+=
    > +
    > > wzgl=EAdem C i asemblera, zdecydowanie lepiej nadaje si=EA do zarz=B1dzan=
    > ia
    > > du=BFymi projektami i do ponownego wykorzystania kodu. Dzi=EAki temu
    > > jest optymalizowane co innego - czas i nak=B3ad ludzkiej pracy. Po co
    > > u=BFywa=E6 j=EAzyka wysokopoziomowego i jednocze=B6nie wnika=E6 w niuanse=
    > kompilacji?
    >
    > Moze ktos chce pisac wydajnie nie tracac mocniejszej kontroli typow i
    > innych 'usprawnien', ktorych nie oferuje C ;p
    >
    > > Je=B6li kto=B6 chce wydajnie zapisa=E6 program to musi u=BFy=E6 j=EAzyka =
    > C i/albo
    > > asemblera. J=EAzyki te maj=B1 to do siebie, =BFe ich kompilatory nie wsta=
    > wiaj=B1
    > > do kodu wynikowego =BFadnych ukrytych wstawek. Kompilator wygeneruje to
    > > co napiszesz.
    >
    > Jesli nie uzyje wlasciwosci, ktore potrzebuja wsparcia czy to w
    > runtime, czy w czasie kompilacji dodatkowego narzutu w kodzie
    > (virtual, exceptions, rtti), to w wyniku bedzie dokladnie to co
    > napisze bez zadnych wstawek (a przynajmniej powinno).
    >

    No oczywiście można napisać program w C++ bez użycia klas gdyż składnia C++
    z małymi wyjątkami jest nadzbiorem składni C. Klas też lepiej nie używać,
    bo jak optymalizować zapis jeśli dane są podzielone na klasy i nie ma
    wszędzie do nich dostępu? Optymalizacja zapisu to żonglerka strukturą
    danych. Po zmianie struktury danych zmienia się części procedur.
    Obudowywanie danych w klasy (choćby jako składowe statyczne, które nie dają
    narzutu) podwaja nakład pracy przy takim eksperymentowaniu. Więc powstaje
    programowanie w C przy użyciu kompilatora C++ :)

    Pzdr


    --
    Wysłano z serwisu Usenet w portalu Gazeta.pl -> http://www.gazeta.pl/usenet/


  • 96. Data: 2009-05-21 16:58:29
    Temat: Re: jak napisać szybki program
    Od: "Marcin 'Malcom' Malich" <m...@g...com>

    On 21 Maj, 18:07, "Mariusz Marszałkowski"
    <b...@W...gazeta.pl> wrote:

    > No oczywiście można napisać program w C++ bez użycia klas gdyż składnia C++
    > z małymi wyjątkami jest nadzbiorem składni C. Klas też lepiej nie używać,
    > bo jak optymalizować zapis jeśli dane są podzielone na klasy i nie ma
    > wszędzie do nich dostępu? Optymalizacja zapisu to żonglerka strukturą
    > danych. Po zmianie struktury danych zmienia się części procedur.

    A jak zoptymalizowac zapis jesli dane podzielone sa na struktury w C?

    > Obudowywanie danych w klasy (choćby jako składowe statyczne, które nie dają
    > narzutu) podwaja nakład pracy przy takim eksperymentowaniu. Więc powstaje
    > programowanie w C przy użyciu kompilatora C++ :)

    Narzutu czego?

    Nie potrafie zrozumiec do czego zmierzasz :>

    --
    Pozdrowienia,
    Marcin 'Malcom' Malich
    m...@m...pl
    http://malcom.pl


  • 97. Data: 2009-05-21 20:20:58
    Temat: Re: jak napisać szybki program
    Od: "Mariusz Marszałkowski" <b...@W...gazeta.pl>

    Marcin 'Malcom' Malich <m...@g...com> napisał(a):

    > On 21 Maj, 18:07, "Mariusz Marsza=B3kowski"
    > <b...@W...gazeta.pl> wrote:
    >
    > > No oczywi=B6cie mo=BFna napisa=E6 program w C++ bez u=BFycia klas gdy=BF =
    > sk=B3adnia C++
    > > z ma=B3ymi wyj=B1tkami jest nadzbiorem sk=B3adni C. Klas te=BF lepiej nie=
    > u=BFywa=E6,
    > > bo jak optymalizowa=E6 zapis je=B6li dane s=B1 podzielone na klasy i nie =
    > ma
    > > wsz=EAdzie do nich dost=EApu? Optymalizacja zapisu to =BFonglerka struktu=
    > r=B1
    > > danych. Po zmianie struktury danych zmienia si=EA cz=EA=B6ci procedur.
    >
    > A jak zoptymalizowac zapis jesli dane podzielone sa na struktury w C?

    Po prostu jest mniej pracy w C. Zmienne typu strukturalnego w C (zgodnie z
    ideą C) deklaruje się globalnie, wszystkie funkcje deklaruje się
    globalnie, a dostęp do wszystkich danych i składowych jest publiczny.
    W C++ projektując strukturę danych trzeba dodatkowo zastanowić się:
    1) jakie metody będą miały dostęp do jakich danych
    2) jakie składowe będą w sekcjach prywatnych, jakie w chronionych
    3) jakiej hierarchii dziedziczenia użyć
    Po zmianie struktury danych w C++ trzeba te kroki przejść na nowo. Te
    kroki ułatwiają ponowne wykorzystanie kodu, zmniejszają podatność na
    błędy, ale nie ułatwiają optymalizacji zapisu.

    Np. pisząc program numeryczny w C, zadeklarujesz globalnie tablicę liczb.
    Napiszesz później trzy procedury:
    1) pierwsza wczyta dane z pliku do tej tablicy liczb
    2) druga wykona zadanie numeryczne
    3) trzecia zapisze wyniki do pliku.

    Programując to samo w C++ napiszesz:
    1) klasę do wczytywania danych
    2) klasę do obliczeń
    3) klasę do wyprowadzania danych.

    Nagle zobaczysz że już podczas wczytywania danych możesz przeprowadzić
    wstępne obliczenia - co przyspieszy program. Dla struktury klas w C++ nie
    będzie to naturalne, ponieważ struktura danych do obliczeń jest
    odseparowana w klasie obliczeń. Będziesz musiał dopisać specjalne metody
    do komunikacji pomiędzy klasą wczytywania danych a klasą obliczeniową.
    Być może narzut na dodatkowe metody przewyższy zysk z wstępnych obliczeń
    podczas wczytywania - ale koszt metod składowych to już inna kwestia.

    Natomiast w C masz w całym programie dostęp do wszystkich danych. Od razu
    podczas wczytywania zrobisz wstępne obliczenia i zmodyfikujesz globalne
    dane. Po prostu w C trzeba zmodyfikować mniej kodu.

    Jeśli w końcu dokonasz kilku takich spostrzeżeń i kilku takich modyfikacji
    kodu, obojętnie czy pisałeś w C czy w C++, to dojdziesz do wniosku że
    pierwotny podział kodu i danych na logiczne bloki nie był najlepszy. Będzie
    trzeba przepisać wszystko od nowa. I znów zyskasz pisząc w C, bo omijasz
    podział na klasy i nie zastanawiasz się jaką składową umieścić w jakiej
    klasie i w jakiej sekcji, żeby po kolejnym spostrzeżeniu cały ten
    skrupulatny podział trzeba było zburzyć...

    >
    > > Obudowywanie danych w klasy (cho=E6by jako sk=B3adowe statyczne, kt=F3re =
    > nie daj=B1
    > > narzutu) podwaja nak=B3ad pracy przy takim eksperymentowaniu. Wi=EAc pows=
    > taje
    > > programowanie w C przy u=BFyciu kompilatora C++ :)
    >
    > Narzutu czego?
    >
    > Nie potrafie zrozumiec do czego zmierzasz :>

    Narzut na dodatkowe zaprojektowanie klas. Dobre zaprojektowanie jest
    czasochłonne. Klasy projektuje się po to aby kod ponownie wykorzystać
    bez ponownego wnikania w ich szczegóły implementacyjne. Zaprojektowane
    tak klasy nie są w żaden sposób podatne na późniejsze "sprytne modyfikacje"
    w celu przyspieszenia.

    Pzdr.



    --
    Wysłano z serwisu Usenet w portalu Gazeta.pl -> http://www.gazeta.pl/usenet/


  • 98. Data: 2009-05-21 21:04:58
    Temat: Re: jak napisać szybki program
    Od: Jacek Czerwinski <...@...z.pl>

    Mariusz Marszałkowski pisze:
    > Marcin 'Malcom' Malich <m...@g...com> napisał(a):
    >
    >> On 21 Maj, 18:07, "Mariusz Marsza=B3kowski"
    >> <b...@W...gazeta.pl> wrote:

    > Po prostu jest mniej pracy w C. Zmienne typu strukturalnego w C (zgodnie z
    > ideą C) deklaruje się globalnie, wszystkie funkcje deklaruje się
    > globalnie, a dostęp do wszystkich danych i składowych jest publiczny.
    Jeśli chciałeś podać przykład za C (za tym stylem) to ci nie wyszło.
    Brak podziału na prywatny/publiczny (w dowolny paradygmacie, czy to
    stary modularnym, czy obiektowym) odbiera ci swobodę (w pr. małym) lub
    blokuje *w wielkim projekcie) możliwość ulepszenia lokalnej
    implementacji bez zmiany interfejsu.
    Zostaje żmudna ręczna robota.
    Wracając do optymalizacji, znasz takie słowo "gówna lepiej nie ruszać" -
    to m.in. o programowaniu w całości na globalach. Ulepszanie zwykle nie
    następuje.

    ścinam się czasem z gośćmi którym się wydaje, że reprezentują
    proceduralny styl pisania. Z tym że nie wiedzą, co to naprawdę jest, że
    też zawiera podział na publiczne i prywatne. Trzeba by sie odwołać do
    książek z lat 70-tych i sobie powtórzyć.

    > W C++ projektując strukturę danych trzeba dodatkowo zastanowić się:
    > 1) jakie metody będą miały dostęp do jakich danych
    > 2) jakie składowe będą w sekcjach prywatnych, jakie w chronionych
    > 3) jakiej hierarchii dziedziczenia użyć
    > Po zmianie struktury danych w C++ trzeba te kroki przejść na nowo. Te
    > kroki ułatwiają ponowne wykorzystanie kodu, zmniejszają podatność na
    > błędy, ale nie ułatwiają optymalizacji zapisu.
    >

    >
    > Natomiast w C masz w całym programie dostęp do wszystkich danych. Od razu
    > podczas wczytywania zrobisz wstępne obliczenia i zmodyfikujesz globalne
    > dane. Po prostu w C trzeba zmodyfikować mniej kodu.
    Lub cały kod - patrz wyżej.

    >
    > Jeśli w końcu dokonasz kilku takich spostrzeżeń i kilku takich modyfikacji
    > kodu, obojętnie czy pisałeś w C czy w C++, to dojdziesz do wniosku że
    > pierwotny podział kodu i danych na logiczne bloki nie był najlepszy. Będzie
    > trzeba przepisać wszystko od nowa. I znów zyskasz pisząc w C, bo omijasz
    > podział na klasy i nie zastanawiasz się jaką składową umieścić w jakiej
    > klasie i w jakiej sekcji, żeby po kolejnym spostrzeżeniu cały ten
    > skrupulatny podział trzeba było zburzyć...
    >
    >>> Obudowywanie danych w klasy (cho=E6by jako sk=B3adowe statyczne, kt=F3re =
    >> nie daj=B1
    >>> narzutu) podwaja nak=B3ad pracy przy takim eksperymentowaniu. Wi=EAc pows=
    >> taje
    >>> programowanie w C przy u=BFyciu kompilatora C++ :)
    >> Narzutu czego?
    >>
    >> Nie potrafie zrozumiec do czego zmierzasz :>
    >
    > Narzut na dodatkowe zaprojektowanie klas. Dobre zaprojektowanie jest
    > czasochłonne.
    Lepsze jest jakiekolwiek ujęcie np. z hermetyzacją (dorzuć sobie inne
    postulaty) niz programowanie na globalsach. Kod z kiepskimi klasami
    łatwiej ulepszysz, kod na globalsach tylko w kosz.
    Układ klas choćby uwierający ogarniesz i przemyślisz. Układ setek
    globalnych (publicznych) zmiennych ... możesz sobie obiecywać że ogarniesz.

    > Klasy projektuje się
    >
    Widzisz, projektuje się. mniejszy będzie nakład pracy na konserwację,
    jeśli proces projektowania(choćby niedoskonały) zachodzi (alternatywą
    jest zupełny żywioł). A jeśli proces projektowania zachodzi, notacja
    obiektowa lepiej wyraża 'co poeta miał na myśli'. Alternatywą jest
    modularne 'stare' programowanie, ale tam też PROJEKTUJESZ co jest
    prywatne, co publiczne itd.

    W innej części tego wątku poparłem cię, że radykalnie mądrzejszy
    algorytm da więcej niż kolanowe tricki. Niestety tym razem promujesz
    ujecie gdzie trudno o wyższy wysiłek intelektualny (lub mniejszy efekt
    porównywalnym wysiłkiem). Jednak tricki niż intelekt.

    ujęcie obiektowe nie wzięło się z próżni, jest kolejną iteracją w
    kilkudziesięcioletnim procesie rozwoju. Realizuje (na swój sposób)
    kanoniczne zasady: podział na interfejs a implementację, hermetyzację,
    izolację, abstrakcję i kilka innych słówek (pora już późna). Zwolennicy
    OO wierzą/mają dowody, że ten styl lepiej realizuje bardzo stare postulaty.

    Broń sobie ujęcia proceduralnego (modularno-proceduralnego) jak chcesz,
    ale sorry troszkę głębiej to poznaj. Złap jakaś zżólknietą książke i
    poznaj temat.

    Małe CV: W 1990 prowadziłem (w zespole) system w C migrowany na C++
    (oczywiście przez etap C z klasami, a jeszcze wczesiej był eta
    obiektowym w swym sensie jeszcze w notacji w C) na drobne Hmmm set tyś
    linii. Ale mogę kurna czegoś nie wiedzieć.

    PS. Jest taki podzbiór programowania w CPP (i to spory) gdzie nie ma
    mierzalnych narzutów w kodzie maszynowym (ale nie o tym piszę). Myślę że
    dorabiasz ideologię do praktyki.





  • 99. Data: 2009-05-21 21:55:37
    Temat: Re: jak napisać szybki program
    Od: "Mariusz Marszałkowski" <b...@W...gazeta.pl>

    Jacek Czerwinski <...@...z.pl> napisał(a):

    > Mariusz Marszałkowski pisze:
    > > Marcin 'Malcom' Malich <m...@g...com> napisał(a):
    > >
    > >> On 21 Maj, 18:07, "Mariusz Marsza=B3kowski"
    > >> <b...@W...gazeta.pl> wrote:
    >
    > > Po prostu jest mniej pracy w C. Zmienne typu strukturalnego w C (zgodnie z
    > > ideą C) deklaruje się globalnie, wszystkie funkcje deklaruje się
    > > globalnie, a dostęp do wszystkich danych i składowych jest publiczny.
    > Jeśli chciałeś podać przykład za C (za tym stylem) to ci nie wyszło.
    > Brak podziału na prywatny/publiczny (w dowolny paradygmacie, czy to
    > stary modularnym, czy obiektowym) odbiera ci swobodę (w pr. małym) lub
    > blokuje *w wielkim projekcie) możliwość ulepszenia lokalnej
    > implementacji bez zmiany interfejsu.
    > Zostaje żmudna ręczna robota.
    > Wracając do optymalizacji, znasz takie słowo "gówna lepiej nie ruszać" -
    > to m.in. o programowaniu w całości na globalach. Ulepszanie zwykle nie
    > następuje.
    >
    > ścinam się czasem z gośćmi którym się wydaje, że reprezentują
    > proceduralny styl pisania. Z tym że nie wiedzą, co to naprawdę jest, że
    > też zawiera podział na publiczne i prywatne. Trzeba by sie odwołać do
    > książek z lat 70-tych i sobie powtórzyć.

    Czy ja gdzieś napisałem co popieram i co reprezentuję?
    Nie zrozumieliśmy się kompletnie. Zwróć uwagę że mój post był w
    kontekście "jeśli koniecznie ktoś chce wyuzdać kod" a nie
    w kontekście dobrego systematycznego programowania. W takim
    kontekście w ogóle nie istnieje pojęcie "konserwacji kodu", bo
    programista przedkłada przyspieszenie o 1% nad eleganckim
    zapisem. Co się da to poprawiasz a jak już zabrnąłeś za
    daleko to idzie w kosz i piszesz na nowo. Nie jestem zwolennikiem
    czegoś takiego, ale niektórzy tak chcą robić - pozostaje im życzyć
    dobrej zabawy. Są nawet organizowane różne zawody takich programów,
    wszystkie źródła które czytałem były napisane globalnie. Np.
    były programy samo-modyfikujące się w asemblerze. Samo-modyfikacja
    była wprowadzana po to żeby zaoszczędzić 1 bajt (słownie jeden bajt)
    na rozmiarze kodu wynikowego.

    Zdrowia

    --
    Wysłano z serwisu Usenet w portalu Gazeta.pl -> http://www.gazeta.pl/usenet/


  • 100. Data: 2009-05-23 21:59:51
    Temat: Re: jak napisać szybki program
    Od: Maciej Sobczak <s...@g...com>

    On 20 Maj, 14:32, A.L. <a...@a...com> wrote:

    > >Czyli cały czas mówimy o użyciu współbieżności w celu lepszego
    > >wykorzystania zasobów sprzętowych. Powtórzę: to nie jest wyłączna
    > >cecha AIO. Współbieżność jest narzędziem bardziej ogólnym.
    >
    > .. i uzycie jej nie gwarantuje automatycznie poprawienia sprawnosci...
    >
    > http://www.ddj.com/go-parallel/article/showArticle.j
    html?articleID=21...

    Co to ma do obliczeń wykonywanych równolegle z I/O?

    --
    Maciej Sobczak * www.msobczak.com * www.inspirel.com

strony : 1 ... 9 . [ 10 ] . 11


Szukaj w grupach

Szukaj w grupach

Eksperci egospodarka.pl

1 1 1

Wpisz nazwę miasta, dla którego chcesz znaleźć jednostkę ZUS.

Wzory dokumentów

Bezpłatne wzory dokumentów i formularzy.
Wyszukaj i pobierz za darmo: