Консультация № 193583
23.09.2018, 13:42
0.00 руб.
23.09.2018, 13:53
0 8 1
Уважаемые эксперты! Пожалуйста, ответьте на вопрос:
Как в PascalABC составить программу для нахождения количества слогов "ма" в строке s двумя способами?

Обсуждение

давно
Старший Модератор
31795
6196
23.09.2018, 13:54
общий
Адресаты:
У Вас какие либо наработки?
Об авторе:
Мне безразлично, что Вы думаете о обо мне, но я рад за Вас - Вы начали думать.

давно
Посетитель
399424
894
23.09.2018, 15:37
общий
23.09.2018, 17:36
Я знаю только 1 вариант. Не могу найти второй.

[code lang=pascal]Program zadanie3bvar2;
Var
s, s1: string;
i, k: integer;
Begin
writeln ('Введите строку');
readln (s);
k:=0;
for i:=1 to length(s) do
if copy(s,i,2)='ма' then k:=k+1;
writeln ('Количество слогов "ма" в строке = ', k);
End.[/code]
давно
Старший Модератор
31795
6196
23.09.2018, 17:35
общий
Адресаты:

Добавим ещё два базовых.
Вы же просили:
Цитата: svrvsvrv
двумя способами


[code lang=pascal]var
a,i:integer;
b,s:string;
begin
b:='ma';
write('Enter string:');
readln(s);
a:=0;{этот вариант не универсален, т.к. зависит от длины строки b, но если добавить ещё один цикл j:=0,length(b),1 и условием s[i+j]=b[j+1], то это способ может стать универсальным}
for i:=1 to length(s)-1 do
if (s[i]=b[1])and(s[i+1]=b[2])then inc(a);
writeln('result 1:=',a);
{это вариант, тоже не универсальный, т.к. если нужно будет искать строку 'mam', то строке 'mamam' даст ответ 1, но если удалять только первый символ, можно получить почти универсальный вариант, с одной ошибкой строка 'mam' в строке 'mmam' будет найдена два раза}
a:=0;
while pos('ma',s)>0 do
begin
inc(a);
delete(s,pos(b,s),length(b));
end;
writeln('result 2:=',a);
end.[/code]
два варианта в коде + ещё плюс по одному в комментариях(указания на недостатки).
Об авторе:
Мне безразлично, что Вы думаете о обо мне, но я рад за Вас - Вы начали думать.

давно
Старший Модератор
31795
6196
23.09.2018, 17:40
общий
Адресаты:
Картинка-кнопка
служит, для выбора языка программирования, при вставке своего кода.
Обратите на это свое внимание
Об авторе:
Мне безразлично, что Вы думаете о обо мне, но я рад за Вас - Вы начали думать.

давно
Посетитель
399424
894
23.09.2018, 20:39
общий
Адресаты:
Спасибо.
давно
Старший Модератор
31795
6196
23.09.2018, 20:50
общий
Адресаты:
Остальные Ваши вопросы после этого актуальны?
Об авторе:
Мне безразлично, что Вы думаете о обо мне, но я рад за Вас - Вы начали думать.

давно
Посетитель
399424
894
23.09.2018, 22:00
общий
Да, конечно.
давно
Старший Модератор
31795
6196
24.09.2018, 12:44
общий
это ответ
Здравствуйте, svrvsvrv!

Первый вариант:
[code lang=pascal]var
a:string;
b:integer;
begin
write('enter string:');
readln(a);
b:=0;
while pos('ma',a)>0 do
begin
delete(a,pos('ma',a),2);
inc(b);
end;
writeln('result:=',b);
end.[/code]


Второй вариант:
[code lang=pascal]var
a:string;
b,c:integer;
begin
writeln('enter string:');
readln(a);
b:=0;
for c:=1 to length(a)-1do
if(a[c]='m')and(a[c+1]='a')then inc(b);
writeln('result:=',b);
end.[/code]
Удачи!
5
Об авторе:
Мне безразлично, что Вы думаете о обо мне, но я рад за Вас - Вы начали думать.

Форма ответа