Программирование типовых алгоритмов вычислений Информатика
1. Вычисление суммы и произведения Пусть требуется вычислить сумму значений некоторой последовательности s = а 1 + а а 20 =, где а i – массив исходных данных. При вычислении суммы используется прием накопления по выражению s = s + a i, 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 = a 1 a 2... a n =, но с той разницей, что для его накопления используется выражение P = P *a i, а начальное значение произведения должно быть равно единице (P=1). Пример. Дана последовательность значений b 1, b 2, …, b 10. Вычислить сумму отрицательных элементов массива, превышающих значение переменной m и произведение положительных элементов данного массива.
Program Prim1; var b:array[1..10]of real; i: integer; P,s,m: real; Begin writeln(Введите m); readln(m); for i:=1 to 10 do begin writeln(Введите b,i); readln(b[i]); end; s:=0; p:=1; for i:=1 to 10 do begin if (b[i]>0) and (b[i]>m) then s:=s+b[i]; if (b[i]
Схема алгоритма и программа вычисления суммы и произведения 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. Нахождение наибольшего (наименьшего) значения и порядкового номера Пример. В массиве плотностей десяти химических элементов (d 1, d 2,..., d 10 ) найти элемент с наибольшей плотностью (d max ) и его порядковый номер (n). Нахождение наибольшего (наименьшего) значения из последовательности чисел осуществляется при помощи алгоритма попарного сравнения. В качестве начального значения наибольшего (наименьшего) принимается первый элемент массива (dmax=d[1,1]), с которым сравниваются все остальные элементы массива.
Если сравниваемый член последовательности больше d max, то d max присваивается его значение, в противном случае d max остается без изменения. Можно за начальное приближение d max принять число, которое заведомо меньше (больше) всех элементов массива, например 10 –5 (dmax=1E-5). В том случае, когда не требуется нахождение самого значения максимального (минимального) элемента массива, а требуется определить только его номер, алгоритм поиска номера будет следующий: Nmax:=1; For i:=2 to 10 do if d[i]> d[Nmax] then Nmax:= i;
Program Max; var d:array[1..10]of real; dmax:real; i,n:integer; Begin for i:=1 to 10 do readln(d[i]); dmax:=d[1]; for i:=2 to 10 do if d[i]>dmax then 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]of real; SumH,SH:real; i,k:integer; Begin for i:=1 to 10 do readln(H[i]); SumH:=0; k:=0; for i:=1 to 10 do if H[i]
Количество элементов можно также вычислить, используя стандартную функцию inc(k): for i:=1 to 10 do if H[i]0)and not(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; type mas=array[1..20]of real; var H,Hp,Ho:mas; k,n,i:integer; Begin for i:=1 to 20 do readln(H[i]); k:=0;n:=0; for i:=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; for i:=1 to k do writeln(Hp[i]:10, ); writeln; for i:=1 to n do writeln(Ho[i]:10, ); End.