Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология
Образование Политология Производство Психология Стандартизация Технологии


Задача вычисления суммы первых n натуральных чисел



Математическая модель

Метод решения

1) s=0

2)  i=1(1)n: s=s+i

Реализация п.2 может быть выполнена тремя способами (наиболее эффективный – цикл с параметром)

1 способ

2) " i=1..n: s=s+i

2 способ

2.1) i: =1

2.2) пока i< =n:

3 способ

2.1) i: =1

2.2) повторять

до i> n

Информационная модель

Входные данные - количество натуральных чисел n, которые должны быть просуммированы;

Выходные данные - накопленная сумма s (целое число);

Промежуточные данные - i - текущее натуральное число из интервала от 1 по n.

Программная модель (1-ый способ)

program sumnat;

var n, s, i: word;

begin

{ввод исходных данных}

writeln('Введите количество натуральных чисел');

readln(n);

 

{реализация метода решения}

s: =0;

for i: =1 to n do

s: =s+i;

 

{вывод результата}

writeln('сумма первых ', n, ' натуральных чисел=', s)

end.

Примечание:

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

Алгоритм накопления произведения

Математической моделью такой задачи является формула

Р= , где аi – i-ый сомножитель

Метод решения заключается в том, что переменной, в которой накапливается произведение, в начале присваивается единица. Затем эта переменная последовательно домножается на все величины, произведение которых должно быть накоплено.

Задача вычисления произведения первых n натуральных чисел

Такое произведение в математике называется факториалом числа n (математическая запись этой функции n! )

Математическая модель

y=n! или y=1*2*3*...*n или y=

Метод решения

1) у=1

2) " i=1..n: y=y*i

Информационная модель

Входные данные - количество натуральных чисел n, которые должны быть перемножены;

выходные данные - накопленное произведение у (т.к. факториал быстро растущая функция, то целесообразно выбрать тип longint);

промежуточные данные - i - текущее натуральное число из интервала от 1 по n.

Программная модель

 

program faktorial;

var n, i: word;

y: longint;

begin

{ввод исходных данных}

writeln('Введите количество натуральных чисел');

readln(n);

 

{реализация метода решения}

y: =1;

for i: =1 to n do

y: =y*i;

 

{вывод результата}

writeln('произведение первых ', n, ' натуральных чисел=', y)

end.

Вывод большого количества значений на экран монитора

Размеры стандартного экрана (25 строк по 80 символов) не позволяют одновременно просматривать большое количество строк информации. Поэтому управление выводом на экран возлагается на программу. Для этого

1) Используют модуль CRT;

2) В разделе переменных определяют целочисленную переменную, подсчитывающую количество заполненных строк экрана (на экране может размещаться 23 строки с выводимой информацией, в 24-ой строке размещается указание пользователю, 25-ая строка – для размещения курсора после вывода 24-ой строки);

3) Перед выводом информации очищается экран с помощью вызова процедуры CLRSCR;

4) При необходимости выводится шапка таблицы (название граф с выводимой информацией);

5) Счетчику строк присваивается количество заполненных шапкой строк экрана (если шапка не выводится, то счетчик обнуляется);

6) В цикле вывода после обращения к процедуре вывода счетчик выведенных строк увеличивается на 1;

7) Если значение счетчика равняется 23, то

а) пользователю сообщается, что для продолжения вывода необходимо нажать клавишу ENTER;

б) принимается нажатие клавиши ENTER;

в) очищается экран с помощью клавиши CLRSCR;

г) при необходимости выводится шапка таблицы;

д) счетчику строк присваивается количество заполненных шапкой строк экрана (если шапка не выводится, то счетчик обнуляется);

8) После цикла, внутри которого осуществляется вывод, пользователю сообщается о завершении вывода.

Задача с использованием вывода большого количества значений

Постановка задачи

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

Накопление суммы прекращается, когда очередной элемент меньше заданной точности (обычно 10-5 – 10-10).

Метод решения

План решения следующий:

1) ввод исходных данных с контролем правильности ввода;

2) очистка экрана и вывод шапки

3) вычисление таблицы

Ввод исходных данных с контролем правильности ввода осуществляем следующим образом:

1.1) помечаем меткой начало ввода;

1.2) сообщаем пользователю о данных, которые он должен ввести;

1.3) отключаем систему прерываний по ошибкам ввода-вывода и выхода за диапазон значений;

1.4) выполняем ввод начального значения, конечного и шага изменения аргумента функции;

1.5) включаем систему прерываний по ошибкам ввода-вывода и выхода за диапазон значений;

1.6) анализируем наличие ошибки с помощью системной функции IOResult или несоответствие начала и конца диапазона изменения аргумента функции. Если ошибка существует то

а) сообщаем об этом пользователю;

б) возвращаемся к метке, которая отмечает начало ввода.

Очистку экрана и вывод шапки выполняем следующим образом

2.1) очищаем экран с помощью процедуры ClrScr;

2.2) выводим текст шапки таблицы;

2.3) устанавливаем начальное значение 1 счетчика заполненных строк экрана.

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

3.1) x: =xn

3.2) пока x< =xk:

В этой задаче для вычисления значения функции используем алгоритм накопления суммы. Пусть y – сумматор (для накопления значения функции), a – очередное элемент суммы, i – номер элемента суммы, . ai – i-ый элемент суммы, eps – точность. В этом случае для накопления суммы

a.1) сумматор обнуляется

y: =0

a.2) очередной элемент ряда - первый

a: =a1

a.3) фиксируется номер первого элемента

i: =1

a.4) пока очередной элемент a по абсолютной величине не соответствует точности (превышает заданную точность eps) повторяется добавление к сумматору очередного элемента, вычисляется значение нового элемента, номер элемента увеличивается на 1.

пока |a|> eps:

Для вычисления ai применяем следующий подход – последовательность чисел, которая суммируется представляется как геометрическая последовательность (вычисляется значение первого элемента ряда a1 и выводится формула знаменателя геометрической прогрессии q). Для нашей задачи

a1=x

Таким образом, зная a1(a: = a1), любой следующий элемент вычисляется по формуле

b.1) Вывод результата заключается в том, что выводятся значения аргумента x, результата расчета y, стандартной функции sin(x), погрешности - |y-sin(x)|, после этого увеличивается значение счетчика заполненных строк экрана (k) на 1, затем при необходимости производится очистка экрана.

b.2) Очистка экрана производится

если k=23 Þ

Информационная модель

Таблица 15.3. -Информационная модель

Статус Назначение Имя Тип
Вход начало диапазона xn Real
Вход конец диапазона xk Real
Вход шаг изменения hx Real
Пром аргумент x Real
Выход результат функции y Real
Пром элемент суммы a Real
Пром номер элемента i Integer
Пром счетчик строк k Integer

Программная модель

program tabsin;

uses crt;

label inp;

const eps=0.1e-9; {точность вычисления}

var x, {очередное значение аргумента}

y, {сумматор - для вычисления синуса}

xn, {начальное значение аргумента таблицы}

xk, {конечное значение аргумента таблицы}

hx, {шаг изменения аргумента}

a {очередной элемент суммы}

: real;

i, {номер элемента суммы}

k {счетчик заполненных строк экрана}

: integer;

begin

 

{ввод исходных данных с контролем правильности ввода}

inp:

writeln('Начало, конец, шаг для аргумента');

{$I-}

{$R-}

readln(xn, xk, hx);

{$I-}

{$R-}

if (IOresult< > 0)or(xn> xk) then

begin

writeln('Ошибка при вводе данных! ');

goto inp

end;

 

clrscr; {очистка экрана}

{вывод шапки таблицы}

writeln('x ': 5, 'вычисл sin': 14, 'контр sin': 14, 'погрешность': 14);

k: =1; {счетчик заполненных строк экрана}

 

x: =xn; {первое значение аргумента функции}

while x< =xk do

begin

 

{вычисление sin - накопление суммы}

y: =0; {обнуление счетчика}

a: =x; {первый элемент суммы}

i: =1;

while abs(a)> eps do

begin

y: =y+a; {накопление суммы}

a: =-a*sqr(x)/(2*i*(2*i+1)); {следующий элемент суммы}

i: =i+1 {номер следующего элемента суммы}

end;

 

{вывод очередной строки таблицы}

{аргумент, вычисленное и контрольное значения, погрешность}

writeln(x: 5: 2, y: 14: 9, sin(x): 14: 9, abs(y-sin(x)): 14: 9);

k: =k+1; {увеличение счетчика заполненных строк экрана}

if k=23 then {экран заполнен}

begin

writeln('Для продолжения нажмите Enter');

readln; {остановка до нажатия клавиши Enter}

clrscr; {очистка экрана}

{вывод шапки таблицы}

writeln('x ': 5, 'вычисл sin': 14, 'контр sin': 14,

'погрешность': 14);

k: =1; {установка счетчика заполненных строк экрана}

end;

x: =x+hx {переход к новому значению аргумента}

end

end.

 


Поделиться:



Популярное:

  1. X. Определение суммы обеспечения при проведении исследования проб или образцов товаров, подробной технической документации или проведения экспертизы
  2. Алгоритм вычисления расстояния рабочей точки до границы помпажа
  3. Базовая последовательность случайных чисел (назначение, способы
  4. Введение в пифагорейскую теорию чисел
  5. Ввод и редактирование данных: чисел, текста, формул.
  6. Внутренняя и внешняя политика первых Романовых.
  7. Военное искусство в войнах периода первых буржуазных революций в Западной Европе
  8. Возникновение первых экспериментальных разделов психологии
  9. Вычисление и запись приближенных чисел
  10. ГЛАВА 2. НАХОЖДЕНИЕ ОЖИДАЕМОГО ДОХОДА ЦЕНТРАЛЬНОЙ ЗАМКНУТОЙ СЕТИ ДЛЯ СЛУЧАЯ, КОГДА ДОХОДЫ ОТ ПЕРЕХОДОВ ЗАЯВОК МЕЖДУ СИСТЕМАМИ СЕТИ ЯВЛЯЮТСЯ СВ С ЗАДАННЫМИ МОМЕНТАМИ ПЕРВЫХ ДВУХ ПОРЯДКОВ
  11. ГЛАВА ТРЕТЬЯ. КРАТКАЯ ИСТОРИЯ ПЕРВЫХ ЛЮДЕЙ.
  12. Деление многозначных чисел на однозначные


Последнее изменение этой страницы: 2016-07-12; Просмотров: 1419; Нарушение авторского права страницы


lektsia.com 2007 - 2024 год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! (0.038 с.)
Главная | Случайная страница | Обратная связь