Решение учебных задач на циклы
Применяя полученные навыки работы с типовыми алгоритмами, рассмотрим несколько учебных задач различных типов. На практике нередко встречаются задачи, для которых число шагов цикла заранее неизвестно и не может быть вычислено. Как правило, в этом случае расчетный цикл работает до выполнения некоторого условия, определяющего достижение требуемого результата. Приведем пример подобной задачи. Задана функция и ее разложение в ряд:
Перед нами -- типичная задача на ряды. С ростом величины n слагаемые Реализуем все сказанное в следующей программе:
{$N+} {Совместимость с процессором 80287 – для использования double} var x,sn,sn1,xn,nf,eps:double; k,n:longint; znak:integer; begin writeln ('Введите значение x:'); read (x); writeln ('Введите требуемую точность:'); read (eps); sn1:=0; sn:=0; k:=0; n:=0; xn:=1; nf:=1; znak:=1; repeat sn1:=sn; {Текущая сумма стала предыдущей для следующего шага} sn:=sn+znak*xn/nf; {Выполняем шаг цикла} {Меняем переменные для следующего шага:} znak:=-znak; xn:=xn*sqr(x); nf:=nf*(n+1)*(n+2); n:=n+2; k:=k+1; until abs(sn1-sn)<eps; writeln ('Значение =',cos(x):20:16); writeln ('Предыдущая сумма=',sn1:20:16); writeln ('Текущая сумма=',sn:20:16); writeln ('Число шагов=',k); reset (input); readln; end. Даже не владея приемами работы с графикой (см. гл. 25), можно наглядно проиллюстрировать результаты своих расчетов. Рассмотрим в качестве примера задачу. Сформировать на экране изображение функции f(x)= cos(x)+ln(x) на интервале [1, 5] с шагом 0.2. Программа с комментариями приводится далее. var x,y,{ Значение аргумента и функции } a,b,{ Интервал } ymin,ymax:real; { Мин. и макс. y } cy, { Позиция столбца на экране } i:integer; begin a:=1; b:=5; { Первый цикл нужен, чтобы определить минимальное и максимальное значения функции на заданном интервале } x:=a; ymin:=1e20; ymax:=1e-20; while x<=b do begin y:=cos(x)+ln(x); if y<ymin then ymin:=y else if y>ymax then ymax:=y; x:=x+0.2; end; { Во втором цикле обработки можно выводить на экран значения функции } x:=a; while x<=b do begin y:=cos(x)+ln(x); cy:=round(8+(y-ymin)*(70/(ymax-ymin))); { Чтобы пересчитать y из границ [ymin,ymax] в границы [8,78] (столбцы экрана, в которые выводим график), используем формулу cy= 8 + (y-ymin)* (78-8)/(ymax – ymin) } writeln; write (x:7:3,' '); { Выводим очередной x и пробел } for i:=8 to cy do write ('*'); { Рисуем звездочками значение y } x:=x+0.2; { Переходим к следующему x } end; end. В заключительном примере этого пункта проверим, является ли введенное положительное целое число N простым. Простое число делится без остатка только на единицу и само на себя. В цикле последовательно проверим остатки от деления N на числа 2, 3,...,N-1. Если найден хотя бы один остаток, равный нулю, число не является простым и дальнейшие проверки бессмысленны. Обратите внимание на использование логической переменной-флага s в этой программе.
var n,i:longint; s:boolean; begin write ('N='); readln (n); s:=true; for i:=2 to n-1 do if n mod i = 0 then begin s:=false; break; end; if s=true then writeln ('простое') else writeln ('НЕ простое'); end.
Читайте также: A) устный или письменный запрет, наложенный на какое-либо решение управомоченным на то органом или лицом Воспользуйтесь поиском по сайту: ![]() ©2015 - 2025 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...
|