Лекция №5
Download
1 / 13

Лекция №5 - PowerPoint PPT Presentation


  • 184 Views
  • Uploaded on

Лекция №5. Программирование типовых алгоритмов вычислений Информатика. 1. Вычисление суммы и произведения. Пусть требуется вычислить сумму значений некоторой последовательности s = а 1 + а 2 + ... + а 20 = , где а i – массив исходных данных.

loader
I am the owner, or an agent authorized to act on behalf of the owner, of the copyrighted work described.
capcha
Download Presentation

PowerPoint Slideshow about ' Лекция №5' - yuri


An Image/Link below is provided (as is) to download presentation

Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -
Presentation Transcript

Лекция №5

Программирование типовых алгоритмов вычислений

Информатика


1. Вычисление суммы и произведения

  • Пусть требуется вычислить сумму значений некоторой последовательности

    s = а1 + а2 + ... + а20 = ,

    где аi – массив исходных данных.

  • При вычислении суммы используется прием накопления по выражению

    s = s + ai, i = 1,2,..., n.

    Начальное значение суммы принимается равным нулю

    (s = 0).

    При первом выполнении цикла (i=1) вычисляется значение

    s = 0 + a[1],

    на втором шаге (i = 2) – значение s = (0 + a[1]) + a[2] или

    s = s + a[2].

    В результате повторения этой операции 20 раз получим искомую сумму.


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

  • Аналогично вычисляется и произведение

    z = a1a2  ... an = ,

    но с той разницей, что для его накопления используется выражение P = P *ai , а начальное значение произведения должно быть равно единице (P=1).

    Пример. Дана последовательность значений b1, b2, …, b10.Вычислить сумму отрицательных элементов массива, превышающих значение переменной mи произведение положительных элементов данного массива.


ProgramPrim1;

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

i: integer;

P,s,m: real;

Begin

writeln(’Введите m’);

readln(m);

fori:=1 to 10 do

begin

writeln(’Введитеb’,i);

readln(b[i]);

end;

s:=0; p:=1;

fori:=1 to 10 do

begin

if(b[i]>0) and (b[i]>m) then s:=s+b[i];

if(b[i]<0) then p:=p٭b[i];

end;

writeln(’s=’,s:8:2,’ p=’,p:8:2);

End.


Схема алгоритма и программа вычисления суммы и произведения

Program SumPr;

var a:array[1..20]of real;

i: integer;

P,s: real;

Begin

for i:=1 to 20 do

begin

writeln(’Введите а’,i);

readln(a[i]);end;

s:=0.0; p:=1;

for i:=1 to 20 do

begin

s:=s+a[i];

p:=p٭a[i];end;

writeln(’s=’,s:10, ’ p=’,p:10); End.


2. Вычисление вычисления суммы и произведенияn-фактериала:

Дано целое число n=15, вычислить n!, (т.е. 1*2*3* … *15).

f:=1;

for i:=1 to 15 do

f:=f٭i;

3. Нахождение наибольшего (наименьшего) значения и порядкового номера

Пример. В массиве плотностей десяти химических элементов (d1, d2, ..., d10) найти элемент с наибольшей плотностью (dmax) и его порядковый номер (n).

Нахождение наибольшего (наименьшего) значения из последовательности чисел осуществляется при помощи алгоритма попарного сравнения. В качестве начального значения наибольшего (наименьшего) принимается первый элемент массива (dmax=d[1,1]), с которым сравниваются все остальные элементы массива.


Если сравниваемый член последовательности больше dmax, то dmaxприсваивается его значение, в противном случае dmax остается без изменения. Можно за начальное приближение dmax принять число, которое заведомо меньше (больше) всех элементов массива, например 10–5 (dmax=1E-5).

В том случае, когда не требуется нахождение самого значения максимального (минимального) элемента массива, а требуется определить только его номер, алгоритм поиска номера будет следующий:

Nmax:=1;

For i:=2 to 10 do

if d[i]> d[Nmax] then Nmax:= i;


Program последовательности больше Max;

vard:array[1..10]ofreal;

dmax:real;

i,n:integer;

Begin

fori:=1 to 10 do

readln(d[i]);

dmax:=d[1];

fori:=2 to 10 do

if d[i]>dmaxthen

begin

dmax:=d[i];

n:=i

end;

writeln(’dmax=’,

dmax:10:3,’ n=’,n:3);

End.


4.Нахождение количества чисел последовательности больше

Пример. Вычислить средний тепловой эффект (SH) экзотермических реакций (Н1, Н2, ..., Н10) химико–технологического процесса.

Для того, чтобы найти средний тепловой эффект, необходимо найти суммарный тепловой эффект (SumH) и количество реакций (n) с отрицательными значениями Нi .


Program последовательности больше Tepl;

var H:array[1..10]ofreal;

SumH,SH:real;

i,k:integer;

Begin

fori:=1 to 10 do

readln(H[i]);

SumH:=0; k:=0;

fori:=1 to 10 do

if H[i]<0 then

begin

Sum:=SumH+H[i];

k:=k+1;

end;

SH:=SumH/k;

writeln(’SH=’,SH:10; ’ k=’,k:3);

End.


Количество элементов последовательности больше можно также вычислить, используя стандартную функцию inc(k):

fori:=1 to 10 do

ifH[i]<0 theninc(k);

writeln(‘k=’,k:3);

  • Пример алгоритма использования функции odd(x)

    Вычислить сумму и количество элементов массива С1, С2, . . . ,С15, стоящих на нечетных местах и произведение положительных элементов, расположенных на четных местах.

    S:=0; P:=1;

    fori:=1 to 15 do

    begin

    ifodd(i)then begin inc(k); S:=S+C[i] end;

    if(С[i]>0)andnot(odd(i))then P:=P*C[i];

    end;

    writeln(‘k=’,k:3,’ S=’,S:7:2,’ P=’,P:7:2);


5. Преобразование последовательности больше массивов

Пример. Дан массив энтальпий экзо– и эндотермических реакций образования химических соединений: Н1, Н2, ..., Н20. Сформировать массив (Нр1, Нр2, ..., Нрк), состоящий из положительных значений энтальпий и массив, состоящий из отрицательных значений энтальпий (Но1, Но2, ..., Ноn). Обозначим: k, n – количество положительных и отрицательных элементов в массивах Нр и Но соответственно.


Program последовательности больше Entalp;

typemas=array[1..20]ofreal;

varH,Hp,Ho:mas;

k,n,i:integer;

Begin

fori:=1 to 20 do

readln(H[i]);

k:=0;n:=0;

fori:=1 to 20 do

if H[i]>0 then

begin k:=k+1;

Hp[k]:=H[i]; end

else

begin n:=n+1;

Ho[n]:=H[i];end;

fori:=1 to k do

writeln(Hp[i]:10,’ ’);

writeln;

fori:=1 to n do

writeln(Ho[i]:10,’ ’);End.


ad