CYFROWY BARON • PROGRAMOWANIE • Zobacz wątek - Pomoc przy optymalizacji funkcji

Pomoc przy optymalizacji funkcji

dział ogólny

Re: Pomoc przy optymalizacji funkcji

Nowy postprzez polymorphism » środa, 20 kwietnia 2011, 14:33

A co jeśli wyszukiwana wartość JEST pusta ?

To znaczy, że niczego nie szukasz - to nie jest błąd.

A jeśli string nie spełnia kryteriów to błąd MUSI być,

A co w Twoim rozumieniu znaczy nie spełnia kryteriów? Jedynym przypadkiem, kiedy funkcja mogłaby rzucić wyjątkiem, jest sytuacja, gdy start_string lub end_string będą puste.
C++ Reference - opis wszystkich klas STL-a i funkcji C.
Avatar użytkownika
polymorphism
Doświadczony Programista ● Moderator
Doświadczony Programista ● Moderator
 
Posty: 2156
Dołączył(a): piątek, 19 grudnia 2008, 13:04
Podziękował : 0
Otrzymał podziękowań: 200
System operacyjny: Windows 8.1
Windows 10
Linux Mint 21.1
Kompilator: Visual Studio
Visual Studio Code
MSYS2 (MinGW, clang)
g++
clang
Gadu Gadu: 0
    Windows XPFirefox

Re: Pomoc przy optymalizacji funkcji

Nowy postprzez polymorphism » środa, 20 kwietnia 2011, 14:39

Kod: Zaznacz cały

MessageBox::Show(Data::Get()->Find_Between("Test uaktualnienia systemu aktual XP nie wykrył niezgodności ani problemów.", "uaktualnienia", "aktual"));

return search_data->Substring(s1, s2 - s1);

Efekt: "u"

To jest niemożliwe. Pokaż funkcję, która daje taki wynik.


--- dodane ---

Tu masz ten sam kod, tylko napisany w C++:
KOD cpp:     UKRYJ  
string Find_Between(const string &search_data,
                                const string &start_string,
                                const string &end_string)
{
        int s1 = search_data.find(start_string);
        if(s1 == string::npos)return "";
        s1 += start_string.size();

        int s2 = search_data.find(end_string, s1);
        if(s2 == string::npos)return "";
        return search_data.substr(s1, s2 - s1);
}
 

Działa zgodnie z założeniami. Na 99% wina jest po Twojej stronie.
C++ Reference - opis wszystkich klas STL-a i funkcji C.
Avatar użytkownika
polymorphism
Doświadczony Programista ● Moderator
Doświadczony Programista ● Moderator
 
Posty: 2156
Dołączył(a): piątek, 19 grudnia 2008, 13:04
Podziękował : 0
Otrzymał podziękowań: 200
System operacyjny: Windows 8.1
Windows 10
Linux Mint 21.1
Kompilator: Visual Studio
Visual Studio Code
MSYS2 (MinGW, clang)
g++
clang
Gadu Gadu: 0
    Windows XPFirefox

Re: Pomoc przy optymalizacji funkcji

Nowy postprzez Cyfrowy Baron » środa, 20 kwietnia 2011, 15:06

Slynx napisał(a):jak to czytam, to Ty w ogóle nie o tym mówisz ; p Ja znalazłem inny błąd, Tobie chodzi o to, że funkcja zwróci index o jeden za duży. Jeśli dobrze zrozumiałem, bo widzę, że na wyjściu pokazujesz przesunięcie znaku o 1 pozycję. Więc się mylisz, bo index to numeracja liczona od 0, a nie od 1, więc to przesunięcie o którym mówisz nie jest potrzebne.


Sugerowałem się funkcją Pos i AnsiPos w C++Builder, która pierwszej literze przyporządkowuje 1 a nie 0 i to przesunięcie jest potrzebne. Funkcja Pos jeżeli nic nie znajdzie to zwraca 0, a IndexOf jak sądzę -1, czyli liczy od 0, a nie od 1. Dlatego u siebie miałem początek od 6 a nie od 5.



Slynx napisał(a):Nie wiem dokładnie czego dotyczy to "nie prawda",

Tyczyło się kodu polymorphism, gdyż nie zauważyłem, że inkrementuje on zmienną s1 o długość start_string



Slynx napisał(a):
Kod: Zaznacz cały
MessageBox::Show(Data::Get()->Find_Between("Test uaktualnienia systemu aktual XP nie wykrył niezgodności ani problemów.", "uaktualnienia", "aktual"));
return search_data->Substring(s1 + s3, (s2 - (s1 + s3)));
Efekt: Błąd
return search_data->Substring(s1, s2 - s1);
Efekt: "u"


Wyraz uaktualnienia zawiera w sobie aktual podobnie jak sam wyraz aktual, jednak skoro uaktualnienia to start_string, a aktual to end_string i jeżeli weźmiemy pod uwagę Twój kod:

KOD cpp:     UKRYJ  
int s2 = search_data->IndexOf(end_string, s1);


to mamy tutaj błąd, gdyż s1 nie zostało przesunięte o długość wyrazu start_string, czyli indeks s1 pozostaje na literze u z wyrazu uaktualnienia, i wyraz aktual zostaje odnaleziony w wyrazie uaktualnienia powinno więc być:

Kod Slynx:
KOD cpp:     UKRYJ  
 String^ Data::Find_Between(String^ search_data, String^ start_string, String^ end_string)
 {
   int s3 = start_string->Length;

   int s1 = search_data->IndexOf(start_string);
   int s2 = search_data->IndexOf(end_string, s1 + s3);

   return search_data->Substring(s1 + s3, (s2 - (s1 + s3)));
 }


Kod polymorphism powinien jednak działać dobrze, gdyż s1 jest przesuwane:

KOD cpp:     UKRYJ  
        s1 += start_string->Length;  
        int s2 = search_data->IndexOf(end_string, s1);


Pozostaje więc pytanie, czy drugi argument funkcji IndexOf to na pewno numer indeksu od którego zaczyna się przeszukiwanie. Jeżeli nie to proponowałbym taki kod:

KOD cpp:     UKRYJ  
String^ Data::Find_Between(String^ search_data, String^ start_string, String^ end_string)
{
        int s1 = search_data->IndexOf(start_string);
        if(s1 == -1) return "";
        s1 += start_string->Length;
       
        search_data = search_data->Delete(0, s1); /* skracam łańcuch znak o to co przed poszukiwanym teksem */
       
        int s2 = search_data->IndexOf(end_string);

        if(s2 == -1) return "";

        return search_data->Substring(0, s2);
}
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4716
Dołączył(a): niedziela, 13 lipca 2008, 15:17
Podziękował : 12
Otrzymał podziękowań: 442
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    Windows XPFirefox

Re: Pomoc przy optymalizacji funkcji

Nowy postprzez polymorphism » środa, 20 kwietnia 2011, 15:14

Pozostaje więc pytanie, czy drugi argument funkcji IndexOf to na pewno numer indeksu od którego zaczyna się przeszukiwanie.

No tak. Wystarczy zajrzeć do dokumentacji, opis drugiego parametru to: The search starting position.
C++ Reference - opis wszystkich klas STL-a i funkcji C.
Avatar użytkownika
polymorphism
Doświadczony Programista ● Moderator
Doświadczony Programista ● Moderator
 
Posty: 2156
Dołączył(a): piątek, 19 grudnia 2008, 13:04
Podziękował : 0
Otrzymał podziękowań: 200
System operacyjny: Windows 8.1
Windows 10
Linux Mint 21.1
Kompilator: Visual Studio
Visual Studio Code
MSYS2 (MinGW, clang)
g++
clang
Gadu Gadu: 0
    Windows XPFirefox

Re: Pomoc przy optymalizacji funkcji

Nowy postprzez Slynx » środa, 20 kwietnia 2011, 15:16

To znaczy, że niczego nie szukasz - to nie jest błąd.


Chyba nie rozumiesz. Ja przeszukuje string w poszukiwaniu KAŻDEJ wartości, której nagłówek jest mi potrzebny. Może lepiej na przykładzie:
Kod: Zaznacz cały
String^ s = yyx <header = "cos"; value = "">

// Wtedy zapisze jako Find_Beetewen(s, "\"; value = \"", "\">");

Czy to będzie poprawne ? Tak. Czy wyrażenie jest błędne ? Nie, bo nie wiem czy value będzie miało jakąś wartość czy nie. To się okaże podczas pracy programu, a funkcja nie może interpretować pustego ciągu jak błędu, a błędu jako pusty ciąg, a Twój zapis właśnie to oznacza.

A co w Twoim rozumieniu znaczy nie spełnia kryteriów? Jedynym przypadkiem, kiedy funkcja mogłaby rzucić wyjątkiem, jest sytuacja, gdy start_string lub end_string będą puste.

lub end_string występuje przed start_string.
W przypadku mojego programu takie szczegóły są bardzo ważne. Funkcje Find_Beetwen są najczęściej zagnieżdżanie. To nie takie proste jak mówisz, bo wartości są nie do przewidzenia. Np. co jeśli oprócz wartości również nagłówek ma inną nazwę ? Co jeśli wcześniej występuje nazwa nagłówka + wartość, ale nie tak która jest potrzebna ? A ja muszę się tym zając, znaleźć i wyciąć to co odpowiednie, bo pomyłka oznacza błąd w całości. Szczegółów nie będę przybliżał.
Teraz mam problem z tym, że jak przeprawiłem tą funkcję by działa poprawnie, to przestała działać inna funkcja, która ją wykorzystywała, bo jak się okazało, ten błąd był "korzystny".

To jest niemożliwe. Pokaż funkcję, która daje taki wynik.


KOD cpp:     UKRYJ  
                String^ Data::Find_Between(String^ search_data, String^ start_string, String^ end_string)
                {
                        int s1 = search_data->IndexOf(start_string);
                        int s2 = search_data->IndexOf(end_string, s1);
                        int s3 = start_string->Length;
                        return search_data->Substring(s1, s2 - s1);
                        //return search_data->Substring(s1 + s3, (s2 - (s1 + s3))); // to należy do mnie, na górze jest Twój "return"
                }
                MessageBox::Show(Data::Get()->Find_Between("Test uaktualnienia systemu aktual XP nie wykrył niezgodności ani problemów.", "uaktualnienia", "aktual"));
// efekt = "u";
 
Avatar użytkownika
Slynx
Mądrosław
Mądrosław
 
Posty: 350
Dołączył(a): piątek, 17 grudnia 2010, 21:59
Podziękował : 11
Otrzymał podziękowań: 0
System operacyjny: Windows 7 32
Kompilator: Visual C++ 2005; Visual C++ 2008; Visual C++ 2010; Visual C# 2010;
Gadu Gadu: 0
    Windows 7Chrome

Re: Pomoc przy optymalizacji funkcji

Nowy postprzez Slynx » środa, 20 kwietnia 2011, 15:18

Wyraz uaktualnienia zawiera w sobie aktual podobnie jak sam wyraz aktual, jednak skoro uaktualnienia to start_string, a aktual to end_string i jeżeli weźmiemy pod uwagę Twój kod:

KOD cpp: � UKRYJ �
int s2 = search_data->IndexOf(end_string, s1);


to mamy tutaj błąd, gdyż s1 nie zostało przesunięte o długość wyrazu start_string, czyli indeks s1 pozostaje na literze u z wyrazu uaktualnienia, i wyraz aktual zostaje odnaleziony w wyrazie uaktualnienia powinno więc być:

Dlatego właśnie potem napisałem, że musi być dodane przesunięcie, bo o nim zapomniałem. To był błąd który działał na korzyść programu.
Mam trochę inny problem, ale o tym w nowym temacie, bo to działka sieciowa ;)
Avatar użytkownika
Slynx
Mądrosław
Mądrosław
 
Posty: 350
Dołączył(a): piątek, 17 grudnia 2010, 21:59
Podziękował : 11
Otrzymał podziękowań: 0
System operacyjny: Windows 7 32
Kompilator: Visual C++ 2005; Visual C++ 2008; Visual C++ 2010; Visual C# 2010;
Gadu Gadu: 0
    Windows 7Chrome

Re: Pomoc przy optymalizacji funkcji

Nowy postprzez Cyfrowy Baron » środa, 20 kwietnia 2011, 15:21

Slynx napisał(a):
KOD cpp:     UKRYJ  
                String^ Data::Find_Between(String^ search_data, String^ start_string, String^ end_string)
                {
                        int s1 = search_data->IndexOf(start_string);
                        int s2 = search_data->IndexOf(end_string, s1);
                        int s3 = start_string->Length;
                        return search_data->Substring(s1, s2 - s1);
                        //return search_data->Substring(s1 + s3, (s2 - (s1 + s3))); // to należy do mnie, na górze jest Twój "return"
                }

                MessageBox::Show(Data::Get()->Find_Between("Test uaktualnienia systemu aktual XP nie wykrył niezgodności ani problemów.", "uaktualnienia", "aktual"));

// efekt = "u";

Nie przerobiłeś tego kodu, jak pokazał polymorphism, gdyż u Ciebie zmienna s1 nie jest inkrementowana o długość start_string, powinno być:

KOD cpp:     UKRYJ  
                String^ Data::Find_Between(String^ search_data, String^ start_string, String^ end_string)
                {
                        int s1 = search_data->IndexOf(start_string);
                        int s2 = search_data->IndexOf(end_string, s1);

                      //  int s3 = start_string->Length; - Twoje tutaj zbędne

                        s1 += start_string->Length; // tego Tobie brakuje

                        return search_data->Substring(s1, s2 - s1);

                        //return search_data->Substring(s1 + s3, (s2 - (s1 + s3))); // to należy do mnie, na górze jest Twój "return"
                }
                MessageBox::Show(Data::Get()->Find_Between("Test uaktualnienia systemu aktual XP nie wykrył niezgodności ani problemów.", "uaktualnienia", "aktual"));
// efekt = "u";
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4716
Dołączył(a): niedziela, 13 lipca 2008, 15:17
Podziękował : 12
Otrzymał podziękowań: 442
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    Windows XPFirefox

Re: Pomoc przy optymalizacji funkcji

Nowy postprzez Slynx » środa, 20 kwietnia 2011, 15:23

No tak, przecież mówiłem cały czas o oryginalnym kodzie.
poprawka powinna być w linii
Kod: Zaznacz cały
         int s2 = search_data->IndexOf(end_string, s1 + start_string->Length);

Wtedy działa poprawnie.
---
ale wtedy return musi być mój, bo ten od polymorphisma zwróci coś innego.
Ostatnio edytowano środa, 20 kwietnia 2011, 15:25 przez Slynx, łącznie edytowano 1 raz
Avatar użytkownika
Slynx
Mądrosław
Mądrosław
 
Posty: 350
Dołączył(a): piątek, 17 grudnia 2010, 21:59
Podziękował : 11
Otrzymał podziękowań: 0
System operacyjny: Windows 7 32
Kompilator: Visual C++ 2005; Visual C++ 2008; Visual C++ 2010; Visual C# 2010;
Gadu Gadu: 0
    Windows 7Chrome

Re: Pomoc przy optymalizacji funkcji

Nowy postprzez polymorphism » środa, 20 kwietnia 2011, 15:25

No właśnie Slynx, jak dostajesz kompletny kod, wpierw go sprawdź, a później oceniaj jego działanie. Bezmyślnie skopiowałeś jedną linię i twierdzisz, że mój kod nie działa.
C++ Reference - opis wszystkich klas STL-a i funkcji C.
Avatar użytkownika
polymorphism
Doświadczony Programista ● Moderator
Doświadczony Programista ● Moderator
 
Posty: 2156
Dołączył(a): piątek, 19 grudnia 2008, 13:04
Podziękował : 0
Otrzymał podziękowań: 200
System operacyjny: Windows 8.1
Windows 10
Linux Mint 21.1
Kompilator: Visual Studio
Visual Studio Code
MSYS2 (MinGW, clang)
g++
clang
Gadu Gadu: 0
    Windows XPFirefox

Re: Pomoc przy optymalizacji funkcji

Nowy postprzez Slynx » środa, 20 kwietnia 2011, 15:27

Przecież wstawiłem na początku kod, na którym pracuje. Wskazałeś inny return, więc go wstawiłem. Teraz C.Baron dodaje linijkę sprostowującą kod, tak by działał z Twoim returnem.
To tyle.

---
KOD cpp:     UKRYJ  
              String^ Data::Find_Between(String^ search_data, String^ start_string, String^ end_string)
                {
                        int s1 = search_data->IndexOf(start_string);
                        int s2 = search_data->IndexOf(end_string, s1);

                      //  int s3 = start_string->Length; - Twoje tutaj zbędne

                        s1 += start_string->Length; // tego Tobie brakuje

                        return search_data->Substring(s1, s2 - s1);

                        //return search_data->Substring(s1 + s3, (s2 - (s1 + s3))); // to należy do mnie, na górze jest Twój "return"
                }
                MessageBox::Show(Data::Get()->Find_Between("Test uaktualnienia systemu aktual XP nie wykrył niezgodności ani problemów.", "uaktualnienia", "aktual"));
// efekt = "u";
 

Ten kod C.Baronie nie działa ;p wyrzuca błąd z indexem.
Na wyjściu będzie wartość ujemna.
Avatar użytkownika
Slynx
Mądrosław
Mądrosław
 
Posty: 350
Dołączył(a): piątek, 17 grudnia 2010, 21:59
Podziękował : 11
Otrzymał podziękowań: 0
System operacyjny: Windows 7 32
Kompilator: Visual C++ 2005; Visual C++ 2008; Visual C++ 2010; Visual C# 2010;
Gadu Gadu: 0
    Windows 7Chrome

Re: Pomoc przy optymalizacji funkcji

Nowy postprzez Cyfrowy Baron » środa, 20 kwietnia 2011, 15:33

Ten kod C.Baronie nie działa ;p wyrzuca błąd z indexem.
Na wyjściu będzie wartość ujemna.


Który kod? Bo tyle już ich było...



Slynx napisał(a):ale wtedy return musi być mój, bo ten od polymorphisma zwróci coś innego.


Może być Twój, może być teź kod polymorphism, gdyż obydwa robią dokładnie to samo, tyle, że kod polymorphism jest zoptymalizowany, a o to Tobie chodziło w tym wątku. Poza tym polymorphism dodał w funkcji przerwania, czyli return, który przerywa działanie funkcji, gdy start_string lub end_string niczego nie zwraca. Co prawda polymorphism sugeruje zwracać wtedy pustą wartość, ale przecież równie dobrze można zwracać jakąś wartość umowną, która będzie przez program interpretowana jako błąd, np:

KOD cpp:     UKRYJ  
String^ Data::Find_Between(String^ search_data, String^ start_string, String^ end_string)
{
        int s1 = search_data->IndexOf(start_string);

        if(s1 == -1) return "~error~";  /* zwraca ciąg znaków sugerujących błąd */

        s1 += start_string->Length;
       
        int s2 = search_data->IndexOf(end_string, s1);

        if(s2 == -1)return "~error~";  /* zwraca ciąg znaków sugerujących błąd */

        return search_data->Substring(s1, s2 - s1);
}


Chciałeś optymalizacji kodu i dostałeś ją na ile to możliwe.
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4716
Dołączył(a): niedziela, 13 lipca 2008, 15:17
Podziękował : 12
Otrzymał podziękowań: 442
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    Windows XPFirefox

Re: Pomoc przy optymalizacji funkcji

Nowy postprzez Slynx » środa, 20 kwietnia 2011, 15:44

Mam kilka "ale", jednak nie mam ochoty się kłócić (dyskutować). Pytanie, czy ktoś mógłby to zapisać w postaci wyrażenia regularnego ? Wtedy można by to zapisać w 1-2 linijkach, a szybkość sam sprawdzę.
Nie pamiętam jak to się robi, bo kontakt z wyrażeniami regularnymi miałem raczej mizerny, ale coś w tylu match(start_string*end_string), czy jakoś tak...
Pozostawiam to wam, bo w tej kwestii się nie orientuje.
Avatar użytkownika
Slynx
Mądrosław
Mądrosław
 
Posty: 350
Dołączył(a): piątek, 17 grudnia 2010, 21:59
Podziękował : 11
Otrzymał podziękowań: 0
System operacyjny: Windows 7 32
Kompilator: Visual C++ 2005; Visual C++ 2008; Visual C++ 2010; Visual C# 2010;
Gadu Gadu: 0
    Windows 7Chrome

Re: Pomoc przy optymalizacji funkcji

Nowy postprzez polymorphism » środa, 20 kwietnia 2011, 16:05

Przecież wstawiłem na początku kod, na którym pracuje.

No, i poprawiłem go tak, żeby działał. Gdybyś wziął skopiował i sprawdził cały kod, który podałem, to sprawy w ogóle by nie było, bo byśmy wiedzieli, w którym miejscu jesteśmy.

Wskazałeś inny return, więc go wstawiłem.

Wskazałem returny, których poprawności składniowej byłem niepewny (jeszcze raz: nie znam C++/CLI).
C++ Reference - opis wszystkich klas STL-a i funkcji C.
Avatar użytkownika
polymorphism
Doświadczony Programista ● Moderator
Doświadczony Programista ● Moderator
 
Posty: 2156
Dołączył(a): piątek, 19 grudnia 2008, 13:04
Podziękował : 0
Otrzymał podziękowań: 200
System operacyjny: Windows 8.1
Windows 10
Linux Mint 21.1
Kompilator: Visual Studio
Visual Studio Code
MSYS2 (MinGW, clang)
g++
clang
Gadu Gadu: 0
    Windows XPFirefox

Re: Pomoc przy optymalizacji funkcji

Nowy postprzez Slynx » środa, 20 kwietnia 2011, 16:19

Wskazałem returny, których poprawności składniowej byłem niepewny (jeszcze raz: nie znam C++/CLI).


A co do tego ma składnia ? Przecież składniowo to on był poprawny. Argumenty funkcji substring były błędne i to wszystko.
Ale nie ważne. "Punkt widzenia zależy od punktu siedzenia", więc ja będę mówił o swoim oryginalnym kodzie, a Ty o poprawionej funkcji, więc temat lepiej zakończyć.
Pytałem jeszcze tylko czy ktoś potrafi to zapisać w postaci wyrażenia regularnego.
Porównałem też wydajność tych funkcji. Wszystko jest ok, a wzrost jest bardzo mizerny coś koło 10 milisekund dla miliona wywołań.

Jeszcze trochę pokombinuje, a jak nic nie wymyślę to nowy temat znajdzie się w dziale sieciowym ;)

Dzięki polymorphism i C.Baronie za próbę optymalizacji i znalezienie błędu w kodzie ;)
(Napisałem jeszcze do kilku osób, więc jak będę miał coś co będzie zdecydowanie szybsze - napiszę)
Avatar użytkownika
Slynx
Mądrosław
Mądrosław
 
Posty: 350
Dołączył(a): piątek, 17 grudnia 2010, 21:59
Podziękował : 11
Otrzymał podziękowań: 0
System operacyjny: Windows 7 32
Kompilator: Visual C++ 2005; Visual C++ 2008; Visual C++ 2010; Visual C# 2010;
Gadu Gadu: 0
    Windows 7Chrome

Re: Pomoc przy optymalizacji funkcji

Nowy postprzez Cyfrowy Baron » środa, 20 kwietnia 2011, 16:31

Slynx napisał(a):Argumenty funkcji substring były błędne i to wszystko.


Jak widzę idziesz w zaparte. Argumenty funkcji w kodzie polymorphism były poprawne, ale ty modyfikując swój kod, nie wszystko poprawiłeś. Tak jak ja nie zauważyłeś, że do zmiany stanu zmiennej s1 polymorphism używa inkrementacji zamiast dodawania jak u Ciebie i dlatego funkcja nie zwracała Tobie poprawnego wyniku.
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4716
Dołączył(a): niedziela, 13 lipca 2008, 15:17
Podziękował : 12
Otrzymał podziękowań: 442
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    Windows XPFirefox

Poprzednia stronaNastępna strona

Powrót do Ogólne problemy z programowaniem

Kto przegląda forum

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