adicon123 Napisano Styczeń 8, 2017 Zgłoś Share Napisano Styczeń 8, 2017 Cześć jest w stanie ktoś zrobic mi program ktory liczy litery w tekscie , i np . liczy ile razy wystebuje litera b , ja nie jestem w stanie z tym sobie poradzić , program ma byc napisany w pascalu oczywiście , jeżeli bedzie ktos w stanie mi pomoc bede bardzo wdzieczny Link do komentarza Udostępnij na innych stronach More sharing options...
webtom Napisano Styczeń 8, 2017 Zgłoś Share Napisano Styczeń 8, 2017 No to ma zliczać wszystkie litery, czy jedynie 'b'? I może pochwal się tym, co udało Ci się już stworzyć i na jakim etapie się zaciąłeś. Link do komentarza Udostępnij na innych stronach More sharing options...
adicon123 Napisano Styczeń 8, 2017 Autor Zgłoś Share Napisano Styczeń 8, 2017 program ma liczyc ile znakow wystąpiło w całym tekscie czyli np wszystkich znakow jest 55 , a litera b wystepuje x razy , Link do komentarza Udostępnij na innych stronach More sharing options...
webtom Napisano Styczeń 8, 2017 Zgłoś Share Napisano Styczeń 8, 2017 A coś już z tego programu napisałeś, czy liczysz, że ktoś to zrobi w całości za Ciebie? Link do komentarza Udostępnij na innych stronach More sharing options...
adicon123 Napisano Styczeń 8, 2017 Autor Zgłoś Share Napisano Styczeń 8, 2017 mam program ktory wczytuje tekst , wypisuje caly alfabet i i liczy ile dana litera razy wystapila a to tak nie moze być , program zlicz_znaki; var Liczniki : array ['a'..'z'] of integer; tekst : string; procedure zlicz(s : string); var c : char; i : integer; begin { Wyzeruj tablicę Liczniki } for c := 'a' to 'z' do Liczniki[c] := 0; { zlicz znaki } for i := 1 to Length(s) do begin c := s; if c in ['a'..'z'] then Inc(Liczniki[c]); end end; procedure wypisz; var c : char; begin for c := 'a' to 'z' do WriteLn('Znak ', c, ' występuje ', Liczniki[c], 'razy.'); end; begin WriteLn('Podaj jakiś napis'); ReadLn(tekst); zlicz(tekst); wypisz; readln; end. mam taki program , to sa moje początki z programowaniem , a ziomek nam dał takie ktorego nigdy nie roblilismy a nie ma przykladow w podreczniku i nie jestem w stanie sobie poradzic // Kod można umieścić wewnątrz sekcji kod [webtom] przerobilem ten program zeby zliczal tylko wybrana litere B , ale jak zrobic zeby zliszczyl wszystkie znaki ? Link do komentarza Udostępnij na innych stronach More sharing options...
webtom Napisano Styczeń 8, 2017 Zgłoś Share Napisano Styczeń 8, 2017 Czyli zamiast całej tablicy rejestrującej dowolne litery*, chcesz zliczać jedynie łączną liczbę liter i wystąpienia litery 'b'? *Tak swoją drogą - obecnie program pomija wielkie litery. Link do komentarza Udostępnij na innych stronach More sharing options...
adicon123 Napisano Styczeń 8, 2017 Autor Zgłoś Share Napisano Styczeń 8, 2017 tak , to nie ma znaczenia czy male czy duze Link do komentarza Udostępnij na innych stronach More sharing options...
webtom Napisano Styczeń 8, 2017 Zgłoś Share Napisano Styczeń 8, 2017 17 minut temu, adicon123 napisał: przerobilem ten program zeby zliczal tylko wybrana litere B , ale jak zrobic zeby zliszczyl wszystkie znaki ? Mógłbyś pokazać? Zasadniczo wystarczy dodać kolejną zmienną i drugiego ifa w pętli. Link do komentarza Udostępnij na innych stronach More sharing options...
adicon123 Napisano Styczeń 8, 2017 Autor Zgłoś Share Napisano Styczeń 8, 2017 for c := 'a' to 'z' do Liczniki[c] := 0; ta linijke zmienilem ze nie od a do z tylko np od b do b Link do komentarza Udostępnij na innych stronach More sharing options...
webtom Napisano Styczeń 8, 2017 Zgłoś Share Napisano Styczeń 8, 2017 Bez sensu (i to nawet abstrahując od absurdalności 'b' to 'b') - przecież ta pętla zeruje jedynie liczbę wystąpień poszczególnych znaków, więc po prostu reszta może być źle zliczana. To co byś musiał zrobić, to zastąpić tablicę Liczniki dwoma zmiennymi typu integer - pierwsza zliczająca wszystkie litery i druga zliczająca wystąpienia 'b'. Mam nadzieję że wiesz, jak to zrobić? Link do komentarza Udostępnij na innych stronach More sharing options...
adicon123 Napisano Styczeń 8, 2017 Autor Zgłoś Share Napisano Styczeń 8, 2017 program abc; uses crt; var z:string; i,litery:byte; begin clrscr; writeln('Wpisz dowolne zdanie:'); readln(z); for i := 1 to length(z) do if z <> ' ' then litery := litery+1; Writeln('Liter w zdaniu jest: ',litery); readln; end. ten program liczy litery jak dolozyc ten ktory liczy tylko jedna wybrana litere "b" ? pomocy ja juz nie mam glowy Link do komentarza Udostępnij na innych stronach More sharing options...
webtom Napisano Styczeń 8, 2017 Zgłoś Share Napisano Styczeń 8, 2017 10 minut temu, adicon123 napisał: i,litery:byte; Co prawda readln pozwala na wczytanie tekstu ograniczonego do jedynie 255 znaków, no ale tak czy siak nie zaszkodziłoby użycie jakiegoś pojemniejszego typu, np. wcześniej użyty integer (więcej o typach np. tutaj). No i powinna się tutaj pojawić definicja kolejnej zmiennej zliczającej wystąpienia 'b'. 16 minut temu, adicon123 napisał: for i := 1 to length(z) do Najlepiej by było w tej pętli wykonywać dwie rzeczy naraz: zliczać litery i wystąpienia 'b'. Żeby wykonać wewnątrz pętli większą liczbę instrukcji, trzeba je zamknąć między begin i end: for i := 1 to length(z) do begin if ... if ... end; 24 minuty temu, adicon123 napisał: if z <> ' ' then litery := litery+1; Ten warunek mógłby wyglądać nieco inaczej - obecnie pod litery łapią się również np. znaki przestankowe. Być może zainteresuje Cię funkcja upCase. I w sumie jak już się dorwałem do kompilatora Pascala, to zauważyłem jeden błąd we wcześniejszym kodzie, który tutaj powielasz: for i := 1 to Length(s) do begin c := s; if c in ['a'..'z'] then Inc(Liczniki[c]); end W zmiennej c powinien być jeden znak, więc przypisanie powinno wyglądać następująco: c := s; Czyli powinieneś porównywać nie całą zmienną z, a jedynie konkretną literę (z). No i ten początkowy kod był przyzwoicie rozbity na kilka funkcji/procedur i z lepiej nazwanymi zmiennymi, czemu z tego zrezygnowałeś? Link do komentarza Udostępnij na innych stronach More sharing options...
adicon123 Napisano Styczeń 8, 2017 Autor Zgłoś Share Napisano Styczeń 8, 2017 dobra dałem radę , zrobiłem to co trzeba program wygląda tak : program abc; uses crt; var o,licznik:byte; znak:char; zdanie:string; i,litery:byte; begin clrscr; writeln('Wpisz dowolne zdanie: '); readln(zdanie); for i := 1 to length(zdanie) do if zdanie <> ' ' then litery := litery+1; Writeln('Liter w zdaniu jest: ',litery); writeln('wpisz szukany znak: '); readln(znak); for o:=1 to length(zdanie) do if zdanie[o]= znak then licznik := licznik+1; writeln('znak ',znak,' w podanym zdaniu wystapil ',licznik,' razy'); readln; end. wszystko dziala tak jak trzeba ! Link do komentarza Udostępnij na innych stronach More sharing options...
webtom Napisano Styczeń 8, 2017 Zgłoś Share Napisano Styczeń 8, 2017 2 minuty temu, adicon123 napisał: if zdanie <> ' ' then litery := litery+1; Jak już wcześniej wspomniałem, ten warunek należałoby zmienić - chyba najlepiej by było, gdyby dla tekstu 'a b c 0' program wyświetlał informację o 3, a nie 7 literach... Link do komentarza Udostępnij na innych stronach More sharing options...
adicon123 Napisano Styczeń 8, 2017 Autor Zgłoś Share Napisano Styczeń 8, 2017 5 minut temu, webtom napisał: Jak już wcześniej wspomniałem, ten warunek należałoby zmienić - chyba najlepiej by było, gdyby dla tekstu 'a b c 0' program wyświetlał informację o 3, a nie 7 literach... jak o 7 ? liczy same litery bez spacji , jest dobrze sprawdz Link do komentarza Udostępnij na innych stronach More sharing options...
webtom Napisano Styczeń 8, 2017 Zgłoś Share Napisano Styczeń 8, 2017 Na pewno? Bo skopiowałem Twój kod, wkleiłem do edytora, skompilowałem i nadal zwraca po prostu długość wprowadzonego tekstu, o ile ten tekst zawiera coś innego, niż pojedyncza spacja. Link do komentarza Udostępnij na innych stronach More sharing options...
Sevard Napisano Styczeń 9, 2017 Zgłoś Share Napisano Styczeń 9, 2017 Nie jest dobrze. Porównujesz znak z łańcuchem znaków, a nie z pojedynczym elementem łańcucha (czyli znakiem). Jest tylko jeden bardzo specyficzny przypadek, gdy w Pascalu jakiś znak jest równy jakiemuś łańcuchowi znaków. Link do komentarza Udostępnij na innych stronach More sharing options...