Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Билеты по Информатике 1 курс 13 группа.docx
Скачиваний:
5
Добавлен:
15.04.2019
Размер:
134.65 Кб
Скачать

Билет 51. Структурирование циклов. Метод объединения условий при решении задачи информационного поиска в файле.

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

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

В качестве иллюстрации рассмотрим пример из раздела 7.5 организации надежного ввода данных при условиях: x<1 и 0<eps<1 .

Метод объединения условий:

Этот метод структурирования состоит в объединении нескольких условий выхода из цикла в одно сложное логическое выражение.

repeat

writeln ('Введите правильно x, eps');

readln (x,eps)

until (abs(x)<1) and (eps >0) and (eps <1)

Повторяется ввод данных до тех пор, пока не выполнятся одновременно три условия:

x<1 и 0<eps и eps<1.

Билет 52. Структурирование циклов. Метод объединения условий и метод барьера при решении задачи включения элемента в упорядоченный массив.

Билеты 53, 54 кто-то скушал.

Билет 55. Структурирование циклов. Метод флажка на примере организации надежного ввода с детальным анализом каждой переменной.

Метод флажка (метод булева признака)

Этот метод более универсальный, чем предыдущий. Он применяется в случаях, когда количество условий выхода из цикла довольно велико и при их объединении получается громоздкое логическое выражение. Кроме того, его удобно использовать, если требуется выполнить в цикле дополнительные действия при некоторых условиях.

Метод состоит в том, что вводится дополнительная переменная-флажок (булева переменная), имеющая два значения, которая управляет циклом: при одном значении переменной цикл продолжается, при другом – завершается.

flag:=true;

repeat

writeln ('Введите правильно x,eps);

readln (x,eps);

if (abs(x)<=1) then

begin

writeln ('Ошибка в х'); flag:=false

end

else

if ((eps<=0) or (eps>=1)) then

begin

writeln ('Ошибка в eps'); flag:=false

end

until flag;

Повторяется ввод данных с детальным анализом пра -вильности х и eps и выводом сообщений об ошибке.

Для завершения цикла используется переменная-флажок flag, которая принимает значения:

flag = true если данные правильные и

flag = false, если данные неправильные.

При flag = true цикл завершается.

Билеты 56. Организация процесса нисходящей разработки многомодульных программ. Самодокументирование процесса.

Читаем с.20-29 пособия «Нисходящие разработки».

Билет 57. Независимость программы от данных при работе с массивами переменной длины. Обеспечение этого свойства на этапе спецификации задачи.

Билет 58. Экономия вычислений при суммировании рядов. Использование рекуррентных соотношений.

(просто пример задачи, чтобы стало понятно, что это такое).

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

Пример 1.

Пример 2.

Для получения каждого k-го члена ряда требуется вычисление факториала : (2k-1)! (в примере 1) и k! (в примере 2), а также возведение аргумента х соответственно в степень: (2k-1)-ю и k-ю соответственно. С ростом k количество вычислений возрастает.

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

Так , для приведенных примеров при переходе от (k-1)-го и k-му члену ряда в происходит накопление факториала умножением на k (в примере 1) и на (2k-1) (в примере 2), и накопление степени аргумента х умножением на х*х (в примере 1) и на х (в примере 2).

Поэтому для экономии вычислений используем рекуррентную формулу, которая выражает каждый член ряда через предыдущий.

Рассмотрим два способа получения рекуррентной формулы.

Способ 1

Для примера 1 рекуррентная формула может быть получена в виде:

ak = ak-1 (x,k)

Для того, чтобы найти (x,k) , делим k-й член на (k-1)-й:

, , k = 2, 3, …

Способ 2

В примере 2 рекуррентная формула не может быть получена способом 1, то есть в виде простого деления k-го члена от (k-1)-го. В этом случае из члена ряда выделяются части, для которых можно применить рекуррентную формулу. Это те части, где происходит накопление результата:

  • аргументная часть, обозначим эту часть через R1;

  • факториал, обозначим эту часть через R2.

Алгоритм имеет вид:

R1 = 1

R2 = 1

R1 = R1  x

R2 = R2  k 

a k = R1  (1/k +1/R2) 

Подготовка начальных значений

для вычисления a1

Повторение для k = 1, 2, 3 …