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.
Uważaj, bo równie dobrze może to rozwijać praktyczną umiejętność bezrozumnego kopiowania cudzego kodu Jeżeli jednak będziesz ostrożny - dobry pomysł.
Masz niezbyt estetyczny kod. Najbardziej razi mnie klamrowanie w mainie - pierwszy for jest bez wcięć.
Masz funkcję float (na SPOJu używaj raczej double, ale mniejsza teraz o to) więc powinieneś zwracać zmienną tego samego typu, np. 3.14. Tymczasem zwracasz return odl_mix, a odl_mix jest tablicą zmiennych, a nie zmienną! Prawidłowy zapis to np. odl_mix[3] czyli zwracasz konkretną liczbę z całej tablicy.
Intuicja Cię nie zawodzi - błąd jest analogiczny. W związku z tym Tobie zostawiam jego poprawienie
PS
Wszedłem na forum zobaczyć co ciekawego się tutaj dzieje odkąd zniknąłem, ale świat studiów jeszcze przez pewien czas wymusza moją nieobecność więc ewentualne dalsze pytania kieruj do innych. No i powodzenia
PS2
Nie do końca rozumiem skąd biorą się Twoje trudności.
if (x[i]<0) x[i]=x[i]*(-1);
if (y[i]<0) y[i]=y[i]*(-1);
odl[i]= sqrt((x*x)+(y*y));
Pierwsze dwa ify sugerują, że rozumiesz, iż x oraz y są tablicami. Z pewnością masz jakieś pojęcie o tablicach, czego dowodzi zapis int x[liczby-1]. Domyślam się, że odejmowanie jedności związane jest z numeracją od zera - wielki plus, że o tym pamiętasz. Mimo to pierwiastkując niejako zapominasz, że x i y to tablice i zamiast napisać x[i] oraz y[i] napisałeś x i y...
Bardzo dziękuję za szczegółową odpowiedź,
Nic nie kopiuje, póki nie zrozumiem jak i dlaczego działa, ale dzięki za ostrzeżenie!
To prawda, brak mi jeszcze ogłady. Póki co nie wiem co wysuwać, a co przycinać. Mam nadzieję że to przyjdzie z czasem
Tylko że ta funkcja ma właśnie zwrócić tablicę. Tylko nie wiem jak to zapisać. Zawsze mogę zrobić pętle for dla wszystkich elementów tablicy i zwracać je pojedynczo, ale zgaduję że jest jakiś szybszy i łatwiejszy sposób, żeby funkcja zwracała tablicę?
W takim razie tym bardziej dzięki za poświęcony czas
To akurat błąd pozostały z poprzedniej iteracji, zanim sobie przypomniałem że muszę coutować dane wejściowe, a nie tylko odległość od 0,0, Już poprawiłem, dzięki.
Także teraz pozostaje tylko pytanie jak mogę zapisać funkcję, która ma zwracać tablicę, a nie pojedynczego floata?