Скачиваний:
36
Добавлен:
16.01.2016
Размер:
250.34 Кб
Скачать

МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РОССИЙСКОЙ ФЕДЕРАЦИИ

ФЕДЕРАЛЬНОЕ ГОСУДАРСТВЕННОЕ БЮДЖЕТОЕ ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ

ВЫСШЕГО ПРОФЕССИОНАЛЬНОГО ОБРАЗОВАНИЯ

«Белгородский Государственный Технологический Университет им. В.Г. Шухова»

(БГТУ им. В.Г. Шухова)

ИИТУС, Кафедра ТК

«Информационные технологии»

Лабораторная работа № 3.2

«Обработка числовой информации. Итерационные алгоритмы. Циклы»

Выполнил: студент УС-11

Татаринов А.Е.

Проверил: ст. преподават.

Крюков А.В.

Отметка о выполнении

дата, роспись

Отметка о защите

дата, роспись

Вариант №12

У каждой программы два назначения:

что она должна делать и чего не должна.

Алан Джей Перлис

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

ЗАДАЧА 1

Постановка задачи: Используя данное представление (см. в таблице с вариантами) вычислить значение, соответствующее значению функции для указанного значения хо (при указанных ограничениях на аргумент функции) с точностью е (например. е=0.001). Точность вычисления считается выполненной, если последний по модулю член в сумме меньше е. Полученное значение сравнить с истинным значением данной функции, найденное при помощи математических встроенных функций, найдя абсолютную погрешность вычисления. Указать количество просуммированных членов такого ряда.

Для данного ряда, записать формулу п-ого члена.

Решение

  1. Введем значение x и точность вычисления e.

  2. Для вычисление будем использовать следующие обозначения: а – значение текущего элемента, n – номер текущего элемента, S – сумма ряда.

Закономерность прослеживается с первого члена ряда, поэтому присвоим первому элементу присвоим значение 0.

  1. Далее указываем интервал значений X.

  2. Находим элементы с помощью формулы n-го члена:

  3. Полученные данные используем в цикле для вычисления очередного члена ряда и накопления его суммы.

Запись на языке PascalABC.Net

program Zadanye_1;

var

eps: real; // Точность вычисления

x, f, s, a, delta: real;

k: word;// Количество просуммированных членов

begin

Write('Введите значение х>1/2: х = ');

Readln(x);

Write('Введите точность вычисления: eps = ');

Readln(eps);

writeln('************************************');

f := ln(x);

Writeln('Истинное значение: f(', x, ')=', f:1:4);

s := 0;

k := 1;

a := 0;

repeat

a := (power((x - 1), k)) / ((power(x, k)) * k); // новый член ряда

s += a; // накопление суммы ряда

k += 1

until abs(a) < eps;

delta := abs(f - s);

Writeln('Значение по формуле: f(', x, ') = ', s:1:4);

Writeln('Погрешность вычисления = ', delta:1:4);

Write('Количество просуммированных членов = ', k);

end.

Пример работы программы:

Проверим программу в табличном процессоре MS Excel:

Блок-схема

ЗАДАЧА 2

Постановка задачи: Дано целое число N (N > 2). Последовательность целых чисел AK определяется следующим образом: A1 = 1, A2 = 2, A3 = 3, AK = AK–1 + AK–2 – 2·AK–3, K = 4, 5,… Вывести элементы A1, A2, …, AN.

Решение:

  1. Для решения задачи введем количество N членов последовательности и присвоим трем первым членам значения 1, 2, 3 соответственно.

  2. В цикле от 4 до N находим каждый новый член последовательности, после чего пере присваиваем значения членов ряда.

Текст программы на PascalABC.net:

var

k, N: word;

A1, A2, A3, Ak: Integer;

begin

writeln('Введите целое число N (> 2):');

write(' N = ');

readln(N);

A1 := 1; //1-й элемент последовательности

A2 := 2; //2-й элемент

A3 := 3; //3-й элемент

writeln;

writeln('Выводим последовательность ', N, ' целых чисел:');

writeln;

write(' ', A1, ' ', A2, ' ', A3); //выводим A1, A2, A3

{ Для всех остальных элементов: }

for k := 4 to N do

begin

Ak := A3 + A2 - 2 * A1; //находим k-й элемент

write(' ', Ak); //выводим k-й элемент

A1 := A2; //A1 меняем на A2

A2 := A3; //A2 меняем на A3

A3 := Ak //A3 меняем на Ak

end

end.

Блок-Схема:

Окно вывода:

ЗАДАЧА 3

Постановка задачи: Целое число называется совершенным, если оно равно сумме всех своих делителей за исключением самого себя. Дано натуральное число n. Получить все совершенные числа, меньшие n.

Решение:

  1. Введем количество цифр.

  2. В цикле от 1 до числа цифр подбираем те числа которые удовлетворяют условию.

  3. Отбираем нужные цифры и печатаем их в строку.

Структурограмма:

Kод на PascalABC.net:

var i,j,s, n:integer;

begin

writeln('введите колличество цифр');

readln(n);

for i := 1 to n do

begin

s:=0;

for j := 1 to i - 1 do

if i mod j=0 then s:=s+j;

if s=i then write(i,';');

end;

readln;

end.

Окно вывода:

Блок схема:

Ответы на контрольные вопросы:

Вопрос (№ 12) Для цикла While <усл> do <действ> запишите полный аналог используя циклическую структуру Repeat.

Поскольку алгоритмы с циклической структурой применяются для решения почти любой серьёзной задачи, то в языке Pascal для реализации циклов предусмотрено 3 различных оператора. For, While и Repeat.

Конкретно остановимся на операторах While и Repeat.

Оператор while имеет следующую структуру:

while логическое условие do

тело цикла

Если расшифровать эту надпись простыми словами, оператор while имеет следующий смысл:

Делать (do) что-то - тело цикла, пока (while) будет выполняться логическое условие

Например, пока i<=10, будем прибавлять к числу a пятёрку:

i := 1;

while i <= 10 do

begin

a := a + 5;

inc(i);//функция inc увеличивает значение i на 1 (i:=i+1)

end;

Как видим, мы сами задаём, как будет изменять наш счётчик цикла i. Причём совершенно необязательно, чтобы он изменялся ровно на 1. Например, мы можем задать шаг счётчика цикла (его изменение) равным 0,5 или 4.

Также для задания циклической структуры используется и оператор Repeat:

Repeat

тело цикла

until логическое условие

Этот оператор можно трактовать следующим образом:

повторяем (repeat) что-то (тело цикла), пока (until) логическое условие не перестанет выполняться

Давайте посмотрим на фрагмент программы, представленный ниже:

k := 4;

while k <= 6 do

begin

sum := sum + 3;

k := k + 1;

end

и запишем его с помощью оператора repeat:

k := 4;

repeat

sum := sum + 3;

k := k + 1

until k > 6 

Заметим, что операторы while и repeat имеют противоположные задания условий: в случае while наше условие k<=6 (пока k меньше или равно 6), а в случае применения оператора repeat это условие будет обратным: k>6 (до тех пор, пока k не станет больше 6).

Кроме этого, в операторе repeat нет необходимости ставить операторные скобки begin-end, так как тело цикла чётко ограничивается словами repeat - until и перед until «;» необязательна.

Если посмотреть внимательно, то мы увидим, что особенность оператора repeat такова, что тело цикла выполнится хотя бы 1 раз. В случае же с while цикл может не выполнится ни разу. Это подтверждает следующий пример:

i := 7;

while i > 7 do

//тело цикла;

i := i - 0.3; 

В данном случае цикл не выполнится ни разу

i := 7;

repeat

//тело цикла;

i := i - 0.3;

until i < 7 

Во втором случае тело цикла выполнится 1 раз, так проверка (until i<7) производится уже после выполнения тела цикла.

Вопрос (№ 22) Дан фрагмент программы:

a:=1;

while a<4 do

begin

a:=a+1;

write('a=',a);

end;

А) Что будет выведено на экран после выполнения фрагмента программы?

Б) Запишите для данного фрагменты полные аналоги, используя циклические структуры «Repeat» и «For».

Часть А:

После выполнения, программы выведет на экран последовательность значений переменной а, которое будет иметь вид a=2 a=3 a=4.

Часть Б:

Запишем данную программу используя оператор Repeat:

var

a: integer;

begin

a := 1;

repeat

a := a + 1;

write('a=', a);

until a >= 4

end.

Запишем данную программу используя оператор For:

var

a, k: integer;

begin

a := 1;

for k := 1 to 3 do

begin

a := a + 1;

write('a=', a);

end;

end.

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

-12-

Соседние файлы в предмете Алгоритмические языки и основы программирования