IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения.
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

 
 Ответить  Открыть новую тему 
> Найти число букв в строке
сообщение
Сообщение #1


Новичок
*

Группа: Пользователи
Сообщений: 15
Пол: Мужской
Реальное имя: Влад

Репутация: -  0  +


Дана символьная строка. Подсчитать в ней количество вхождений букв г, 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.


Сообщение отредактировано: Alucard -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Гуру
*****

Группа: Пользователи
Сообщений: 1 220
Пол: Мужской

Репутация: -  16  +


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;
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Новичок
*

Группа: Пользователи
Сообщений: 15
Пол: Мужской
Реальное имя: Влад

Репутация: -  0  +


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;


Вот так всё работает!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Гость






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

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

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 20.10.2020 4:46
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name