Forum Coders' city Strona Główna Coders' city
Nasza pasja to programowanie!
 

 PomocPomoc   SzukajSzukaj   UżytkownicyUżytkownicy   GrupyGrupy  RejestracjaRejestracja 
Archiwum starego forum + teoria    RSS & Panel/SideBar
 ProfilProfil   Zaloguj się, by sprawdzić wiadomościZaloguj się, by sprawdzić wiadomości   ZalogujZaloguj 

Potrzebuję szybkiej odpowiedzi na moje pytanie... Zasady

Chyba zły kod w książce



 
Odpowiedz do tematu    Forum Coders' city Strona Główna -> Algorytmy + inżynieria oprogramowania
Zobacz poprzedni temat :: Zobacz następny temat  
Autor Wiadomość
Adam1
Gość





PostWysłany: Nie Sty 07, 2018 9:16 am  OP    Temat postu: Chyba zły kod w książce Odpowiedz z cytatem Pisownia

Witam

Mam taki o to pseudo-kod programu zliczającego występowanie słów w tekście, po zapisaniu go w języku programowania i przetestowaniu okazuję się, że zlicza też tabulację jako słowo. Czy możliwe jest, żeby w książce był podany błędny pseudo-kod ?

podczas gdy nie napotkano symbolu końca pliku wykonuj
{
wczytaj znak
jeśli znak jest symbolem końca słowa to
zapamiętaj, że nowe słowo
w przeciwnym przypadku
jeśli nowe słowo to
{
zwiększ licznik słów
zapamiętaj, że nie nowe słowo
}
}

Pozdrawiam
Powrót do góry
lethern



Dołączył: 09 Paź 2007
Posty: 1115

PostWysłany: Nie Sty 07, 2018 9:27 am      Temat postu: Odpowiedz z cytatem Pisownia

zdefiniuj znak końca słowa
Powrót do góry
Zobacz profil autora Wyślij prywatną wiadomość Wyślij email
Adam1
Gość





PostWysłany: Nie Sty 07, 2018 10:26 am  OP(?)    Temat postu: Odpowiedz z cytatem Pisownia

jeśli znak jest spacją lub końcem linii lub też tabulacją
Powrót do góry
Garf



Dołączył: 25 Maj 2005
Posty: 3607
Skąd: Rzeszów

PostWysłany: Nie Sty 07, 2018 12:32 pm      Temat postu: Odpowiedz z cytatem Pisownia

Widocznie warunek sprawdzający znak końca słowa jest nieprawidłowy. Jak pokażesz kod to będziemy w stanie coś więcej pomóc.
_________________
Internet nadal „nic nie rozumie”, żadnego odkrycia, choćby od niego zależał los świata,
ale nadanego w egzotycznym języku, nie odróżni od nieco mniej ważnej wieści,
że u ciotki w placku z jabłkami zrobił się w piekarniku zakalec.
Stanisław Lem
Powrót do góry
Zobacz profil autora Wyślij prywatną wiadomość
lethern



Dołączył: 09 Paź 2007
Posty: 1115

PostWysłany: Nie Sty 07, 2018 6:52 pm      Temat postu: Odpowiedz z cytatem Pisownia

sprawdź czy poprawnie wykrywasz tabulacje?
druga myśl: jeśli masz więcej niż 1 spacja lub tabulacja między wyrazami, to program musi to wziąć pod uwagę (inaczej zliczy puste słowa - może sprawdzaj czy długość słowa nie jest 0? - bo - idąc dalej - jeśli algorytm zakłada, że nie ma 2 białych znaków obok siebie, a Twój tekst ma, no to założenie niespełnione)
Powrót do góry
Zobacz profil autora Wyślij prywatną wiadomość Wyślij email
Adam1
Gość





PostWysłany: Pon Sty 08, 2018 12:00 pm      Temat postu: Odpowiedz z cytatem Pisownia

Założenia do programu:

Poszczególne słowa są oddzielone znakami spacji, tabulacji lub końcem linii, oprócz tego między słowami może być tylko jeden znak spacji.

Do tego zadania jest taki o to pseudo-kod:

podczas gdy nie napotkano symbolu końca pliku wykonuj
{
czytaj znak
jeśli znak jest spacją lub końcem linii lub tabulacją to
zapamiętaj, że noweslowo przyjmuje wartość true
w przeciwnym przypadku
jeśli noweslowo = true to
{
zwiększ licznik słów
noweslowo = false
}
}
Powrót do góry
Adam1
Gość





PostWysłany: Pon Sty 08, 2018 12:38 pm      Temat postu: Odpowiedz z cytatem Pisownia

Jeśli czytany jest tylko jeden znak z pliku to program nawet przy dwóch spacjach powinien wykonać tylko pierwszy warunek - tzn pierwszy warunek dwa razy na przebiegu pętli while pomijając alternatywę

W takim razie nie rozumiem dlaczego program dla plików jak w załączniku: podaje dwie różne wartości ???



adam1.png
 Opis:

Pobierz
 Nazwa pliku:  adam1.png
 Wielkość pliku:  9.29 KB
 Pobierano:  31 raz(y)


adam.png
 Opis:

Pobierz
 Nazwa pliku:  adam.png
 Wielkość pliku:  9.73 KB
 Pobierano:  29 raz(y)

Powrót do góry
Garf



Dołączył: 25 Maj 2005
Posty: 3607
Skąd: Rzeszów

PostWysłany: Pon Sty 08, 2018 12:56 pm      Temat postu: Odpowiedz z cytatem Pisownia

Fusy z kawy mam dziś wyjątkowo mętne, a szklaną kulę dziecko wczoraj stłukło.

PS. Może jakiś fragment kodu?

_________________
Internet nadal „nic nie rozumie”, żadnego odkrycia, choćby od niego zależał los świata,
ale nadanego w egzotycznym języku, nie odróżni od nieco mniej ważnej wieści,
że u ciotki w placku z jabłkami zrobił się w piekarniku zakalec.
Stanisław Lem
Powrót do góry
Zobacz profil autora Wyślij prywatną wiadomość
lethern



Dołączył: 09 Paź 2007
Posty: 1115

PostWysłany: Pon Sty 08, 2018 2:57 pm      Temat postu: Odpowiedz z cytatem Pisownia

No cóz, ściśle rzecz biorąc, Twój drugi plik nie ma wyrazów rozdzielonych jednym znakiem spacji, ale trzema znakami - dwa znaki oznaczającymi nową linię (carret return, line feed) plus tabulator
czyli
Kod:
(\r)(\n)(\t)(T)(E)(K)(S)(T)

Gdzie \r to CR, \n to LF, \t to tabulacja. Przy czym nie mam pojęcia, jak to czyta Twój program, ale (\r)(\n) czyli CRLF prawdopodobnie czytasz jako 1 znak (znak końca linii)

Czyli słowa NIE są rozdzielone tylko znakiem końca linii lub tabulacji lub spacji w Twoim przykładzie
Powrót do góry
Zobacz profil autora Wyślij prywatną wiadomość Wyślij email
Garf



Dołączył: 25 Maj 2005
Posty: 3607
Skąd: Rzeszów

PostWysłany: Pon Sty 08, 2018 4:03 pm      Temat postu: Odpowiedz z cytatem Pisownia

@lethern, trochę rozwinę Twoją wypowiedź.

Sam pseudokod jest poprawny, jeśli spełnione są określone warunki, np. jedna spacja między słowami. Patrząc na pseudokod można powiedzieć, że dotyczy to również i innych znaków rozdzielających słowa, czyli tabulację i znaki końca wiersza.

I tu chyba pojawia się problem. Większość języków przy odczytywaniu łańcucha znak po znaku odczyta znak końca linii Windows jako dwa znaki białe - więc to już nie spełni warunku danych wejściowych. Stąd inne wyniki dla tekstu z tabulacjami i bez tabulacji na początku wiersza. Z Twojego punktu widzenia nie ma tam różnicy - z punktu widzenia bezdusznej logiki aplikacji - występują tam wyrazy "puste".

Więc pozostają Ci 2 wyjścia:
1) zadbać o to, aby dane wejściowe były poprawne (w tym aby znak końca linii składał się z jednego znaku)
2) dodać warunek omijający takie wydłużone odstępy

_________________
Internet nadal „nic nie rozumie”, żadnego odkrycia, choćby od niego zależał los świata,
ale nadanego w egzotycznym języku, nie odróżni od nieco mniej ważnej wieści,
że u ciotki w placku z jabłkami zrobił się w piekarniku zakalec.
Stanisław Lem
Powrót do góry
Zobacz profil autora Wyślij prywatną wiadomość
Wyświetl posty z ostatnich:   
Odpowiedz do tematu    Forum Coders' city Strona Główna -> Algorytmy + inżynieria oprogramowania Wszystkie czasy w strefie CET (Europa)

Strona 1 z 1

 
Skocz do:  
Możesz pisać nowe tematy
Możesz odpowiadać w tematach
Nie możesz zmieniać swoich postów
Nie możesz usuwać swoich postów
Nie możesz głosować w ankietach
Możesz dodawać załączniki na tym forum
Możesz pobierać pliki z tego forum




Debug: strone wygenerowano w 0.09886 sekund, zapytan = 13
contact

| Darmowe programy i porady Jelcyna | Tansze zakupy w Helionie | MS Office Blog |