Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
otvety2.doc
Скачиваний:
0
Добавлен:
01.03.2025
Размер:
251.9 Кб
Скачать

Вопрос №7. Методы преобразования алгоритмов.

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

  1. Дублирование кодов

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

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

  1. Введение булевой переменной(для циклов)

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

Program TestA2;

Var A:array[1..10] of real

S:Real;

i:{1..11}Byte;

Povtor: Boolean;

Begin

{ввод массива А}

S:=0;i:=1;

Povtor:=True;

While Povtor do

If A[i]<0 then Povtor:=FALSE

Else

Begin

S:=S+A[i];

i:=i+1;

if I>10 then Povtor:=FALSE;

end;

writeln(S)

end.

  1. Использование переменной состояния (подходит для любых алгоритмов)

Алгоритм применения переменной состояния

  1. Все элементы неструктурированной схемы пронумерованы

  2. Вводится переменная целого типа (н-р Sost:=1)

  3. Si-> Si+Sost:=next N2

  4. Элемент решения заменяется состоянием

  5. Исходная схема разбивается на элементарные операции

Н-р.

While sost<>o do

Case sost of

1:..

2:…

……

End;

Уменьшается количество ошибок, для любого алгоритма, программа отлаживается наглядно

Пример:

While sost<>0 do

Case sost of

1: if p1 then sost:=3 else sost:=2;

2: begin s1; sost:=4; end;

3:if p2 then sost:=5 else sost:=4;

4:if p3 then sost:=0 else sost:=2;

5:begin s2;sost:=0; end;

End;

Вопрос №8. Основные приемы разработки алгоритмов.

  1. Нахождение конечных сумм и произведений

Сумма:

Sum:=0;

For i:=1 to N do

Sum:sum+A[i];

Произведение:

P:=1;

For i:=1 to N do P:=P*A[i];

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

А вот – нужно считать вместе, в противном случае будет ошибка, произойдет переполнение памяти.

Fact:=1;

Readln(N);

For i:=1 to N do

Fact:=Fact*I;

Writeln(Fact);

  1. Вычисление бесконечных сумм и произведений.

Это нужно знать!:

А) Возведение в степень заменяется последовательным умножением

Б) Числитель и знаменатель считаются вместе, не по отдельности

В) используются операционные методы

Г)конец цикла определяется по относительной величине (погрешности):

Example. Найти с определенной погрешностью

Program qq; uses crt;

Var n:Integer;

A,S,x,Eps:Real;

Begin

Clrscr;

Writeln(‘введите x,Eps’);Readln(x,Eps);

S:=0;A:=1;n:=0;

Repeat

S:=S+A;

N:=n+2;

A:=A*(-x*x)/(n*(n-1));

Until ABS(-x*x/n*(n*(n-1))<Eps; {a/s<Eps}

Writeln(S);

End.

  1. Вычисление полинома (многочлена)

S:=0;

For i:=n downto 0 do

S:=s*x+A[i];

Примером вычисления полинома может быть перевод строки в число:

‘129’

‘1’-1 s:=s*10+1 и т.д.

  1. Поиск минимума, максимума

Пример программы поиска максимального элемента в строке чисел вводимых с клавиатуры:

Program found;

Var msx,chislo:real;

Begin

Read(max);

While not eoln do begin

Read(chislo);

If chislo>max then max:=chislo;

End;

Writeln(max);

End.

  1. Уточнение корня делением пополам:

Постановка задачи: например:

Вычислить площадь треугольника по формуле Герона

Выбираем способ нахождения корня.

Выбрали уточнение корня делением пополам.

Составляем алгоритм

Текст процедуры:

procedure koren(x:Integer;Eps:Real;var y:Real);

begin

y:=x/2;

repeat

y:=y+0.5*(x/y-y);

until ABS(sqr(y)-x)<Eps;

end;

Пример самой программы вычисляющей квадратный корень:

program sqrt_y;

var x:Integer;

Eps,y:Real;

procedure koren(x:Integer;Eps:Real;var y:Real);

begin

y:=x/2;

repeat

y:=y+0.5*(x/y-y);

until ABS(sqr(y)-x)<Eps;

end;

begin

readln(x,Eps);

koren(x,Eps,y);

writeln(y);

writeln(sqrt(x));

readln

end.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]