Mam tylko nadzieję, że to nie ja - może kiedyś coś na ten temat napisałem?
Używanie pair zamiast odpowiedniej struktury, na pewno powoduje, że program jest dużo mniej czytelny, ale jest co najmniej jeden powód używania pair i zagnieżdzonych pair<pair<> >.
Dzięki nim [pair ...], możemy użyć sortowania z STL [sort(....begin(), ..,.end())] bez pisania własnej funkcji porównującej.
W dyskutowanym programie jednak to niestety nie występuje.
Witam! Problem nad którym się głowie już trochę czasu według SPOJ-a przekraczam dozwolony obszar pamięci(SIGSEGV) . Ale kompletnie nie wiem kiedy. Tablice dynamiczne tworze na początku pętli ilości testów do wykonania a na jej końcu uwalniam obszar pamięci. Dla jednego testu program nie sypie się, natomiast na 2 już tak, sortuje, wypisuje prawidłowo ale jak by miał problem z uwalnianiem pamięci i nie rozumiem tego CRASHA. Prosze o pomoc. Oto moj kod http://ideone.com/yAIlHV15.
Zauważyłem , niepotrzebnie alokowałem pamieć gdy ilość punktów była równa 1. Poprawione. Ale SPOJ dalej to samo SIGSEGV, a robiłem różnorodne testy i wychodzą pozytywnie. Jakieś dalsze wskazówki? Poprawiony kod wraz z testem http://ideone.com/yAIlHV25 .
Witaj. Rozumiem, że jesteś początkujący, ale twój kod jest strasznie nieczytelny i nikt nie będzie miał ochoty go "debugować". Zadanie przekombinowałeś. Spróbuj go napisać bez wskaźników(tutaj na pewno leży błąd) używając klasy std::vector z biblioteki standardowej. Jeżeli wiesz co to programowanie obiektowe, spróbuj połączyć koncepcje w klasy.
Cześć, proszę o pomoc, mógłby ktoś wskazać błąd oto mój kod: http://ideone.com/pWLded31. Dzięki : )
a tu był twój kod z zestawem danych35 i błędną odpowiedzią
dzień dobry. Ja dość nietypowo bo program jakimś cudem przeszedł mi za pierwszym razem a ja nie rozumiem, jakim prawem. Wydawało mi się, że wczytanie łancucha w sposób jaki to zrobiłem nie powinien działać. Kombinowałem z cin.get(), cin.getline () ale kompilator tego nie przepuszczał, albo po podaniu liczby testów przeskakiwał do wyświetlania tabeli i wypłenią ją zerami.
Ogóle wracam do programowania po ponad roku przerwy. Czy ktoś mógłby rzucić okiem, powiedzieć co można jeszcze usprawnić
W takim razie na razie nie myśl o usprawnieniach tylko myśl jakim prawem
Na razie nie usprawnienia [może kiedyś, jak już będziesz wiedział jakim prawem] ale takie małe uwagi:
- W ideone, można i należy wklejać w okienko input [wejście] dane wejściowe - test, a potem sprawdzać poprawność wyników w okienku stadout [wyjście].
- gdy: "..gdzie nazwa jest unikalnym dla każdego testu ciągiem co najwyżej 10 liter.." to zwiększaj tablicę przynajmniej o jeden [na'\0'] a nigdy nie zmniejszaj jej pod żadnym pozorem
- cin >> t1[j].ch >> t1[j].x >> t1[j].y; jest tu jak najbardziej poprawne i prawidłowe i można to napisać w jednej instrukcji. Dodatkowo, jest [cin] na tyle inteligentne, że wie samo co i jak zrobić, w przeciwieństwie do niektórych programistów [soryy tak mi się jakoś napisało,mam nadieję, że się nie obrazisz
]
- zamiast: t1.odl = sqrt(t1.x*t1.x + t1.y*t1.y);
można: t1.odl = hypot(t1.x, t1.y); <-- zobacz np w wiki co robi hypot(...) - do sortowania, nie konieczna jest znajomość dokładnej odległości - wystarczy np kwadrat tej wartości - wtedy zamiast na double, można liczyć ją na intach i bez liczenia sqrt. [ani hypot]
- sortowanie jakie jest każdy widzi [a może sort z STL?]
- structura [klasa] + metoda? [liczenie odległości] - ale to może plany jeszcze nie na dzisiaj.
Ok dzięki.
3. Ok. Ale załóżmy, ze nazwa punktu może być dwuelementowa- oddzielona spacją. Wtedy trzeba użyć cin.getline () albo cin.get(). No ale wtedy program nie działa
6. Tu wiem. Nad qsortem muszę jeszcze trochę posiedzieć. Co do funkcji sort z STL, jasne ze mogłem jej użyć ale sortowanie wydaje mi się na tyle fundamentalnym algorytmem, ze chyba lepiej kilka razy napisać go samemu.
Dzień dobry.
Mógłby ktoś zerknąć i wskazać błąd?
Robiłem różne testy i zawsze wyświetlało poprawne wyniki, jednak SPOJ odrzuca rozwiązanie.
Proszę o pomoc. Sędzia daje WA. Wydaje mi się że kod jest w porządku, męcze się i nie mogę znaleźć błędu. Z góry dzięki za pomoc. Link: http://ideone.com/fActwb10
Witam, rzuci ktoś okiem na moje rozwiązanie ?
Proszę o podanie danych wejściowych, które dają błędne rozwiązanie
http://ideone.com/KORg9i13
Dopiero zaczynam nauke kodowania, więc mój kod jest bardzo prymitywny, za co przepraszam. Biorę się za zadania powyżej mojego poziomu, ponieważ wierzę że to rozwija praktyczne zrozumienie kodowania. Także bez zbędnego przedłużania, będę bardzo wdzięczny za zerknięcie na mój kod i wyjaśnienie mi, dlaczego C++ uważa że próbuję zrobić w funkcji wskaźniki, mimo że nigdzie mu nic takiego nie sugeruję:
Błąd przy próbie kompilacji:
error: cannot convert 'float*' to 'float' in return
if (n==0) return odl_mix;
Mile widziane także opinie dot komunikatu:
error: invalid operands of types 'int [liczby]' and 'int [liczby]' to binary 'operator*'
odl[i]= sqrt((x*x)+(y*y));
Mam wrażenie że wynika to z podobnego błędu, ale nie jestem pewny.
Z góry dzięki za wszelką pomoc.