Программирование на алгоритмическом языке КуМир
.pdf
ложенному за служебным словом КЦ. А это будет вывод длины пути, который спортсмен пробежал на седьмой день.
2. Вычислите и напечатайте все члены арифметической последовательности, заданной формулой: a=2n+3, которые меньшие 100.
Сначала надо определить: какое условие будет проверяться в операторе ïîêà.
В данной задаче выполняется вычисление элемента последовательности и вывод его на экран до тех пор, пока его значение не превысит 100. Следовательно, условие запишем следующим образом: ïîêà à <=100.
Кроме того, надо еще позаботиться о том, чтобы в начале алгоритма номер элемента был задан равным единице, а в процессе выполнения цикла каждый раз увеличивался на единицу.
Сделаем еще одно усовершенствование в программе, не относящееся к тому какой вид цикла выбран для реализации в программе. Таблицу значений будем выводить с заголовком. Тогда сразу будет понятно, где находится номер элемента последовательности, а где его значение.
Блок-схема будет выглядеть следующим образом: Напишем текст программы:
Программа |
|
|
Пояснения |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
алг программа |
заголовок программы |
|
|
||
|
нач цел a, n |
|
раздел описания переменных, a, n, — целые |
|||
|
|
|
переменные |
|
|
|
|
вывод нс, “n a” |
вывод заголовка таблицы |
|
|
||
|
n :=1; |
|
присвоение начального значения переменной |
|||
|
|
|
цикла |
|
|
|
|
нц пока à<= 100 |
начало цикла |
|
|
||
|
a = 2*n + 3 |
|
вычисление элемента |
Тело цикла |
|
|
|
|
|
|
последовательности a |
|
|
|
вывод нс, n, a |
|
вывод n, a, |
|
|
|
|
n:=n+1 |
|
изменение значения |
|
|
|
|
|
|
переменной цикла |
|
|
|
|
кц |
|
|
|
|
|
|
кон |
конец алгоритма |
|
|
||
31
начало |
Вывод «n», «a» |
n:=1 |
нет |
a < =100 |
да |
a:=2n+3 |
Вывод n, a |
n:=n+ 1 |
конец |
Последняя конструкция, с помощью которой можно реализовать циклические алгоритмы, это цикл по счетчику.
Эта конструкция также состоит из двух частей:
1)заголовка или начала оператора цикла (для к от n1 до n2 шаг n), где указываются основные параметры: n1– начальное значение переменной к, n2 — конечное значение переменной к, n — шаг изменения переменной к,
32
2)конца цикла (кц), где проверяются основные переменные цикла и принимается решение о завершении цикла. Если при положительном n переменная цикла имеет значение больше чем n2, то управление передается оператору следующему за кц, иначе повторяется работа операторов, находя-
щихся в теле цикла.
Начальное и конечное значения переменной являются обязательными параметрами, а, если значение шага не указывается, то он по умолчанию принимает значение равное 1. Переменная цикла — это параметр цикла (поэтому такой цикл называют параметрическим циклом). Параметр цикла последовательно принимает значения от начального значения до конечного с указанным интервалом шага.
Что будет, если начальное и конечное значение переменной совпадает? Цикл будет работать только один раз.
Шаг может иметь отрицательное значение. Но тогда начальное значение переменной должно быть больше конечной.
При положительном шаге переменная цикла должна увеличи- ваться и оператор цикла будет повторяться только при условии, что начальное значение меньше или равно конечному значению. При отрицательном шаге начальное значение не должно быть меньше конечного.
Операторы, относящиеся к телу цикла, будут в процессе работы многократно повторяться с одной лишь разницей, что стоящая в них переменная ê при каждом повторении будет изменять сво¸ зна- чение и не зависит от того, используется ли она в вычислениях внутри цикла или нет.
Разберем пример
Необходимо составить программу и блок-схему вычисления суммы натуральных чисел от 20 до 50.
алг сумма чисел |
заголовок программы |
нач цел S, A |
раздел описания переменных, S, A — |
|
целые переменные |
S:=0 |
|
нц для À от 20 до 50 |
начало цикла |
S:=S+A |
изменение значения суммы |
кц |
конец цикла |
вывод нс, “сумма =”,S |
вывод значения суммы |
кон |
|
|
|
33
Переменной цикла в данном примере будет величина А, которая изменяет свое значение в процессе работы цикла от 20 до 50 с шагом 1, т.к. шаг по умолчанию равен 1, его можно опустить.
При составлении блок-схемы циклических алгоритмов надо учитывать, что служебное слово НЦ должно отображать присваивание переменной цикла начального значения. А служебное слово КЦ — изменяет значение переменной на величину шага и сравнивает ее с конечным значением. Если значение переменной превышает конечное значение, то цикл прекращает работу.
Вид блок схемы представлен.
начало
S:=0
A:=20
S:=S+A
A:=A+1
–
A>50
+
S
конец
34
ЭТО НАДО ЗНАТЬ
Для построения циклических алгоритмов используется оператор цикла, имеющий вид:
нц
Операторы
кц
Существует три основных типа операторов, с помощью которых можно реализовать циклы в алгоритмах: цикл с постусловием, цикл
по условию, цикл по счетчику.
ВОПРОСЫ ДЛЯ САМОПРОВЕРКИ
1.Какие конструкции циклов Вы знаете?
2.Если в цикле по счетчику не указан шаг, какое его значение предполагается?
3.Какое начальное значение надо присвоить переменной цикла по счетчику, чтобы цикл работал ровно 1 раз?
4.Какое конечное значение надо присвоить параметру цикла без указания шага, чтобы цикл работал больше 1 раза?
8.Какое конечное значение надо присвоить параметру цикла по счетчику с отрицательным шагом, чтобы цикл работал ровно два раза?
ВЫПОЛНИТЕ ЗАДАНИЯ
1.Составьте блок-схему и программу для нахождения среднего арифметического двузначных чисел кратных 3.
2.Составьте блок-схему и программу для нахождения среднего арифметического нечетных двузначных чисел.
3.Составьте блок схему и программу для решения следующей задачи: Банк начисляет 2% годовых. Выведите какой станет сумма вклада S, положенная в банк на N лет. Значения S и N вводятся с клавиатуры.
4.Определите и выведите на экран количество натуральных чисел меньших 1000 и делящихся на 5 и 7 одновременно.
35
Работа с символьными переменными
Часто при программировании надо решать не только вычислительные задачи, но и обрабатывать текстовую информацию. Например, требуется найти слово или часть его, сформировать из нескольких отдельных слов предложение или узнать длину текста. Для этого используют символьные и литерные величины.
Символьные величины при написании программ уже встречались ранее для ввода или вывода соответствующих значений. Однако с символьными величинами можно производить много полезных и интересных действий.
Разберем некоторые операции, которые можно производить с символьными данными.
Первая операция похожа на самое простое арифметическое действие — сложение и обозначается знаком “ + “. Это операция сцепление. В результате сцепления к символьной величине, находящейся слева от знака “ + “, будет присоединена символьная вели- чина, находящаяся справа от этого знака. Результат такого действия может быть присвоен только величине типа ëèò, которую нужно задать в разделе описания переменных.
Например, в результате действия следующего фрагмента программы, в которой все величины имеют тип литерный.
x := ″ïàð″ y := ″âîç″
z := x + ″о″ + y вывод Z
величина Z получит значение ‘паровоз’ и соответствующее слово появится на экране.
Разберем пример
алг |
|
нач ëèò x,y, z |
Раздел описания переменных, x,y,z имеют |
|
литерный тип данных |
x := ″ïëàí″ |
Присвоение переменной x значения |
y := ″выполнен” |
Присвоение переменной y значения |
z: = x + ″íå″ + y |
Выполнение операции сцепления |
вывод z |
Вывод значения литерной переменной z |
кон |
Конец алгоритма |
В результате работы алгоритма переменная величина z получит значение ″план не выполнен″ и соответствующее словосочетание появится на экране.
36
С помощью другой операции, операции сравнения ″ = ″, можно определить тождественность двух символьных величин.
То есть, условие в команде если верно при абсолютном совпадении двух символьных величин. Если же они хоть в одном знаке будут отличаться, то, значит равенство не выполняется.
Часто для написания программ с символьными значениями надо определять длину величины, то есть количество символов в ней. Для этой цели в языке КуМир имеется функция длин
Разберем пример
алг |
Начало алгоритма |
нач лит x, öåë n, k |
Описание переменных |
x: = ″информатика″ |
Присваивание значения |
|
величине x |
n: = длин (x) |
Определение длины |
|
символьной строки n |
k: = длин (″программа работает″) |
Определение длины |
|
символьной строки k |
кон |
Конец алгоритма |
|
|
переменная n получит значение 11, а k будет равна 18 (не забудьте, что пробел тоже полноправный символ).
Обратите внимание, что аргументом функции длин может быть только символьная величина, а результатом — число.
Иногда приходится выделять фрагменты из символьной строки и работать с одним или с группой знаков. Для этого существует специальная конструкция вырезка.
Общий вид вырезки из символьной переменной А таков:
À[с какогo: по какой], ãäå
ñкакого — номер символа, с которого начинается вырезка
по какой символ — номер символа, которым заканчивается вырезка
Эта конструкция может использоваться для вырезки части текста символьной строки или ее замены
Предположим A=″ИНФОРМАТИКА″
В:= А[2:6] — данная запись предполагает, что в символьную переменную B, переписываются из символьной переменной A символы со 2 по 6 включительно. И ее значение будет равно “ФОРМА“
37
A[8:11] := ″ЦИЯ ″– данная запись оператора заменяет с 8 по 11 символы в символьной строке А. После этой операции символьная переменная A будет иметь значение равное слову “ИНФОРМАЦИЯ”
Разберем пример.
Сколько раз встречается буква “а“ во введенной с клавиатуры строке?
Для того чтобы сосчитать количество букв “а”, надо из строки x поочередно выделять по одной букве в переменную y, сравнивать с образцом и в случае совпадения, увеличивать переменную — счет- чик k на единицу (k := k + 1). Чтобы проверить всю строку нужно сначала определить ее длину n. Переменные x и y должны быть описаны как строковые (тип ëèò), а k и n — как целые (öåë).
Напишем программу и блок-схему.
Программа |
|
|
Пояснения |
||
|
|
|
|
|
|
|
|
|
|
|
|
|
алг определение длины строки |
заголовок программы |
|
||
|
нач цел i, k, n, лит x, y |
|
раздел описания переменных |
||
|
âвод ”Введите строку симво- |
|
ввод символьной строки |
||
|
ëîâ” |
|
|
|
|
|
ввод x |
|
|
|
|
|
l := длин (x) |
определение длины строки |
|
||
|
k:=0 |
обнуление счетчика |
|
||
|
для i îт 1 до n |
Начало цикла |
|
||
|
y := x[ i:i ] |
выделение одной буквы из |
|
||
|
|
|
|
строки на позиции номер i |
|
|
если y=″a″ |
|
определение: является ли |
||
|
|
|
|
выделенная буква буквой “а“ |
|
|
то k:= k + 1 |
|
увеличение значения счетчика |
||
|
|
|
на 1 в случае выполненного |
|
|
|
|
|
|
условия |
|
|
все |
|
|
|
|
|
кц |
Конец цикла |
|
||
|
вывод нс, ″k= ″, k |
|
Вывод количества букв “а“ в |
||
|
|
|
строке |
|
|
|
кон |
Конец программы |
|
||
|
|
|
|
|
|
38
Блок схема будет выглядеть так
начало
ввод x
n := длин(x)
k := 0
i := 1, n
y := x(i, i)
нет
y = «a»
да
k :=k + 1
i := i + 1
вывод k
конец
Поскольку выделение одного символа встречается довольно часто, в КуМире разрешено вместо А[i:i] писать просто A[i]
39
ЭТО НАДО ЗНАТЬ
При описании величины необходимо указать
ååтип, с помощью служебного слова лит
Âрезультате сцепления к символьной величи- не, находящейся слева от знака “ + “, будет присоединена символьная величина, находящаяся справа от этого знака.
Для определения длины символьной величи- ны в языке КуМир имеется функция длин
Иногда приходится выделять фрагменты из символьной строки и работать с одним или с группой знаков. Для этого существует специальная конструкция вырезка.
Общий вид вырезки таков А [с какогo: по какой]
Эта конструкция может использоваться для вырезки части текста символьной строки или ее замены
ВОПРОСЫ ДЛЯ САМОПРОВЕРКИ
1.Как описываются символьные переменные?
2.Какие действия можно производить с символьными переменными?
3.Как называется действие объединения символьных переменных знаком плюс?
4.Как можно определить длину символьной строки?
ВЫПОЛНИТЕ ЗАДАНИЯ
Составьте программы и блок-схемы для следующих задач.
1.С клавиатуры вводятся 4 слова. Определите, какое из них максимальной длины.
2.Сформируйте из введенных слов предложение и выведите его на экран.
3.Сконструируйте сложные слова из введенных корней: пар, ход, воз, лет, вод. (Используйте соединительную гласную “о“.)
4.Определите, сколько раз встречается во введенной строке слог “ба“. (Для проверки работы программы можете использовать такой пример: баран упал на барабан — слог “ба“ встречается 3 раза).
5.Замените все пробелы во введенном с клавиатуры предложении на знаки подчеркивания.
40
