Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Задачи _ Найти число букв в строке

Автор: Alucard 10.02.2009 7:55

Дана символьная строка. Подсчитать в ней количество вхождений букв г, k, t.

Использую 2 версии паскаля, но код работает неверно в обоих. алгоритм if s[i]=x then find:=p+1; всегда равен 1, а если буквы в строке нет, то значение выставляется 85 в одной версии и 93 в другой 0_о. Где мой косяк?

Код
program new;
uses    crt;
var     s:string;
        i:integer;

function find(x:string):byte;
var      p:byte;
begin
     for i:=1 to length(s) do
         if s[i]=x then find:=p+1;
end;

begin
     clrscr;
     writeln('VVedite stroky');
     readln(s);
     writeln('Bykv r ',find('r'));
     writeln('Bykv k ',find('k'));
     writeln('Bykv t ',find('t'));
     readln;
end.

Автор: Ozzя 10.02.2009 11:20

function find(x:string):byte;
var p:byte;
begin
for i:=1 to length(s) do
if s[i]=x then p:=p+1;
find:=p;
end;

Автор: Alucard 10.02.2009 16:49

Ozzя
Спасибо!!!

Код
function find(x:string):byte;
var      p:byte;
begin
     p:=0;
     for i:=1 to length(s) do
         if s[i]=x then p:=p+1;
     find:=p;
end;


Вот так всё работает!

Автор: volvo 10.02.2009 17:01

Цитата
Вот так всё работает!
Все-таки, на будущее... Если тебе надо искать букву (т.е., символ), то и передавай символ, а не строку:
function find(x: char):byte;
И понятнее, что от функции требуется, и оградит тебя от проблем, скажем, при попытке посчитать слова, а не буквы:

s := 'Вот это да!!!';
writeln('Слов "да": ', find('да'));
(раз написано, что принимает строку, даже не сомневайся, кто-нибудь все равно в эту функцию строку передаст. А ты делай так, чтоб ошибка возникнуть вообще не могла).