русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

Решение учебных задач на циклы


Дата добавления: 2014-11-28; просмотров: 1330; Нарушение авторских прав


 

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

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

Задана функция и ее разложение в ряд:

n=0, 1, 2, ... (здесь n! обозначает факториал числа n, равный 1*2*3*...*n; при этом 0!=1). Найти число элементов ряда k, требуемое для достижения заданной точности ε.

Перед нами -- типичная задача на ряды. С ростом величины n слагаемые становятся все меньше, равно как и модуль разности между двумя соседними слагаемыми. Поэтому под достижением заданной точности будем понимать выполнение условия где sn, sn-1 -- суммы ряда, вычисленные на текущем и предыдущем шагах цикла, а значение ε задается малым числом, от 10-6 и ниже. Для вычисления x2n введем переменную xn, которую на каждом шаге цикла будем домножать на x2, аналогично, для вычисления текущего значения факториала используем переменную nf. Иной подход потребовал бы большого количества повторных вычислений на каждом шаге цикла, плюс был бы чреват большими потерями точности. Для вычисления (-1)n было бы странно использовать формулу ax=exln a -- вполне достаточно завести целочисленную переменную znak, равную 1, которая на каждом шаге цикла будет менять свое значение на противоположное оператором znak:=-znak;. Кроме того, так как требуемое число шагов заранее неизвестно, используем для всех основных переменных более точный тип double вместо real.

Реализуем все сказанное в следующей программе:

{$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.


 



<== предыдущая лекция | следующая лекция ==>
Типовые алгоритмы поиска максимума и минимума | Одномерные массивы. Описание, ввод, вывод и обработка массивов на Паскале


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

Генерация страницы за: 1.338 сек.