21 / 39
Jul 2018

Witam, nie jestem w stanie zrozumieć dlaczego pojawia się błąd SIGSEGV. Wiem, że jest to najprawdopodobniej błąd związany z odwołaniem się do nieistniejącego miejsca w tablicy, ale nie mogę zlokalizować owego błędu w kodzie.

Link do kodu: https://ideone.com/LaYvAe63

  • created

    Aug '17
  • last reply

    Oct '20
  • 38

    replies

  • 2.3k

    views

  • 14

    users

  • 6

    likes

  • 11

    links

while(cin>>imie>>nazwisko>>tekst>>data)
cin pobiera znaki aż do napotkania spacji, tabu, lub znaku nowej lini, przez co Twoje zmienne wyglądają dla pierwszego przykładu tak:
imie = Imie:
nazwisko = Roman;
tekst = Nazw:
data = Kowalski6;

Ok, czyli jednak między Imie: Roman jest jednak spacja, zastanawiałem się nad tym, ale doszedłem do wniosku, ze jej tam nie ma. Dziękuje za pomoc.

edit:Niestety nie to było przyczyną problemu z blędem SIGSEGV. Kod wygląda teraz tak. https://ideone.com/VfjR2626

Na razie rada nr. 1 - przeczytaj uważnie treść zadania :slight_smile:
a potem pomyśl jakie inne błędy mogą wystąpić poza tymi, które przewidziałeś

A jaka jest rada nr. 2? Czytałem to zadanie już bardzo dużo razy i jeśli to jest nawet coś oczywistego to mogłem tego nie zauważyć i wątpię, aby mi się to udało. Czy mógłbyś mi przynajmniej powiedzieć, która część kodu kuleje?

Dodatkowo, robiąc parę testów zauważyłem, że dla przykładów:

Imie: Marcin; Nazwisko: Kowal; Data ur.: 1900-0+-01 oraz
Imie: Marcin; Nazwisko: Kowal; Data ur.: 1900-01-01 w obu przypadkach dostaję wartość 1, kiedy w pierwszym powinienem dostać 2, a w drugim 3. Sugeruje to jakiś problem z weryfikacją nazwiska, ale nie mogę ogarnąć jaki.

Czy chodzi Ci o ten fragment:
"poprawne nazwiska zaczynają się od wielkiej litery, po której następują małe litery;"
W komentarzu pod zadaniem jest takie coś:
W opisie jest błąd dotyczący opisu poprawności nazwiska, aby dostać AC należy założyć, że poprawne nazwisko to takie, które zaczyna się z dużej litery, po której MOGĄ wystąpić małe litery.

No i tym się zasugerowałem.

zakładając, że komentarz jest prawdziwy, to co należy sprawdzić ?

ale również pomyśl o innych możliwych błedach

Nie widzę, więc póki co zajmę się jakimś innym zadankiem, a potem wrócę.

10 months later

Cześć. Próbuję rozwiązać zadanie Formularz, stosowałem rady innych na forum, ale nadal nie zalicza mi zadania. Czy mógłby ktoś pomóc. Kod w c++:

Nie wiem czy dobrze rozumiem - tekst wczytywany przez sędziego jest analogiczny do tego co w przykładzie(Imie: Roman; Nazwisko: Kowalski6; Data ur.: 1900-01-30), czyli ważne są średniki, i myślniki, czy mam to sprawdzać? Albo coś przeoczyłem w kodzie. Proszę o pomoc :slight_smile:

test:
Imie: Z; Nazwisko: Za; Data ur.: 1900-1–30

A mi u matfila wyświetla 3-kę (tam są dwa myślniki po 1ce, przy kopiowaniu czemuś je skleja).

Ok, teraz dobrze chociaż nie wiem czy są takie testy.
Natomiast @matfil z pewnością skasuj to system("pause");. Nie wiem czy może zaburzyć wynik, ale z pewnością nie powinno tego być (jak Twój kurs c++ twierdzi inaczej to zmień kurs :P)

Edit…
ale z pewnością taki może być:
Imie: Z; Nazwisko: Za; Data ur.: 1900-1a-30
(zmiana myślnika na dowolny inny znak też Ci daje 3 co już raczej nie powinno się zdarzyć)

@yula
Trzeba wklejać jako kod, one (dwa myślniki) się sklejają także w wordzie więc pewnie to domyślne formatowanie.

Będę wiedzieć na przyszłość, a przynajmniej zwracać na to uwagę :slight_smile: I tak, poprawienie tego błędu dało mi AC kodem @matfil

Super :slight_smile: dziękuję bardzo postaram się poprawić błędy, teraz już nie wypisuje 3 w przykładzie Imie: Z; Nazwisko: Za; Data ur.: 1900-1a-30 , czy Imie: Z; Nazwisko: Za; Data ur.: 1900-1–30 , ale sędzia nadal nie przyjmuje

a co zrobiłeś? Zastanowiłeś sie dlaczego to wypisywało ?

@yula
Teraz sprawdza czy MM i DD jest liczbą za pomocą kodu ascii, chyba to mieliście na myśli podając przykład Imie: Z; Nazwisko: Za; Data ur.: 1900-1a-30

a rok to nie ma cyferek :wink:

Tak, dokładnie o to chodziło, tyle że nie tylko MM i DD składa sie z cyferek :smiley:

Ja należę do ludzi leniwych i stwierdziłem, że jak sprawdzę czy rok jest między 1900 a 2000 to nie muszę już sprawdzać, czy są to tylko cyferki :smile:
Niestety nadal nie działa :C

sprawdz dokładnie, dodałam tylko sprawdzenie cyfr przy roku i jest AC. Przed chwilą sprawdziłam jeszcze raz

Dziwna sytuacja, ten sam kod wysłałem do sędziego z innym kompilatorem i działa :slight_smile: c++ gcc 6.3 <- działa, a c++ g++ 4.3.2 już nie. Dziękuję za pomoc, ważne że zaliczone :smiley:

23 days later

Serio wystarczy sprawdzać ciny? A co jeśli ktoś się nazywa Róża Maria Barbara Fürstin von Thun und Hohenstein z domu Woźniakowska

To nazywa się na ponad 10 znaków:

PS
Nim skrytykujesz konstrukcje typu while(cin>>bzdeta>>II>>bzdeta>>NN>>bzdeta>>bzdeta>>RRRRMMDD) i inne kwiatki promowane tym zadaniem:

  1. na starym forum był temat o zaletach i wadach SPOJa. Na tym może go nie być więc… nie ma 1) :wink:
  2. są trudniejsze zadania na sprawdzanie treści cinów, np. https://pl.spoj.com/problems/HANG/2 albo https://pl.spoj.com/problems/EIE4/4
  3. to są zadania łatwe
  4. SPOJ jest dla samego rozwiązywania zadań a nie po to by sobie zadanko po zadanku tworzyć własne oprogramowanie komercyjne (czy jakiekolwiek inne)
  5. w realu tego rodzaju przypadki i ich obsługa to prawdziwa magia i nie ma na to doskonałego sposobu. Cytując klasyka:

Źródło znajdziesz sam :wink:

Z tego co się zdążyłem zorientować to zadania na spoju bazują głównie na wyjątkach :wink: Tzn sędzie nie sprawdza “normalnych” przypadków tylko zawsze jakieś skrajności o których normalny człowiek by nie pomyślał nawet :wink: Trzeba brać pod uwagę wszelkie możliwe przypadki.

P.S czy Twój nick jest zaszyfrowany jakimś kodem Cezara? Bo mam trudności z jego odczytaniem nie mówiąc o zapamiętaniu :wink:

Z tego co zdążyłem zauważyć sprawdza najczęściej i to i to w celu potwierdzenia, że program działa. Spróbuj przejść jakiekolwiek zadanie obsługując tylko skrajne przypadki, a nie obsługując normalnych. W danym teście może być i milion przypadków testowych, a w nich te “normalne” i te “o których normalny człowiek by nie pomyślał”.

Zgadza się, nie tylko na spoju.

Ja już tyle razy łamałem sobie na nim język, że już znam na pamięć. Teraz to mógłbym zmienić hasło na poczcie na jego nick gdyż piszę go bez zastanowienia :slight_smile:
//test:
@tarpauwatratar @tarpauwatratar @tarpauwatratar
//ok bez problemów.

Byle by nie dojść do jednego wielkiego try-catcha albo innych cudów typu “wykryto zgon użytkownika programu - program wyłączy się bo RODO” w ramach tych brań pod uwagę. Dowód przez nerdowski humor: http://roflcopter.pl/657.html6 .

W dużym skrócie i pomijając (nudną) historię mojego dzieciństwa - tak. Nick miał wyglądać inaczej, ale zapis “fonetyczny” był najprostszy a brzmi wg mnie ciekawie.

To chyba moja największa zasługa na tym forum - ludzie mają fajne hasło do poczty. Gorzej, jak za kilka lat ktoś uwzględni ten nick w atakach słownikowych…

Nazwiska [i imiona] mogą być różne, ale w tym zadaniu zasady są określone. Możesz po uzyskaniu AC [albo przed] wymyśleć swoje własne i nie ma znaczenia jak będziesz wczytywał. Czy cin’em czy getline’m. Jeżeli w taki sposób rozszerzysz swoje rozwiązanie, a mimo to dostaniesz nim AC, to brawo Ty. I powtórzę. Zostań problemsetterem, a przestaniesz się męczyć cudzymi problemami. Zaczniesz swoimi własnymi. [taki żarcik :wink: ]

Na koniec. Proszę, koniecznie sprawdź w wikipedii!!:

Joanne O’Riordan.

Potem, możesz obejrzyć film z jej udziałem: No limbs no limits. Ten film powinien Cię zainspirować bardziej niż wszelkie wideokursy programowania i nie tylko.

Chyba …
Może nie mniejszą, są twoje wyjątkowe zdolności w zachęcaniu i umacnianie mnie w coraz większej chęci tylko czytania forum z pożytkiem dla wszystkich zainteresowanych, a szczególnie dla mnie.

Ależ Ty mnie się czepiasz. Nie wykluczam układania zadań. Ale jeszcze nie teraz, póki co staram się podskoczyć w rankingu bo pozycja w 7 setce nie satysfakcjonuje mnie :wink: Zadanie są w porządku jak dla mnie. Ważne jednak aby było jasno i jednoznacznie przekazane co autor miał na myśli. Bo później człowiek się zastanawia czy ma zły kod czy niewłaściwie interpretuje treść zadania.
Bardziej od dziewczynki Joanne jednak zainspirował mnie Wim Hof. Jestem już po dwóch zimnych prysznicach :wink:

zostań programistą, wtedy już przy pierwszym kontakcie z klientem zamawiającym oprogramowanie stwierdzisz, że zadania na spoju były wyjątkowo jasne i jednoznaczne :slight_smile:

6 months later

Mam pytanie co do poprawności daty.

W zadaniu jest napisane “w poprawnej dacie pole RRRR jest liczbą całkowitą z zakresu 1900-2000,
pole MM jest liczbą całkowitą z zakresu 1-12, a pole DD liczbą całkowitą z zakresu 1-31;”

Pytanie, czy to są poprawne daty:
2005-02-29 <-- (2005 nie jest rokiem przestępnym)
2000-04-31

PS Wybaczcie jeżeli było już pytane ale jest 5 wątków dotyczących tego zadania…

Są poprawne. Nie trzeba się przejmować różnymi liczbami dni w miesiącach ani latami przestępnymi.

1 year later

Dla kogoś kto by szukał dlaczego ma WA, tak jak ja przed chwilą:
Imię musi zaczynać się z dużej litery,
Nazwisko musi zaczynać się z dużej litery,
To są jedyne warunki jeśli chodzi o wątpliwość, czy po pierwszej literze ma się coś znajdować - nie musi.
Imie: Z; Nazwisko: Z; to poprawne dane.
Co do długości, tego nie jestem pewien, w swoim rozwiązaniu mam to zawarte.

Piszę to, ponieważ opis zadania wydawał mi się nie jasny. No chyba, że jestem głupi (całkiem prawdopodobne).

Cytat z treści zadania: "… poprawne imiona zaczynają się od wielkiej litery, po której mogą nastąpić małe litery;" - nie rozumiem, co tu jest niejasne, czy to nie to samo co napisałeś, a może to ja jestem głupi?
Jeżeli to zadanie jest nie jasne, to co powiesz na przykład o tych przygodach informatyka8 lub którychś z wcześniejszych :wink: .

Według mnie niejasny jest fragment: poprawne nazwiska zaczynają się od wielkiej litery, po której następują małe litery;
Zrozumiałem to w ten sposób, ze poprawnym nazwiskiem jest takie, które posiada pierwsza wielka literę, a kolejne muszą być małymi literami, czyli sytuacja, w której nazwisko to AbAb by odpadała.

:wink:

“…poprawne imiona zaczynają się od wielkiej litery, po której MOGĄ
nastąpić małe litery” - to DOKŁADNY cytat. Chyba jaśniej nie może być napisane, chociaż prawdę mówiąc, to nawet gdyby treść zadania była w Twojej wersji to też brałbym pod uwagę możliwość imion z zerową liczbą małych liter.

Masz rację, nie zmienia to jednak mojego poglądu na sprawę.

Jasne, w pełni się zgadzam co do imienia. Chyba trochę źle napisałem pierwszego posta. Mój jedyny problem dotyczył właśnie nazwiska, a zabrzmiał on jakby chodziło o całe zadanie.