140 likes | 373 Views
Лекция №5. Программирование типовых алгоритмов вычислений Информатика. 1. Вычисление суммы и произведения. Пусть требуется вычислить сумму значений некоторой последовательности s = а 1 + а 2 + ... + а 20 = , где а i – массив исходных данных.
E N D
Лекция №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 = a1a2 ... 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 .
ProgramTepl; 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 – количество положительных и отрицательных элементов в массивах Нр и Но соответственно.
ProgramEntalp; 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.