@Ventus

Правильные ли ответы в рамках составления алгоритма?

Хочу себя проверить (правильно ли я понял вопросы, и правильно ли ответил). Условие задачи в рамках языка Pascal: написать алгоритм, который считает количество букв 'a' и 'b' в тексте.

Вопросы:
1. Какое максимальное значение может принять число операций увеличения счетчика?
2. Минимальное число?
3. Сколько сравнений нужно алгоритму?
Нужно выразить ответы с помощью числа N символов в введенной строке.

Получился код:
Program n1;
var s:string;
    i,k:integer;

begin
 write('Введите строку ');
 readln(s);

 k:=0;
 for i:=1 to length(s) do begin
    if (s[i]='a') then k:=k+1;
    if (s[i]='b') then k:=k+1;
    end;
 writeln('Буквы встречаются = ', k,' раз');
end.


Блок-схема:
5e5e8bde91557108950508.png

Ответы на вопросы:
Возьмем для примера строку "Hello, baby" (11 символов).

1. Max count: 11 * 1 = 11 (все символы подходят под условия сравнения).
2. Min count: 0 * 1 = 0 (ни один символ не подходит под условия сравнения).
3. 11 * 2 = 22 (каждый символ сравнивается 2 раза).
  • Вопрос задан
  • 102 просмотра
Решения вопроса 1
wataru
@wataru Куратор тега Алгоритмы
Разработчик на С++, экс-олимпиадник.
В зависимости от уровня задающего задание, ваш ответ правильный или не совсем правильный.
Да, именно if-ов сравнений 2N. Но внутри цикла for тоже закопано N сравнений. Как цикл-то работает? У него есть переменная счетчик и он ее сравнивает с граничным условием. Это хорошо видно на блок схеме - блок-цикл имеет 2 выхода. Значит в нем есть ветвление и, следовательно, сравнения.

Так что более точный ответ 3N. Еще более точный ответ 4 N. Потому что функция readln тоже должна какие-то сравнения делать, чтобы остановить ввод на конце строки, но это уже nitpick, который от вас почти точно не ожидается.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы