Типовые задачи с использованием циклов реферат

Обновлено: 28.06.2024

Освоив, операторы присваивания и научившись пользоваться условным оператором IF, теоретически можно написать любую программу. Но в нашей повседневной жизни мы очень часто встречаемся с процессами, которые повторяются во времени несколько раз. Например: прорастание растения из семечки, смена времён года, смена времени суток, покраска забора, укладка кирпича и т.д. Гораздо удобнее в этих случаях использовать циклы. Циклы позволяют существенно упростить алгоритм и текст программы, сделать программу изящной, гибкой, более привлекательной. Сегодня на уроке мы будем решать такие задачи и убедимся в этом сами.

II. Актуализация знаний и умений учащихся.

Но прежде чем мы перейдём к решению задач, давайте вспомним с вами, какие циклы вы знаете?

В чём отличительная черта цикла While?

В чём отличительная черта цикла Repeat?

В чём отличительная черта цикла с параметром?

Ответы учащихся сопровождаются демонстрацией слайдов №№ 2-8 презентации к уроку см. Приложение.

III. Решение задач.

Гражданин 1 марта открыл счёт в банке, вложив 1000 рублей. Через каждый месяц размер вклада увеличивается на 2% от имеющейся суммы. Определить:

Сумму вклада через один, два, …, двенадцать месяцев.

Текст задачи выводится на экран слайд презентации № 9.

1. Анализ условия:

  • Что нам известно?
  • Что надо найти?
  • Сколько переменных используется в задаче?
  • Какие переменные мы будем вводить, а какие рассчитывать?
  • К какому типу относятся переменные вводимые с клавиатуры?
  • Если эти переменные относятся к вещественному типу, то какой результат мы получим?
  • Как мы обозначим переменные?

Проанализировав условие данной задачи, мы можем записать описательную часть программы на языке Pascal.

Слайд презентации № 10.

2. Построение математической модели решения:

Первоначальный вклад а0=1000

Слайд презентации № 11.

3. Составление алгоритма решения:

Слайд презентации № 12.

4. Запись программы:

Program vklad;
Var i: integer;
a: real;
Begin Writeln (‘введите значение первоначального вклада’);

Readln (а);
For i:=1 to 12 do
begin a:= a + a*0,02;
writeln (a); end;

Слайд презентации № 13.

А теперь запишите данную программу с помощью цикла ДО или цикла ПОКА кому как удобнее.

Program vklad;/
Var i: integer;
a: real;
Begin Writeln (‘введите значение первоначального вклада’);

Readln (а);
i:=1;
repeat
a:= a+a*0,02;
writeln (a);
i:=i+1;
until i>12;

Program vklad;
Var i: integer;
a: real;
Begin Writeln (‘введите значение первоначального вклада’);

Создавая программу, программист сталкивается с тем, что часто приходится выполнять одни и те же действия над последовательностью значений. Для решения таких задач, программист использует циклы. Циклические конструкции являются важным компонентом программирования. Программисты редко пишут программы, которые используются только один раз. Большинство из них выполняются многократно, в основном каждый раз делая одни и те же операции, но с достаточными вариациями, в результате чего получаются ценные результаты. Часто непосредственно внутри самой программы используются множество повторений, также с небольшими вариациями. Вышесказанное позволяет сделать вывод, что исследование особенностей циклических конструкций в различных языках программирования остается актуальным, особенно в процессе подготовки специалиста-информатика.

Научная проблема заключена в необходимости совершенствования знаний о циклических конструкциях и в повышении эффективности их практического использования.

Рабочая гипотеза: решение научной проблемы возможно путем изучения и анализа материалов из различных источников и разработки на практике программ с использованием циклов.

Цель работы: изучение циклических конструкций в языках высокого уровня.

- ознакомиться с особенностями некоторых современных языков программирования высокого уровня;

- исследовать циклические конструкции в языках высокого уровня;

- подготовить литературный обзор источников по теме работы;

Объект исследования: – языки программирования высокого уровня.

Предмет исследования – циклические конструкции.

Метод исследования заключен в анализе, обобщения литературы и программировании.

Научной новизной является получение новых знаний об использовании циклических конструкций в языках программирования высокого уровня.

Практическая значимость заключается в приобретении навыков по использованию циклических конструкций для написания программ.

Источниковедческая база – библиотека ТФ МГУКИ, интернет.

1.1 Классификация языков программирования

Язык программирования - это формализованный язык для описания алгоритма решения задач на компьютере. Языки программирования можно разделить на:

- языки программирования низкого уровня;

- языки программирования высокого уровня.

В группу языков низкого уровня входят машинные языки и языки символического кодирования: (Автокод, Ассемблер). Операторы этого языка – это те же машинные команды, но записанные мнемоническими кодами, а в качестве операндов используются не конкретные адреса, а символические имена. Все языки низкого уровня ориентированы на определенный тип компьютера, т.е. являются машинно-зависимыми. Машинно-ориентированные языки – это языки, наборы операторов и изобразительные средства которых существенно зависят от особенностей ЭВМ (внутреннего языка, структуры памяти и т.д.).

Языки программирования высокого уровня отличаются от языков низкого уровня, во-первых, тем, что они используют более строгий контроль, во-вторых, многие детали обрабатываются автоматически, и, в-третьих, программисту для создания своего приложения приходится писать меньшее количество строк.

Кроме того в языках высокого уровня распределением регистров занимается компилятор, так что программисту не надо писать код, обеспечивающий перемещение данных между регистрами и памятью.

Последовательности вызова процедур генерируются автоматически; программисту нет необходимости описывать помещение аргументов функции в стек и их извлечение оттуда.

Для описания структур управления программист может использовать также ключевые слова, как if, while; последовательности машинных команд, соответствующие этим описаниям компилятор генерирует динамически.

Язык С был разработан в начале 1970-х годов Денисом Ритчи (Dennis Ritchie), работавшим в то время в компании Bell Laboratories. Хотя первоначально язык С создавался для разработки операционных систем и компиляторов, он быстро получил популярность в среде программистов и приобрел дополнительные преимущества благодаря его стандартизации, выполненной Американским институтом национальных стандартов (ANSI — American National Standards Institute).

Язык С сначала рассматривался просто как некоторый шаг вперед по сравнению с машинным языком. По этой причине его синтаксис более краток и выразителен, чем синтаксис других языков высокого уровня, использующих полные слова английского языка для выражения тех языковых конструкций, которые в языке С представляются с помощью специальных символов. Эта лаконичность является одной из причин чрезвычайной популярности языка С, поскольку позволяет программистам эффективно выражать сложные алгоритмы. Часто, краткое представление алгоритма более доступно пониманию, чем его пространное описание [2].

Операторы передачи управления принудительно изменяют порядок выполнения команд. В языке Free Pascal таких операторов пять: goto, break, continue, exit и halt .

Оператор goto метка , где метка — обычный идентификатор, применяют для безусловного перехода, он передаёт управление оператору с меткой.

Обычно применение оператора goto приводит к усложнению программы и затрудняет отладку. Использование оператора нарушает принцип структурного программирования 11 Как говорил учитель программирования авторов книги Владимир Андреевич Реуцкий: "Использование goto — признак дурного тона". , согласно которому все блоки, составляющие программу, должны иметь только один вход и один выход. В большинстве алгоритмов применения оператора goto можно избежать, в нашей книге мы будем его использовать, но читатель должен знать о наличии этого оператора в языке.

Операторы break и continue используют только внутри циклов. Оператор break осуществляет немедленный выход из циклов repeat, while, for , и управление передается оператору, находящемуся непосредственно за циклом. Оператор continue начинает новую итерацию цикла, даже если предыдущая не была завершена.

Оператор exit осуществляет выход из подпрограммы.

Оператор halt прекращает выполнение программы.

3.5.5 Решение задач с использованием циклов

Рассмотрим использование циклических операторов на конкретных примерах.

ЗАДАЧА 3.9. Найти наибольший общий делитель (НОД) двух натуральных чисел и .

Для решения поставленной задачи воспользуемся алгоритмом Евклида: будем уменьшать каждый раз большее из чисел на величину меньшего до тех пор, пока оба значения не станут равными, так, как показано в таблице 3.4.

В блок-схеме решения задачи, представленной на рис. 3.28, для решения поставленной задачи используется цикл с предусловием, то есть тело цикла повторяется до тех пор, пока А не равно В. Следовательно, при создании программы воспользуемся циклом while..do .

Алгоритм поиска наибольшего общего делителя двух чисел

Программа на языке Free Pascal, реализующая поставленную задачу:

Алгоритм вычисления факториала

N(N!=1 \cdot 2 \cdot 3 \cdot \ldots \cdot N).

ЗАДАЧА 3.10. Вычислить факториал числа .

Выходные данные: factorial — значение факториала числа N , произведение чисел от 1 до N , целое число.

Промежуточные переменные: i — параметр цикла, целочисленная переменная, последовательно принимающая значения 2, 3, 4 и так далее до N .

Блок-схема приведена на рис. 3.29.

Итак, вводится число N . Переменной factorial , предназначенной для хранения значения произведения последовательности чисел, присваивается начальное значение, равное единице. Затем организуется цикл, параметром которого выступает переменная i . Если значение параметра цикла меньше или равно N , то выполняется оператор тела цикла, в котором из участка памяти с именем factorial считывается предыдущее значение произведения, умножается на текущее значение параметра цикла, а результат снова помещается в участок памяти с именем factorial . Когда параметр i становится больше N , цикл заканчивается, и на печать выводится значение переменой factorial , которая была вычислена в теле цикла.

Ниже представлен текст программы вычисления факториала на языке Free Pascal.

Алгоритм возведения вещественного числа в целую степень

Известно, что для того, чтобы получить целую степень n числа a , нужно умножить его само на себя n раз. Результат этого умножения будет храниться в участке памяти с именем p . При выполнении очередного цикла из этого участка предыдущее значение будет считываться, умножаться на основание степени a и снова записываться в участок памяти p . Цикл выполняется n раз.

В таблице 3.5 отображён протокол выполнения алгоритма при возведении числа 2 в пятую степень: a=2, n=5 . Подобные таблицы, заполненные вручную, используются для тестирования — проверки всех этапов работы программы.

Далее приведён текст программы, составленной для решения поставленной задачи.

N

ЗАДАЧА 3.12. Вычислить сумму натуральных четных чисел, не превышающих .

Выходные данные: S — сумма четных чисел.

Промежуточные переменные: i — параметр цикла, принимает значения 2, 4, 6, 8 и так далее, также имеет целочисленное значение.

При сложении нескольких чисел необходимо накапливать результат в определённом участке памяти, каждый раз считывая из этого участка предыдущее значение суммы и прибавляя к нему следующее слагаемое. Для выполнения первого оператора накапливания суммы из участка памяти необходимо взять такое число, которое не влияло бы на результат сложения. Перед началом цикла переменной, предназначенной для накапливания суммы, необходимо присвоить значение нуль ( s=0 ). Блок-схема решения этой задачи представлена на рис. 3.31.

Так как параметр цикла i изменяется с шагом 2, в блок-схеме, построенной для решения данной задачи (рис. 3.31), использован цикл с предусловием, который реализуется при составлении программы с помощью оператора while..do :

Алгоритм вычисления суммы чётных натуральных чисел

Эту же задачу можно решить иначе, используя цикл for..do :

В таблице 3.6 приведены результаты тестирования программы для n=7 . Несложно заметить, что при нечётных значениях параметра цикла значение переменной, предназначенной для накапливания суммы, не изменяется.

ЗАДАЧА 3.13. Дано натуральное число . Определить — количество делителей этого числа, меньших его (например, для делители 1, 2, 3, 4, 6. Количество ).

Выходные данные: целое число K — количество делителей N .

Промежуточные переменные: i — параметр цикла, возможные делители числа N .

В блок-схеме, изображённой на рис. 3.32, реализован следующий алгоритм: в переменную K , предназначенную для подсчёта количества делителей заданного числа, помещается значение, которое не влияло бы на результат ( k=0 ). Далее организовывается цикл, в котором изменяющийся параметр i выполняет роль возможных делителей числа N . Параметр цикла меняется от 1 до N/2 c шагом 1. Если заданное число делится нацело на параметр цикла, это означает, что i является делителем N , и значение переменной K следует увеличить на единицу. Цикл необходимо повторить N/2 раз.

В таблице 3.7 отображены результаты тестирования алгоритма при определении делителей числа N=12 .

3. Найти произведение чисел А и В, используя только операцию сложения.

A*B=A+A+A+A… B раз
A,B
I:=0 P:=0
I =B DO
BEGIN
A:=A-B;
I:=I+1;
END;
WRITE(‘При делении ',P,' на ',B,' целая
часть=',I,' остаток=',A );
END.
Деление на 7.
PROGRAM Z1;
USES CRT;
VAR A,B,P,I:INTEGER;
BEGIN
WRITE(' ВВЕДИТЕ ДЕЛИМОЕ A ');
READLN(A);
P:=A;
I:=0;
WHILE A>=7 DO
BEGIN
A:=A-7;
I:=I+1;
END;
WRITE(‘При делении ',P,' на 7 целая
часть=',I,' остаток=',A );
END.

6. Задачи ЕГЭ №8

Определите, что будет
напечатано в результате
работы следующего
фрагмента программы:
var k, s: integer;
begin
s:=0;
k:=0;
while s 1024
7. для достижения этого значения переменную
s нужно 103 раза увеличить на 10, поэтому
цикл выполнится 103 раза
8. так как k – это счётчик шагов цикла,
конечное значение k будет равно 103
9. Ответ: 103.

1) Определите, что будет напечатано
в результате работы следующего
фрагмента программы:
var n, s: integer;
begin
n := 0;
s := 512;
while s >= 0 do begin
s := s - 20;
n := n + 1
end;
write(n)
end.
512/20=25 И 12 В ОСТАТКЕ
12>S => n+1, 25+1=26
2) Определите, что будет напечатано в
результате работы следующего
фрагмента программы:
var n, s: integer;
begin
n := 4;
s := 15;
while s 250, поэтому цикл
прокрутится 20 раз.
N=40+4(нач.значение)=44

1) n := 3, 150-3=147 (за время
работы цикла n будет =147),
var n, s, d: integer;
цикл работает 147/7=21 раз
begin
2) Цикл остановится при s>1200readln(d);
38 =1162. 1162/21=55.3 (min
n := 3;
значение 56)
s := 38;
1162/20=58.1 (21-1=20
while s 0 DO
BEGIN
N:=N DIV 10;
k:=k+1
END;
WRITELN(k)
END.
Сложить 1-ю и последнюю
цифры числа.
VAR N,C:INTEGER;
BEGIN
WRITE(' ВВЕДИ ЧИСЛО ');
READLN(N);
C:=N MOD 10;
WHILE N>10 DO
BEGIN
N:=N DIV 10;
END;
WRITELN(C+N)
END.

12. Найти число делителей числа

VAR N,D:INTEGER;
BEGIN
WRITE(' ВВЕДИ ЧИСЛО ');
READLN(N);
D:=2;
WHILE D B
A>B
A:=A-B
B:=B-A
A
program NOD;
uses crt;
var a,b:integer;
begin
readln(a,b);
while a<>b do
if a>b
then a:=a-b
else b:=b-a;
write(a);
end.
При a>b
while b > 0 do begin
r:= a mod b;
a:= b;
b:= r;
end;

14. Задачи №20 из ЕГЭ

Ниже записана программа. Получив на вход
число , эта программа печатает два числа, L и
M. Укажите наибольшее из таких чисел X, при
вводе которых алгоритм печатает сначала 3, а
потом 7.
var x, L, M: integer;
begin
readln(x);
L:=0; M:=0;
while x > 0 do begin
L:= L + 1;
M:= M + x mod 10;
x:= x div 10;
end;
writeln(L); write(M);
end.
Что делает этот цикл?
1) while x > 0 do begin
L:= L + 1;
x:= x div 10;
end; (счётчик цикла)
Что делает этот цикл?
2) while x > 0 do begin
M:= M + x mod 10;
x:= x div 10;
end; (сумма цифр числа)
Ответ: 700

15. Ниже записана программа. Получив на вход число , эта программа печатает два числа, а и b. Укажите наименьшее из чисел Х, при

вводе
которых алгоритм печатает сначала 19, а потом 4.
var x, a, b, c: integer;
begin
readln(x);
a := 0; b := 10;
while x>0 do begin
с := x mod 10;
a := a+c;
if c x := x div 10;
end;
writeln(a); write(b);
end.
while x>0 do begin
с := x mod 10;
a := a+c;
x := x div 10;
end;
Сумма цифр числа х (= 19) 19= 9+9+1
и т.п.
b:=10;
if c 1-я с (цифра) явно min (469 ?)
Ручная прокрутка! (для проверки)

16. Открытый банк заданий ФИПИ

Определите число, которое будет
напечатано в результате
выполнения программы
var n, s: integer;
begin
n := 0;
s := 301;
while s > 0 do
begin
s := s - 10;
n := n + 2
end;
write(n)
end.
301/10=30 и 1 в остатке, 1>0, т.о.
N=2*30+2=62
Требовалось написать программу, при выполнении
которой с клавиатуры считывается натуральное число N,
не превосходящее 109, и выводится минимальная цифра
этого числа. Программист торопился и написал программу
неправильно.
var N: longint;
digit, min_digit: integer;
begin
readln(N);
min_digit := 9;
while N >= 10 do
begin
digit := N mod 10;
if digit =10 do и writeln(digit)

17. Напишите в ответе число, которое будет напечатано в результате выполнения следующего алгоритма

var a,b,t,M,R :integer;
Function F(x:integer):integer;
begin
F := 2*(x*x-16)*(x*x-16)+5
end;
begin
a := -11; b := 11;
M := a; R := F(a);
for t := a to b do begin
if (F(t) 0 для любых Х, т.о.
min F если (x2-16)2 =0
Х=-4 или х=4
Отрезок от -11 до 11, первый min = -4
Ответ: 12

Читайте также: