22 / 29
Mar 2019

witam, mój kod również nie przechodzi, mógłby mi ktoś doradzić
co należałoby zmienić?

unsigned char napis[256];

Treść zadania nigdzie nie wspomina, że każda linia będzie zawierać maksymalnie tyle znaków.

P.S. ilość linii nie jest równoznaczna z ilością wystąpień znaku nowej linii, chociaż z tego co widzę w tym zadaniu ta wiedza Ci się nie przyda, bo nie ma odpowiednich testów.

21 days later

Cześć, program zlicza mi poprawnie (białe znaki i polskie). Dla przykładowych zadań mam taki sam wynik.
Podpowie ktoś w czym problem?
[tu był kod]
thx

Proponuję zmianę warunku w pętli while na:

while ( (c = getchar()) != EOF)

a

(tak, sama literka a, bez żadnego entera)

Zmieniłem ale nie pomogło :frowning:

wydaje mi się że

while ( (c = getchar()) != EOF){

oraz

while(c!=-1){
	c=getchar();

działa tak samo (EOF == -1)

Dla samej literki “a” miałem:
10 1
97 1
Rozumiem że chodziło ci o to że nie potrzebnie zliczam koniec linii. Zmieniłem i teraz mam:
97 1
Niestety dalej nie działa :frowning:

PLEASE HELP

Po zmianie else w while w Twoim poprzednim kodzie, żeby wychodziło z pętli zamiast zliczać koniec linii mam AC. Wstaw aktualny kod.

Dziękuję za pomoc już AC.

PS W opisie zadania w obu wyjściach jest błąd:
10 2 - w opisie
10 1 - na Ideone dla zaakceptowanej wersji programu.

Nie, nie ma. Testujesz dla innego testu.
dane mogą być postaci [i takie są w treści zadania]:

pierwsza linia tekstu[ENTER]
druga linia tekstu[ENTER]
....
ostatnia linia[ENTER]
[EOF]

lub, i właśnie podejrzewam, że taki jest twój test na ideone:

pierwsza linia tekstu[ENTER]
druga linia tekstu[ENTER]
....
ostatnia linia[EOF]

Masz rację, zrobiłem copy paste danych wejściowych ze spoj do Ideone. Ostatni enter się nie kopiuje, trzeba go zrobić ręcznie.
Potem na siłę modyfikowałem kod żeby się zgadzało ehhhh.
Thx

Lub zaznaczając obszar do kopiowania, przeciągnąć zaznaczenie do linii poniżej :wink:

6 months later

Witam serdecznie. Podpowie ktoś dlaczego na ideone nie zlicza w ogóle polskich znaków ?
Przy przykładzie z zadania zlicza do 122 kodu ASCII i na tym kończy.

Żeby zliczało Ci polskie znaki musisz zadeklarować wchar_t a nie zwykły char

Na pewno to istotne, zatem dziękuję. Zmieniłem na typ wchar_t, lecz niestety to tylko pogorszyło sprawę.

Spróbuj z takim warunkiem pętli
while((znak=getchar())!=EOF)

Dziękuję, to wszystko załatwiło. Straszne z mojej strony, że nie wpadłem na to EOF. Wydawało mi się, że to nie jest takie istotne, od teraz to na zawsze zapamiętam :slight_smile:

9 months later

Piszę w Pythonie pomoże mi ktoś zrozumieć dlaczego ten kod źle działa ?
https://ideone.com/OJcack6
dwie ostatnie cyfry nie zgadzają się z odpowiedziami ze SPOJ doszedłem do tego że to ę i ó pomoże mi ktoś zrozumieć dlaczego tak jest?

—Uwaga mogą być tutaj małe przekłamania w tym co piszę, ale idea będzie słuszna.—
To skomplikowane… Otóż litera “ę” (i inne polskie znaki) nie znajdują się w tabeli kodów ASCII. Wiele języków programowania (w tym C++), szczególnie mających początki “dawno temu” nie obsługuje standarowo kodów spoza tabei ASCII (trzeba odpowiedniego typu lub biblioteki, w zależności od języka). Python jednak domyślnie pracuje w UTF-8 i pozwala na wprowadzenie wszystkiego. Jeśli jako linię podasz coś takiego:
ϨϨϨϨϨϨ
to bez problemu wyświetli Ci, że to sześć znaków o kodzie 1000. Niemniej w kodach ASCII nie ma kodów większych niż 128 lub 255 (w zależności od tego ilo bitowy jest znak). C++ nie wyświetli “od tak”, że to 1000. Wyświetli, że jest to:
168 6
207 6
Taki też ten znak (Ϩ = 168 207) ma numer jeśli do dyspozycji mamy tylko kody ASCII. Czyli problem jest taki, że Python obsługuje domyśłnie cały Unicode (i bardzo dobrze, ale nie pomaga to w tym zadaniu).

Teraz pytanie jak to obejść? Pewnie istnieje jakiś “jeden prosty trick, programiści go nienawidzą!”. Ja go nie znam. Znam trick “na około”, a mianowicie jak zapiszesz nieszczęsny znak “Ϩ” w pliku o nazwie “some_file.txt” i zrobisz tak:

with open('some_file.txt', 'r') as file:
    my_str = file.read()
    lista = [ord(x) for x in my_str]
    print(lista)

to wyświetli Ci się [207, 168]. Teraz jak dobrze przeszukasz internet to znajdziesz jak udać, że napis (np, pobierany od użytkownika) jest plikiem (dokładnie: opakować w plik bez tworzenia go), a później odczytasz też plik tak jak powyżej. Nie jest to łatwe.