Программирование алгоритмов циклической структуры



Мы поможем в написании ваших работ!


Мы поможем в написании ваших работ!



Мы поможем в написании ваших работ!


ЗНАЕТЕ ЛИ ВЫ?

Программирование алгоритмов циклической структуры



Пример. Вычислить значение функции

, где

при а, изменяющемся от ан до ак,

с шагом Δа

aн=2, ак=3, Δа=0,2

 

а) с использованием оператора цикла с предусловием while

Блок-схема алгоритма

Паскаль-программа

 
 


Program prim31;

var an,ak,da,a,x,y:real;

begin

write(‘Введите an,ak,da=’);

  a=aн
readln(an,ak,da);

a:=an;

while a<=ak+0.0001 do

begin

нет x:=ln(a);

y:=exp(1/3*ln(abs(sin(x))));

да writeln(‘a=’,a:3:1,’ x=’,

  x=lna
x:5:3,’ y=’,y:5:3);

a:=a+da;

end;

end.

       
   
 
 

 

 


Результаты

  a=a+Δa
Введите an,ak,da=2 3 0.2

a=2.0 x=0.693 y=0.861

a=2.2 x=0.788 y=0.892

a=2.4 x=0.875 y=0.916

a=2.6 x=0.956 y=0.935

a=2.8 x=1.030 y=0.950

a=3.0 x=1.099 y=0.962

 

 



б) с использованием оператора цикла с постусловием repeat-until

 

Блок-схема алгоритма Паскаль-программа

 
 


Program prim32;

var an,ak,da,a,x,y:real;

begin

write(‘Введите an,ak,da=’);

readln(an,ak,da);

a:=an;

а=ан
repeat

x:=ln(a);

y:=exp(1/3*ln(abs(sin(x))));

x=ln(a)
writeln(‘a=’,a:3:1,’ x=’,x:5:3,

‘ y=’,y:5:3);

a:=a+da;

until a>ak;

end.

       
   
 
 

 


Результаты

Введите an,ak,da=2 3 0.2

a=2.0 x=0.693 y=0.861

a=2.2 x=0.788 y=0.892

нет a=2.4 x=0.875 y=0.916

a=2.6 x=0.956 y=0.935

да a=2.8 x=1.030 y=0.950

a=3.0 x=1.099 y=0.962

 

 


 


в) с использованием оператора цикла с параметром for

 

Блок-схема алгоритма

 
 

 

 


Паскаль-программа

 

Program prim33;

n=[(aкн)/ Δa]+1
var an,ak,da,a,x,y:real;

i,n:integer;

begin

write(‘Введите an,ak,da=’);

  a= aн
redln(an,ak,da);

n:=trunc((ak-an)/da)+1;

a:=an;

for i:=1 to n do

begin

x:=ln(a);

y:=exp(1/3*ln(abs(sin(x))));

  x=lna
writeln(‘a=’,a:3:1,

‘ x=’,x:5:3,’ y=’,y:5:3);

a:=a+da;

end;

end.

           
   
 
   
 

 

 


Результаты

Введите an,ak,da=2 3 0.2

a=2.0 x=0.693 y=0.861

  a=a+Δa
a=2.2 x=0.788 y=0.892

a=2.4 x=0.875 y=0.916

a=2.6 x=0.956 y=0.935

a=2.8 x=1.030 y=0.950

a=3.0 x=1.099 y=0.962

 

 
 

 

 


Программирование алгоритмов разветвляющейся структуры

Пример. Вычислить значение функции.

если

 

а) с использованием условного оператора if-then-else

Паскаль-программа

 

Program prim21;

var a,b,c,x,y:real;

n:integer;

begin

write(‘Введите а=’); readln(a);

x:=ln(abs(a-cos(a)));

c:=x*a; b:=x+a;

c=xa b=x+a
if c<=0 then

begin y:=-10.5; n:=1; end

else

if c=>3.5 then

да begin y:=c+ln(b); n:=3; end

else

нет begin y:=exp(c)+2*b; n:=2; end;

writeln(‘x=’,x:1:3,’ c=’,c:1:3,’ y=’,

да y:1:3,’ n=’,n);

end.

нет

y=eс+2b, n=2
y=c+lnb, n=3
Результат

y=-10.5, n=1
Введите а=7.35

           
     
 
 
 


x=1.927 c=14.162 y=16.389 n=3

 
 


 

 

 



б) c использованием оператора выбора case

 

Паскаль-программа

 
 


Program prim22;

var a,b,c,x,y:real;

k:integer;

 
begin

write(‘Введите а=’); readln(a);

x:=ln(abs(a-cos(a)));

c:=x*a; b:=x+a;

c=x·a b=x+a
if c<=0 then k:=1 else

if c<=3.5 then k:=2 else k:=3;

case k of

1: y:=-10.5;

да 2: y:=exp(c)+2*b;

3: y:=c+ln(b);

нет end;

да writeln(‘x=’,x:1:3,’ c=’,c:1:3,’

=’,y:1:3,’ k=’,k);

  k=1
нет end.

  k=3
  k=2
Результат

Введите а=7.35

x=1.927 c=14.162

y=16.389 k=3

нет

       
 
   
 

 

 


  y=-10.5
да k=1

 
 

 


k=2

       
   
 
 
  y=c+lnb

 

 


k=3

         
   
 
   
 
 

 

Суммирование рядов

 

Задача. Разработать программу вычисления точного Y и прибли-женного S значений функции при изменении её аргумента от xн до xк

с шагом Δx.

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

Ниже рассмотрены примеры суммирования бесконечных рядов трех типов:

а) текущий член ряда ai вычисляется непосредственно;

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

,

где ;

в) текущий член ряда ai является произведением двух сомножителей , где вычисляется непосредственно, а -по рекуррентной формуле. Формула итерации для текущего члена находится в виде: ,

где .

Примеры

а) рассматривается вариант вычисления суммы бесконечного ряда, текущий член ai которого вычисляется непосредственно и имеет вид, например,

и т.д.

 

Пример 1.

; ;

;

- вычисляется непосредственно;



 

           
   
Паскаль-программа
   
Блок-схема алгоритма
 
 
 

 

 


 


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

и т.д.

 

Пример 2.

 

; ;

- вычисляется по рекуррентной формуле в виде:

, ;

Рекуррентная формула

;

Проверка

- формула верна;


 

           
   
Паскаль-программа
   
Блок-схема алгоритма
 
 
 

 

 

 

 

 


в) рассматривается вариант вычисления суммы бесконечного ряда, текущий член ai которого содержит выражения, вычисляемые непосредственно, и выражения с факториалами и степенями и имеет вид, например,

и т.д.

 

Пример 3.

 

;

.

Решение

 

Вывод формулы итерации:

1. Определение типа члена ряда. - смешанный тип

,где

– вычисляется непосредственно, а

- по рекуррентной формуле.

 

2. Определение формулы итерации в виде:

, ,

,

Формула итерации: , , .

 

3. Проверка: , - формула верна.


Блок-схема алгоритма Паскаль-программа

 

Program prim43;

const n=1000; e=0.0001

label met;

var x,y,s,xn,xk,dx,c,a: real;

i:integer;

  x=xн
begin

write(‘Введите xn,xk,dx=’);

readln(xn,xk,dx);

x:=xn;

while x<=xk do

нет begin

y:=arctan(x); s:=x; c:=x;

for i:=1 to n do

 
да begin c:=-x*x*c;

a:=c/(2*i+1);

if abs(a)<e then goto

met; s:=s+a;

s=x c=x
end;

met: writeln(‘x=’,x:3:1,

‘ y=’y:8:5,’ s=’,s:8:5,

’ i=’,i);

x:=x+dx;

end

end.

       
 
   
 

 


 

 
 
c=-x2c, a=c/(2·I+1)


Результаты

Введите xn,xk,dx=0.2 0.8 0.2

x=0.2 y=0.19740 s=0.19733 i=2

x=0.4 y=0.38051 s=0.38048 i=4

да x=0.6 y=0.54042 s=0.54044 i=7

x=0.8 y=0.67474 s=0.67480 i=13

нет

       
 
   
 

 


 

 
 



5. Работа с массивами

 


Задача. Разработать программу решения 4-х взаимосвязанных задач

1) расчёт элементов квадратной матрицы A=a(i,j), i,j=1,2,…

по заданной формуле;

 

2) вычисление элементов вектора X=x(i) i=1,2,…

по заданному правилу;

 

3) упорядочение элементов матрицы А или вектора Х;

 

4) вычисление значения функции y по заданной формуле.

 

Пример.

1) ; ;

 

2) ; ;

 

3) упорядочить элементы второго столбца матрицы А по

убыванию значений;

 

4) ; .

 

Задание выполнить для n=6.

Замечание. Предварительно провести отладку программы при n=3, для чего получить решение задачи вручную (или с помощью калькулятора) и проверить полученные данные на ЭВМ.


 

Блок-схема алгоритма

       
   
 
 

 

 


нет

           
   
s=s+xk
 
   
 
 



да

           
   
   
k=j
 
 
 

 

 


нет

           
 
   
     
 
 

 

 


нет
  y=y*xi*s
да

           
   
 
     
 
 

 


да

           
 
   
     
 
 

 


Паскаль-программа

program prim5;

var a:array[1..10,1..10] of real;

x:array [1..10] of real;

i,j,k,n:integer;

y,s,c:real;

begin

writeln(‘Введите n’); read(n);

{---------------------------------------часть 1-----------------------------------}

for i:=1 to n do

for j:=1 to n do

a[i,j]:=(2*j*i+4*i)/j;

writeln(‘ ‘:20,’МАТРИЦА А’);

for i:=1 to n do

begin

for j:=1 to n do write(a[i,j]:8:3);

writeln;

end;

{---------------------------------------часть 2-----------------------------------}

for i:=1 to n do

begin

s:=0;

for j:=1 to n do s:=s+sqr(a[i,j]);

x[i]:=sqrt(s)/n;

end;

writeln(‘ ‘:20,’ВЕКТОР Х’);

for i:=1 to n do write(x[i]:8:3);

{---------------------------------------часть 3-----------------------------------}

for i:=1 to n-1 do

begin

k:=i;

for j:=i+1 to n do

if a[j,2]>a[k,2] then k:=j;

if i<>k then

begin

c:=a[i,2]; a[i,2]:=a[k,2]; a[k,2]:=c;

end;

end;

writeln(‘ ‘:14,’УПОРЯДОЧЕННАЯ МАТРИЦА’);

for i:=1 to n do

begin

for j:=1 to n do write(a[i,j]:8:3);

writeln;

end;

{---------------------------------------часть 4-----------------------------------}

y:=1;

for i:=1 to n do

begin

s:=0;

for k:=1 to n do s:=s+x[k];

if x[i]<>0 then y:=y*x[i]*s;

end;

writeln(‘ЗНАЧЕНИЕ ФУНКЦИИ У=’,y:1:3);

end.

 

Результаты

Введите n=6

МАТРИЦА А

6.000 4.000 3.333 3.000 2.800 2.667

12.000 8.000 6.667 6.000 5.600 5.333

18.000 12.000 10.000 9.000 8.400 8.000

24.000 16.000 13.333 12.000 11.200 10.667

30.000 20.000 16.667 15.000 14.000 13.333

36.000 24.000 20.000 18.000 16.800 16.000

 

ВЕКТОР X

1.555 3.110 4.665 6.220 7.776 9.331

 

УПОРЯДОЧЕННАЯ МАТРИЦА А

6.000 24.000 3.333 3.000 2.800 2.667

12.000 20.000 6.667 6.000 5.600 5.333

18.000 16.000 10.000 9.000 8.400 8.000

24.000 12.000 13.333 12.000 11.200 10.667

30.000 8.000 16.667 15.000 14.000 13.333

36.000 4.000 20.000 18.000 16.800 16.000

 

ЗНАЧЕНИЕ ФУНКЦИИ Y=123454118108000.000



Список рекомендуемой литературы

 

1. Задания для практических и лабораторных занятий по информатике (работы 1-5): Методические указания./ Cост. Т.Г. Умергалин,

И.Г. Мухамадеев, Э.В. Писаренко - Уфа: изд-во УГНТУ,1997.-51 с.

2. Основы программирования и работы в интегрированной среде Турбо-Паскаль: Методические указания./ Cост Т.Г. Умергалин,

И.Г. Мухамадеев - Уфа: изд-во УГНТУ,1992.-45 с.

3. Емелина Е.И. Основы программирования на языке Паскаль. - М.: Финансы и статистика, 1997.-208 с.

4. Фаронов В.В. Турбо Паскаль: В 3-х кн. Кн. 1. Основы Турбо Паскаля. – М.: Учебно-инженерный центр “МВТУ-ФЕСТО ДИДАКТИК”,1992. – 304 с.

 

 


 


 

МИНИСТЕРСТВО ОБЩЕГО И ПРОФЕССИОНАЛЬНОГО ОБРАЗОВАНИЯ РОССИЙСКОЙ ФЕДЕРАЦИИ

 



Последнее изменение этой страницы: 2016-09-05; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.80.3.192 (0.048 с.)