Программирование циклических алгоритмов




   

 

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

Общие сведения

Алгоритм называется циклическим, если он содержит многократное выполнение одних и тех же операторов при различных значениях промежуточных данных. Число повторений этих операторов может быть задано в явной (цикл с известным заранее числом повторений) или неявной (цикл с неизвестным заранее числом повторений) форме.

Перед выполнением работы необходимо изучить различные схемы организации циклов и операторы FOR, WHILE, REPEAT.

Примеры

Пример1: На промежутке от 1 до M найти все числа Армстронга. Натуральное число из n цифр называется числом Армстронга, если сумма его цифр, возведенных в n-ю степень, равна самому числу.

Этапы решения задачи:

1. Математическая модель: xО[1;M], x=

2. Составим блок схему программы:

 

 


Опишем блок "Подсчитываем, сколько цифр в числе i"

 

Опишем блок "Проверяем, является ли i числом Армстронга"

 

Дальнейшая детализация не требуется, запишем блок-схему целиком:

 

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

PROGRAM Primer_1;

vari,k,s,p,n: Integer;

BEGIN

Write('Введите M '); Readln(m);

For i:=1 to M do

begin

s:=0; k:=i; n:=0;

While k<>0 do

begin k:=k DIV 10; n:=n+1 end;

k:=i;

While k<>0 do

begin p:=k MOD 10; k:=k DIV 10;

If p<>0 then s:=Trunc (s+Exp(n*Ln(p)))

end;

If s=f then WriteLn (f)

end;

END.

 

Контрольные вопросы

1. Как записывается и как работает оператор FOR?

2. Для организации каких циклов применим оператор FOR?

3. В чем отличие оператора WHILE от оператора REPEAT?

4. Как программируются циклические алгоритмы с явно заданным числом повторений цикла?

5. Как программируются циклические алгоритмы с заранее неизвестным числом повторений цикла?

6. Напишите оператор цикла, который не выполняется ни разу.

7. Напишите оператор цикла, который выполняется неограниченное число раз.

8. Замените оператор "Repeat A Until B" равносильным фрагментом программы с оператором While.

Задачи

 


1. Дано натуральное n. Вычислить:

2. Дано натуральное n. Вычислить:

3. Дано действительное число х, натуральное число n. Вычислить:


4. Дано натуральное n. Вычислить:

 

5. Дано натуральное n. Вычислить:

 

6. Найти все двузначные числа, сумма цифр которых не меняется при умножении числа на 2.

7. Найти все трехзначные числа, сумма цифр которых равна данному целому числу.

8. Найти все трехзначные числа, средняя цифра которых равна сумме первой и второй цифр.

9. Найти все трехзначные числа, представимые в виде сумм факториалов своих цифр.

10. Найти двузначное число, обладающее тем свойством, что куб суммы его цифр равен квадрату самого числа.

 

 

Теория: операторы цикла

Цикл с параметром

Оператор цикла применяется при выполнении расчетов или других действий, повторяющихся определенное количество раз. Оператор имеет вид:

For i:= N1 To N2 Do "оператор";

либо

For i:= N1 DownTo N2 Do "оператор";

Здесь i - параметр цикла (переменная порядкового типа),

N1, N2 - начальное и конечное значения параметра цикла i.

N1, N2 могут быть константами, переменными или выражениями порядкового типа.

Напомним, что "оператор" может иметь вид: Begin "операторы" end;

Схема выполнения оператора цикла с параметром имеет вид:

 

В случае связки "To" цикл выполняется при условии N1 <= N2 и происходит с единичным возрастанием параметра цикла i от N1 до N2. В случае связки DownTo цикл выполняется при условии N1 >= N2 и происходит с единичным уменьшением параметра цикла i от N1 до N2.

В операторе цикла не разрешается присваивать параметру цикла какое-либо значение.

После окончания цикла значение параметра цикла "i" неопределенно.

Оператор цикла часто применяется для суммирования значений некоторой последовательности чисел или значений функции при известном числе операций суммирования. Напомним некоторые определения, связанные с расчетом суммы последовательности.

Сумма членов последовательности величин

a1, a2, a3,..., an

называется конечной суммой

Sn = a1 + a2 + a3+... + an

Для некоторых последовательностей известны формулы расчета конечных сумм, например:

при an = an-1 + d; Sn = (a1 + an)*n/2; - арифметическая прогрессия,

при an = an-1 * q; Sn= (a1 - an*q)/(1-q); - геометрическая прогрессия,

где d и q - постоянные числа.

Здесь N-ый член последовательности выражается через (N-1)-ый член. Такие зависимости называются реккурентными.

Конечная сумма последовательности может быть неизвестна, тогда для ее расчета применяется алгоритм суммирования членов последовательности в цикле от 1 до N. Приведем пример расчета конечной суммы последовательности: 12 + 32 + 52 +... + (2*N-1)2; Sn = N*(4*N2-1)/3;

PROGRAM SUM_K; { расчет конечной суммы }vara, S, Sn, i, N: word;Beginwrite('Введите число членов суммы N=');readln(N); S:= 0; For i:= 1 to N dobegin { циклсуммирования }a:= Sqr(2*i-1); S:=S+aend;Sn:= N*(4*N*N-1) div 3;Writeln('КонечнаясуммаS=', S:10:2); Writeln('Расчет конечной суммы по формуле Sn=', Sn:10:2);Writeln('Нажми Enter');ReadLnEnd.

В некоторых случаях "N"-ый член последовательности определяется через сумму предыдущих членов, например, an= p*Sn-1,

тогда Sn= Sn-1 + an = Sn-1*(1+р),

и конечную сумму можно рассчитать по формуле:

Sn = S0*(1+p)N,

где "S0" - начальная сумма.

Рассмотрим программу вычисления конечной суммы денежного вклада в банк через N месяцев при ежемесячной процентной ставке "pr" (5% cоответствуетpr=5).

PROGRAM VKLAD; { расчет конечной суммы вклада в банк }var S, Sn, pr: Real;i, N: Integer;BeginWrite('ВведитеначальнуюсуммувкладаS=');readln(S);Write('Введите процент по вкладу pr=');readln(pr);Write('Введите количество месяцев вклада N=');readln(N); For i:= 1 to N do S:= S*(1+pr/100); { циклпроизведений }Writeln('Конечная сумма вклада S=', S:10:2);{ Оператор для расчета "Sn" напишите самостоятельно }Writeln('Расчет конечной суммы вклада по формуле Sn=', Sn:10:2);Writeln('Нажмите Enter'); readlnEnd.

Часто применяются вложенные операторы цикла. Например, если необходимо провести все варианты расчета при изменении нескольких параметров в заданных диапазонах.

Составим программу расчета функции y = A*sin(x) - cos(x)/A; при изменении аргумента "x" в диапазоне от 0 до Pi с шагом Pi/100 и при изменении параметра "A" в диапазоне от 1 до 3 с шагом 0.5.

Program tabl;vary, x, a, dx: real;i, j: integer;BeginWriteln(' Расчетпоформуле: y=A*sin(x)-cos(x)/A; ');Writeln('--------------------------------------------------');Writeln('| X | A=1.0 | A=1.5 | A=2.0 | A=2.5 | A=3.0 |');Writeln('--------------------------------------------------');dx:= pi/100;for i:= 0 to 100 dobegin { внешний цикл изменения аргумента "X" }x:= dx*i; Write(x:8:4);forj:= 1 to 5 dobegin {вложеннный цикл изменения параметра "A" } A:= 0.5*(j+1);y:= A*sin(x)-cos(x)/A; Write(y:8:4) end;Writeln; {перевод курсора на новую строчку}if ((i+1) mod 20) = 0 thenreadln{задержка прокрутки экрана до нажатия Enter}end;readln;End.


Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2019-03-02 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: