Циклический алгоритм со счетчиком пример
Циклический алгоритм со счетчиком пример
Блок 3: "Виды алгоритмов"
Тема 4:"Составление циклических алгоритмов."
Определите в данных условиях цикл и заполните следующую таблицу:
№ | Начальное значение | Конечное значение | Шаг |
1) 1, 2, 3, 4, . ,10.
2) -5, -4, -3, -2, . , 5.
3) 2, 4, 6, . , 20.
7) b-5, b-4, b-3, . b+5.
1) от x=7 до 10 шаг 1;
2) от b=1 до 13 шаг 4;
3) от c=30 до 10 шаг -5;
4) от n=a до a+10 шаг 2;
6) от t=-4 до 4 шаг 1;
7) от p=7 до -7 шаг -1;
9) от -100 до 100 шаг c;
Перепишите на алгоритмическом языке блок-схемы циклов из тренинга №3.
1) В лототроне по порядку лежат шары с номерами от 100 до 200. Он выбрасывает каждый седьмой. Составьте алгоритм для определения номеров выпавших шаров.
2) В гонках участвовало 17 машин ( номера их идут по порядку). Каждая вторая машина сошла с дистанции по той или иной причине. Составьте алгоритм определения их номеров.
3) Преобразуйте циклы с параметром в цикл-до и цикл- пока. Запишите их в виде блок- схем. Образец:
4) Начав тренировки, спортсмен в первый день пробежал 10 км. Каждый следующий день он увеличивал дневную норму на 10% от нормы предыдущего дня. Сколько км пробежал спортсмен за каждый день недели?
5) На опытном лесном участке ежегодный прирост древесины — 10%. Какое количество ее будет через 6 лет, если в начале 1 года было посажено 20000 м 3 ?
6) В банк был положен вклад в размере N руб. Каждый месяц он увеличивался на 1%. Определите размер вклада через 5 лет.
2) Спортсмен в день пробегает х метров. Начав тренировки, он в течение недели увеличивал свой пробег предыдущего дня на 250 метров. Сколько пробегал спортсмен в каждый день тренировки?
3) Блок-схемы, приведенные в 1 упражнении 1 уровня записать на алгоритмическом языке. Преобразовать их в цикл-до и цикл- пока. Образец:
цикл с параметром | цикл-до | цикл- пока |
для N от 3 до 5 шаг 2 нц K:=N^2 вывод K кц | N:=3 нц K:=N^2 вывод K N:=N+2 до N>5 кц | N:=3 пока N<=5 нц K:=N^2 вывод K N:=N+2 кц |
4) Напечатать все квадраты двухзначных чисел, не превышающие 200.
5) Банк принял два вклада по 1000$. Один под 2% годовых, а другой под 3%. Через сколько лет второй вклад превысит первый на 100$?
6) Количество рыбы в реке, в которую сбрасывались загрязнения, ежегодно сокращалось на 20%. Определите, через сколько лет рыбы в реке почти не останется ( ее количество будет меньше 1)? Известно, что до начала загрязнения ее было N особей.
1) В первый день рабочий произвел х деталей. Во второй и в последующие дни он увеличивал норму предыдущего дня в 2 раза. Сколько деталей он делал каждый день данной недели?
2) В лаборатории были пробирки в форме цилиндров. Они отличались между собой по высоте ( h=2; 2,5; 3 . 25 см). За год пришла в негодность каждая пятая. Определите объемы разбитых пробирок, если радиус основания у всех пробирок был R. Формула для вычисления объема: V=3,14R 2 h .
3) Напечатать таблицу значений перевода температуры из градусов Цельсия (С) в градусы по шкале Фаренгейта (F) для значений от 15 до 30° С с шагом 1°. Формула для перевода: F=1,8C+32.
4) Около стены стоит палка длиной х см. Один ее конец находится на расстоянии y от стены. Каждую минуту палка скользила вниз по стене на 2% расстояния от пола. Определите через сколько минут она упала (Z<0,1см). Формула для расчетов: Z=(x 2 -y 2 ) 1/2
5) Поголовье скота в колхозе увеличивается с каждым годом. Прирост числа коров составляет 7%, а свиней 15%. Определите сколько всего голов скота при таких темпах сможет выращивать колхоз через 5 лет, если на начало этого периода было 100 коров и 100 свиней?
6) В упражнении 5 вычислить, через сколько лет количество свиней будет больше количества коров не менее чем на 100 ?
ИНФОРМАТИКА учебно-методическое пособие для студентов заочной формы обучения Тольятти 2011
Научиться представлять алгоритмы решений простейших задач в виде блок-схем и писать по ним программы.
Студент должен выполнить задание в двух вариантах:
Выполнить словесный алгоритм и записать его результат.
Представить словесный алгоритм в виде блок-схемы и программы. Ввести программу, запустить её, получить результат.
Выполнить упражнение 1. Перед выполнением упражнения изучите материал по теме из раздела 2.5 курса лекций.
1) Выполнить словесный алгоритм. Записать результат.
2) Составить блок-схему и написать программу по заданному алгоритму.
В результате работы линейного алгоритма:
найти значение переменных: k, n, m.
1) Словесный алгоритм выполняется последовательно.
Значение k = 8 подставляется в m =k+2=10.
Значение k = 8, m =10 подставляется в n =k+m =18.
Вычисляется новое k = n – 2 * k =18 – 2 * 8 = 2.
Вычисляется новое m:=k+n=2+18=20.
В результате работы линейного алгоритма значение переменных равны:
2) Блок-схема алгоритма задачи представлена на рис.14.
Программа алгоритма, представленного на рис.14.
Writeln (‘ввести k’);
Writeln (‘k=’, k,’ n=’, n,’ m=’, m);
В фигурных скобках даются пояснения (комментарии) к операторам.
В блок-схеме, представленной на рис.14, значение переменной k вводится с клавиатуры. Поэтому в программе этому блоку соответствует оператор ввода, что позволяет ввести с клавиатуры любое значение переменной k .
Алгоритм линейного типа, заданный в виде перечисления операций, может быть значительно сложнее. В результате вероятность ошибки словесного вычисления (задание 1) возрастает. Если представить алгоритм в виде блок-схемы, то чётко просматривается последовательность выполнения операций. Алгоритм можно усложнить за счёт ввода переменной k с клавиатуры.
Запись алгоритма в виде программы значительно упрощается, если следовать по блок-схеме рис.14.
Блоку 1 соответствует слово BEGIN(начало).
Блоку 2 соответствует оператор ввода Readln (k).
Блоки 36 переписываются с рис.14.
Блоку 7 соответствует оператор вывода Writeln (‘k=’, k,’ n=’, n,’ m=’, m).
Блоку 8 соответствует слово END(конец программы).
В результате выполнения программы линейного типа можно получить только по одному значению для каждой переменной. Если с клавиатуры ввести другое значение переменной k , то оператор вывода выдаст следующий результат. Если необходимо вычислить таблицу значений при изменении переменной k , то следует выбрать циклический алгоритм.
Рис.14. Блок-схема линейного алгоритма
1) Выполнить словесный алгоритм. Записать результат.
2) Составить блок-схему и написать программу по алгоритму.
Задан фрагмент алгоритма:
если W > R, то R=W+R, иначе W=R-W.
В результате выполнения данного алгоритма с начальными значениями: W=-7, R=55
на экран будет выведено: W R
1) Для начальных значений: W=-7, R=55 условие W > R не выполняется. В этом случае выполняется вторая ветка W=R-W=55+7=62.
В результате работы алгоритма значение переменных равны: W=62, R=55.
2) Блок-схема словесного алгоритма представлена на рис.15.
На рис. 15 появился новый блок 3, в котором проверяется условие. Блок проверки условия образует ветвление по двум направлениям в алгоритме.
В блок-схеме видно, что в зависимости от условия w>r выполняется одна из веток алгоритма. Затем выводится результат вычисления.
Рис. 15. Алгоритм ветвления
Блоку 1 соответствует служебное слово BEGIN.
Блоку 2 соответствует оператор ввода Readln (w, r).
Блоку 3 соответствует оператор условия if w > r then w := w + r else r:=r-w.
Блоку 4 соответствует оператор присваивания w = w+r.
Блоку 5 соответствует оператор присваивания r=r-w.
Блоку 6 соответствует оператор вывода Writeln (’ w =’, w, ’ r =’, r).
Блоку 7 соответствует служебное слово END.
Программа алгоритма ветвления, представленного на рис.15.
Writeln (‘ввести w, r’);
Writeln (’ w =’, w, ’ r =’, r);
1) Выполнить словесный алгоритм. Записать результат.
2) Составить блок-схему и написать программу по алгоритму.
Циклический алгоритм со счётчиком циклов задан в виде словесного описания.
Заданы начальные значения переменных:
Начало цикла для i от 1 до 3
конец цикла; Вывод d, s.
1) В алгоритме указан диапазон изменения счётчика i, где видно, что должно быть выполнено три цикла.
После выполнения первого цикла значения переменных равны d=2, s=2.
Полученные значения подставляются во втором цикле.
После выполнения второго цикла значения переменных равны d=4, s=6.
Полученные значения во втором цикле подставляются при выполнении третьего цикла.
В результате выполнения алгоритма значение переменных равны: d=8, s=14.
2) Блок-схема словесного алгоритма цикла со счётчиком представлена на рис.16.
Рис. 16. Алгоритм цикла со счётчиком
Блоку 1 соответствует служебное слово BEGIN.
Блоку 2 соответствует оператор ввода readln (n).
Блоку 3 соответствуют операторы присваивания s:=0; d:=1;
Блоку 4 соответствует оператор цикла со счётчиком for i:=1 to n do.
Блоку 5 соответствуют операторы присваивания d: =2 * d; s: =s + d;
Блоку 6 соответствует оператор вывода Writeln (‘d= ’, d, ‘s = ’, s);
Блоку 7 соответствует служебное слово END.
Программа алгоритма цикла со счётчиком, представленного на рис.16.
s, d, i, n :integer;
writeln (‘ввести количество циклов-n’);
Writeln (‘ d= ’, d, ‘ s = ’, s);
Циклический алгоритм с предусловием задан в виде словесного описания.
Заданы начальные значения переменных:
Начало цикла. Пока y>x выполнить:
Определить количество циклов k и значения переменной y после выхода из цикла.
1) Цикл выполняется до тех пор, пока выполняется условие y>x.
Так как y=5, x=1, то условие y>x выполняется и значение y вычисляется по формуле y = y – x.
В результате выполнения первого цикла y=4.
Во втором цикле условие y>x выполняется, после второго цикла значение y=3.
В третьем цикле условие y>x выполняется, после окончания третьего цикла значение y=2.
В четвертом цикле условие y>x выполняется, после выполнения цикла значение y=1.
При значениях y=1, x=1 условие y>x не выполняется, цикл не будет выполняться. Следовательно, цикл закончится и выполнится четыре цикла.
На выходе из цикла значения переменных будут равны: k=4, y=1, x=1.
2) Программа алгоритма цикла с предусловием, представленного на рис.12.
writeln (‘ ввести x, y ’);
writeln (‘ k=’, k , ‘ y= ’ , y);
В программе до выполнения цикла не задано начальное значение k. По умолчанию оно равно нулю.
В примере используется оператор цикла с предусловием, который в данном примере выполняется при условии y>x. Условие проверяется при входе в цикл. В теле цикла счётчик задан в виде оператора присваивания k:=k+1, который выдаёт количество выполненных циклов.
Циклический алгоритм примера 2 переписать, используя оператор цикла с постусловием. Результат будет тот же.
Программа алгоритма цикла с постусловием, представленного на рис.13.
writeln (‘ввести x, y , ’);
readln (‘ k=’ , k , ‘ y= ’, y);
Требуется найти максимальный элемент одномерного массива и его номер по порядку следования в массиве. Представить алгоритм задачи в виде блок-схемы и написать по ней программу.
Алгоритм поиска: вводим переменную Mах, в которую записываем 1-ый элемент массива. Затем в цикле сравниваем каждый последующий элемент с Mах. Если число, хранящееся в текущем элементе, больше хранящегося в Mах, то число из текущего элемента записываем в Mах.
Рекомендуется перед написанием программы составить таблицу идентификаторов.
Лабораторная работа №4. “Программирование циклических вычислительных процессов”
Цель работы: освоение методов составления алгоритмов циклических вычислительных процессов и организации циклических программ сложной структуры.
Теоретическая часть
4.1.1. Циклические алгоритмы.
Цикл – это последовательность действий, которая может выполняться более одного раза.
Циклический алгоритм – это алгоритм, содержащий один или несколько циклов.
Имеется 3 вида циклов:
— цикл с предусловием;
— цикл с постусловием;
— цикл со счетчиком (счетный цикл).
Если выполнение цикла связано с каким-либо логическим условием, то используются циклы с предусловием или с постусловием.
Циклы со счетчиком представляют такой класс, в котором выполнение тела цикла должно повторяться заранее определенное число раз.
Блок-схемы циклических алгоритмов выглядят следующим образом:
1. Цикл со счетчиком.
2. Цикл с предусловием. 3. Цикл с постусловием.
4.1.2 Операторы цикла в языке программирования C++.
В C++ для каждого вида цикла имеется соответствующий оператор:
— цикл типа while (с предусловием);
— цикл типа do…while (с постусловием);
— цикл типа for (счетный).
1.Оператор цикла типа while
while (условие) оператор;
где: (условие) – логическое выражение;
оператор – выполняемый в цикле оператор или тело цикла.
Если тело цикла представляет собой составной оператор, то его нужно заключить в операторные скобки<. >:
Схема работы такого цикла: пока условие является истинным (true), выполняется тело цикла и снова проверяется условие и т.д. Когда условие станет ложным (false) цикл завершает работу.
2. Оператор цикла типа do…while
Схема работы такого цикла: сначала выполняется оператор, потом проверяется условие, если условие является истинным, выполняется оператор и снова проверяется условие и т.д. Когда условие станет ложным, цикл завершает работу.
Если тело цикла представляет собой составной оператор, то, как и для цикла с предусловием, его нужно заключить в операторные скобки<. >:
3. Оператор цикла типа for
A – начальное выражение, которое задает начальные значения параметру цикла и при необходимости начальные значения другим параметрам. Например:
i=0, x=0.5, p=1, s=0
B – условное выражение, которое проверяет условие продолжения работы цикла. Например:
C – выражение приращения, которое задает приращение параметру цикла и при необходимости другим параметров, тогда они записываются списком. Например: x+=0.1, i++
4.1.3 Пример составления алгоритма и программы на языке C++ для циклического вычислительного процесса.
Вычислить значение выражения:
b – исходная величина, ее значение вводятся с клавиатуры и не изменяется;
a – изменяется в диапазоне [0;10] с шагом 1;
y – результат, его значения выводятся на экран.
Исходя из условия задания переменная a является целочисленной, поэтому может быть использована в качестве счетчика в счетном цикле.
Блок-схема алгоритма решения данной задачи с использованием счетного цикла выглядит следующим образом:
Текст программы на языке C++, соответствующей данному алгоритму, выглядит следующим образом:
else printf(“ y не существуетn”);
Блок-схема алгоритма решения данной задачи с использованием цикла с предусловием выглядит следующим образом:
Текст программы на языке C++, соответствующей данному алгоритму, выглядит следующим образом:
else printf(“ y не существуетn”);
Блок-схема алгоритма решения данной задачи с использованием цикла с постусловием выглядит следующим образом:
Текст программы на языке C++, соответствующей данному алгоритму, выглядит следующим образом:
else printf(“ y не существуетn”);
Практическая часть
4.2.1 Требования к выполнению работы:
Выполнить задание из лабораторной работы № 3 для диапазона значений одной из переменных. Изменяемая переменная, диапазон ее изменения и шаг указаны в таблице 4. Составить блок-схемы алгоритмов и программы для двух типов циклов, указанных в индивидуальном задании (таблица 4).
Оформить вывод результатов таким образом, чтобы четко выделялись значения изменяемого параметра и при каждом его конкретном значении выводились значения результата (трех переменных из столбца 2 таблицы 3) в виде таблицы.
Порядок выполнения работы.
1. Выполнить анализ задания, сформулировать постановку задачи.
2. Составить блок-схемы алгоритмов.
3. Составить программу на языке C++. Предусмотреть ввод исходных данных с клавиатуры и вывод результатов на экран.
4. Выполнить проверку работоспособности программы на различных исходных данных.
5. Выполнить анализ полученных результатов.
Варианты индивидуальных заданий.
Варианты индивидуальных заданий выбираются из таблицы 4 в соответствии с номером студента в списке группы в журнале преподавателя.
Алгоритмы и исполнители
Команда цикла обеспечивает повторное выполнение последовательности команд (тела цикла) по некоторому условию.
Для программирования алгоритмов циклической структуры в системе программирования КуМир предусмотрено два вида циклов: цикл с предусловием (цикл пока) и цикл с параметром (цикл для).
Цикл с предусловием (цикл пока)
Цикл с предусловием (цикл пока) — цикл, выполнение которого повторяется, пока истинно условие цикла. Служебные слова НЦ (начало цикла) и КЦ (конец цикла)пишутся строго одно под другим и соединяются вертикальной чертой. Правее этой черты записывается повторяемая последовательность команд (тело цикла).
При его выполнении ЭВМ циклически повторяет следующие действия:
а) проверяет записанное после слова пока условие;
б) если условие не соблюдается (условие ложно), то выполнение цикла завершается и ЭВМ начинает выполнять команды, записанные после КЦ. Если же условие соблюдается (условие истинно), то ЭВМ выполняет тело цикла, снова проверяет условие и т.д.
Если условие в цикле пока не соблюдается с самого начала, то тело цикла не выполняется ни разу.
Замечание. Выполнение цикла пока может и не завершиться, если условие все время будет истинным (эту ситуацию принято называть зацикливанием). Поэтому во избежание подобных ситуаций в теле цикла должны содержаться команды изменения условия.
Дано целое положительное число N . Вычислить факториал этого числа: N ! = 1 * 2 * 3 * . * N.
алг Факториал
нач цел F , N , i
вывод ‘ Введите N ‘
ввод N
F : = 1
i : = 1
нц пока i < = N
F : = F * i
i : = i + 1
кц
вывод ‘ Факториал = ‘, F
кон
Цикл с параметром (цикл для)
Цикл с параметром (цикл для) — повторное выполнение тела цикла, пока целочисленный параметр пробегает множество всех значений от начального ( i 1 ) до конечного ( in ):
Здесь i — переменная целого типа, называемая параметром цикла: i 1, in — начальное и конечное значения параметра цикла, которые могут быть заданы либо произвольными целыми числами, либо выражениями с целыми значениями; h — шаг изменения значения параметра цикла, значением шага может быть любое целое число (как положительное, так и отрицательное). Запись "шаг h " в первой строке может вообще отсутствовать, при этом по умолчанию значение шага принимается равным 1.
При выполнении цикла для, его тело выполняется для i = i 1, i = i 1 + h , i = i 1 + 2* h , . . . , i = in . Правила алгоритмического языка допускают задание любых целых i 1, in , h . В частности, in может быть меньше i 1. Если при этом значение h < 0, то цикл выполняется нужное количество раз, а если h имеет положительное значение, то этот случай не считается ошибочным — просто тело цикла не будет выполнено ни разу, а ЭВМ сразу перейдет к выполнению команд, записанных после КЦ. При h = 0 происходит зацикливание.
Пример: Дано целое положительное число N . Вычислить факториал этого числа: N ! = 1 * 2 * 3 * . * N .
алг Факториал
нач цел F , N , i
вывод ‘ Введите N ‘
ввод N
F : = 1
нц для i от 1 до N
F : = F * i
кц
вывод ‘ Факториал = ‘, F
кон
Запись алгоритмов в виде блок-схем
Алгоритмы можно записывать по-разному. Всякий алгоритм может быть:
• записан на естественном языке;
• изображен в виде блок-схемы;
• записан на алгоритмическом языке.
Блок-схема – графическое изображение алгоритма, подлежащего программированию.
Базовая структура представляет собой определенный набор блоков и стандартных способов их соединения для выполнения типичных последовательных действий. К основным структурам относятся: линейные, разветвляющиеся, циклические.
Линейными называются алгоритмы, в которых действия осуществляются последовательно друг за другом. Стандартная блок-схема линейного алгоритма приводится на рис. 2.3.
Рис. 2.3. Примеры структур алгоритмов: б – алгоритм с ветвлением; в – алгоритм с циклом
Разветвляющимся называется алгоритм, в котором действие выполняется по одной из возможных ветвей решения задачи, в зависимости от выполнения условий. В отличие от линейных алгоритмов, в которых команды выполняются последовательно одна за другой, в разветвляющиеся алгоритмы входит условие, в зависимости от выполнения или невыполнения которого выполняется та или иная последовательность команд (серий).
Примером может являться разветвляющийся алгоритм, изображенный в виде блок-схемы (рис. 2.3). Аргументами этого алгоритма являются две переменные А, В, а результатом – переменная X. Если условие А >= В истинно, то выполняется операция Х :=А * В, в противном случае выполняется Х := А + В. В результате печатается то значение переменной X, которое она получает в результате выполнения одной из серий команд.
Циклическим называется алгоритм, в котором некоторая часть операций (тело цикла – последовательность команд) выполняется многократно.
Перед операцией цикла осуществляются операции начального присвоения значений тем переменным, которые используются в теле цикла. В цикл входят в качестве базовых следующие структуры: блок проверки условия и блок, называемый телом цикла. Если тело цикла расположено после проверки условий (цикл с предусловием), то может случиться, что при определенных условиях тело цикла не выполнится ни разу. Такой вариант организации цикла, управляемый предусловием, называется цикл типа пока (здесь условие – это условие на продолжение цикла).
Если тело цикла расположено перед проверкой условия, то цикл называется циклом с постусловием. Истинность условия в этом случае – условие окончания цикла. Отметим, что возможна ситуация с постусловием и при организации цикла пока.
Рассмотрим циклический алгоритм типа пока на примере алгоритма вычисления факториала, изображенного на рис. 2.3, в. Переменная N получает значение числа, факториал которого вычисляется. Переменной М, которая в результате выполнения алгоритма должна получить значение факториала, присваивается первоначальное значение 1. Переменной К также присваивается значение 1. Цикл будет выполняться, пока справедливо условие N > K. Тело цикла состоит из двух операций М := М * K и К := К + 1.
Циклические алгоритмы, в которых тело цикла выполняется заданное число раз, реализуются с помощью цикла со счетчиком. Цикл со счетчиком реализуется с помощью команды повторения.
Процесс решения сложной задачи довольно часто сводится к решению нескольких более простых подзадач. Соответственно при разработке сложного алгоритма он может разбиваться на отдельные алгоритмы, которые называются вспомогательными. Каждый такой вспомогательный алгоритм описывает решение какой-либо подзадачи.
Независимо от того, на каком языке программирования будет написана программа, алгоритм решения любой задачи на ЭВМ может быть составлен из команд: