Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Учебное пособие 3000555.doc
Скачиваний:
31
Добавлен:
30.04.2022
Размер:
19.12 Mб
Скачать

2.12.2. Стандартные модули

Стандартные процедуры и функции языка расположены в модулях, которые поставляются в оттранслированном виде вместе с компилятором (стандартные модули).

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

2.12.3. Примеры программ

Задача 1: Составить программу для вычисления площади треугольника по заданным значениям длин сторон а, Ь, с, используя формулу Герона

S = p(p-a)(p-b\p-c),

где р = (а + b + с)/2- полупериметр.

В вычислениях участвуют величины действительного типа а, b, с, р и S.

Имена переменных описываются в разделе описания переменных.

В разделе операторов вначале необходимо записать оператор ввода значений а, b, с; затем в операторах присваивания вычислить р и S и вывести результаты вычисления S.

Программа имеет вид:

program artr;

var a, b, с, р, s: real;

begin

read(a, b, c);

p:=(a+b+c)/2;

s:=sqrt(p*(p-a)*p-b)*(p-c));

writeln(' s=', s); end.

Задача 2: Составить программу для вычисления корней квадратного уравнения ах2 + bх + с = 0.

Корни квадратного уравнения определяются из выражения

в том случае, если b - 4ас > 0.

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

е=- и

Для получения решения достаточно одного условия, например Ь2 - 4ас > 0. Чтобы программа позволяла получать результат при любых исходных данных, необходимо предусмотреть проверку коэффициента на условие а = 0, так как в этом случае

корень уравнения определяется по формуле

Программа имеет вид:

program corni;

label 20;

var a,b,c,d,e,f,x,xl,x2,z: real;

begin read(a,b,c);

if a=0then begin

x:=b/c; writeln(x); goto 20 end else

begin

d:=b*b-4.0*a*c; z:=2.0*a;

e:=-b/z;

f:=sqrt(abs(d))/z

end;

if d>=0 then

begin

xl:=e+f;

x2:=e-f; writeln(xl,x2); end

else writeln(e,'+- i*',f);

20:;

end.

Задача З: Составить программу для определения по номеру квадранта значений координат точек, принадлежащих данному квадранту.

Программу для реализации данного условия можно выполнить с помощью условного оператора. Однако программа с оператором выбора будет более наглядной.

Программа имеет вид:

program kvadr;

var n:integer; begin

read (n); case n of

1: writeln ('значения координат х и у > 0 ');

2: writeln ('значения координат х < 0 и у > = О'); 3: writeln ('значения координат х < 0 и у < О'); 4: writeln ('значения координат х > = 0 и у < 0');

end

end.

Задача 4: Составить программу для вычисления значений функции при изменении аргумента х от значения x0 до значения xk с шагом h.

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

Программа имеет вид:

program funyi;

label 50;

var x,y,xn,xk,hx: real; begin

read(xn,xk,hx);

x:=xn;

50: y:=(x*x*x-4*x+l)/(abs(x)+l);

writeln(x:4:2,' ',y); x:=x+hx;

if x<=xk then goto 50 end.

Задача 5: Составить программу для вывода значений элементов, кратных трем, для целочисленного массива N (4).

Удобно воспользоваться оператором цикла FOR, в котором параметром цикла является индекс элементов массива; кратность трем проверяется в условном операторе.

Программа имеет вид:

program krat3; const indmax=4;

var i: integer;

n: array [l..indmax] of integer; begin

for i:=l to indmax do begin read(n[i]);

if (n[i] div 3) * 3 = n[i] then writeln(n[i]:5)

end

end,

':

Задача 6: Составить программу для определения значения k = 1,2,3,..., при котором функция xk/k становится меньше а.

Такая постановка требует организации цикла с неизвестным числом повторений. Параметром цикла является изменяющееся значение k. Возведение в степень вычисляется по рекуррентной формуле.

Программа имеет вид:

program iterw;

var k: integer;

p, x, a: real;

begin

read(a,x);

k:=l;

p:=x;

while p/k >= a do

begin

p:=p*x;

k:=k+l

end;

write(k);

end.

Задача 7: Составить программу для вывода на печать положительных элементов матрицы А (10, 15). В каждой строке печатать элементы, относящиеся к данной строке матрицы. Если в строке нет положительных элементов, то она должна быть пустой.

Программа имеет вид:

program matr;

const imax=10; jmax=15;

vary: integer;

a: array [l..imax, 1..jmax] of real; begin

for i:=l to imax do begin

for j:=l to jmax do begin

read(a[i,j]);

if a[i,j] > 0 then write(a[i,j]:5:2);

end;

writeln;

end;

end.

Задача 8: Составить программу для вычисления z=(а+b+х;)/2, где значение а изменяется от 0 с шагом 0,2; значение b изменяется от b0 с шагом hb, значение Xi задано массивом (х1 х2,...,х20). Значения а,b и xi изменяются одновременно, т.е. при первом выполнении цикла а=0, b=b0, xi=x1; при втором -а=0,2; b=b0+hb, xi2 и т.д.

Программа имеет вид:

program funz;

const a0=0; ha=0.2; nk=20;

var i: integer;

a,b,b0,hb,z: real;

x: array [L..nk] of real;

begin

read(b0,hb); a:=a0;

b:=b0;

for i:=l to nk do begin

read(x[i]);

z:=(a+b+x[i])/2;

write(z:6:2);

a:=a+ha;

b:=b+hb;

end;

end.

Задача 9: Составить программу для записи подряд в массив Y положительных, а массив Z отрицательных элементов массива X(x1,x2,... ,x100).

Для запоминания исходного массива X и формируемых массивов Y и Z необходимо выделять одинаковое количество полей памяти. Чтобы элементы в массивах Y и Z запоминались подряд, необходимо в программе при выполнении поставленных условий вычислять соответствующий индекс.

Программа имеет вид:

program sort;

const nmax= 10;

var i,n,k: integer;

x,y,z: array[l..nmax] of real; begin

for i:=l to nmax do read(x[i]); k~0;

n:=0;

for i:=l to nmax do

if x[i]>0 then begin

k:=k+l;

y[k]:=x[i]

end

else

begin

n:=n+l;

z[n]:=x[i]

end;

for i:=l to k do writeln(y[i]:6:2);

for i:=l to n do writeln(z[i]:6:2); end.

Задача 10: Составить программу для приближенного

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

прямоугольников с шагом интегрирования h.

Приближенное значение можно производить по формуле

где n=(b-a)/h

Программа имеет вид: program intrl;

var i,n: integer;

a,b,n,x,y: real; begin

read(a,b,h);

n:=trunc(b-a/h)+1; x:=a; y:=0;

for i:=l to n do

begin

y:=y+(exp(x)+l)/x*h; x:=x+h end;

writeln(y)

end.

Задача 11: Составить программу для вычисления среднего геометрического положительных элементов массива

Х(x1,x2,...,Х40).

В программе используется прием накопления произведения. Следовательно, до начала цикла необходимо задать, например, Р=1.

В цикле перед накапливанием произведения необходимо выбирать положительные элементы массива.

Программа имеет вид:

program sredg; const imax=40;

var p,s:real;

n,i. integer;

x: array [1..imax] of real; begin

for i:=l to imax do read(x[i]);

p:=1;

n:=0;

for i:=l to imax do

if x[i] > 0 then

begin

p:=P*x[i]; n:=n+l;

end;

s:=exp(n*ln(p)); write('s=',s:8:3)

end.

Задача 12: Составить программу для вычисления п!, считая, что . В этом случае начальное значение произведения может быть равно 2 (2!).

Программа имеет вид:

program fact;

var n,nf,i: integer; begin

read(n);

nf:=2;

for i:=3 to n do nf:=nP*i

write('nf=',nf:10) end.

Задача 13: Составить программу для вычисления суммы членов бесконечного ряда с точностью до члена ряда, меньшего

При этом вычисление текущего члена ряда выполнить по формуле , где уn - текущий член ряда; jn-1 - предыдущий член ряда.

Программа с оператором цикла REPEAT имеет вид: program ryd;

var x,eps,y,z: real;

n: integer; begin

read(x,eps); z:=l;

n:=0;

y:=1;

repeat

n:=n+l;

y:=y*x/n;

z:=z+y

until у < eps; write(z);

end.

Задача 14: Составить программу для вычисления полинома степени (n-1), n > 30.

Программа имеет вид: program polinom;

const nn=30;

var i,n: integer;

x,y: real;

a: array [l..nn] of real; begin

read(x,n);

for i:=l to n do read(a[i]); y:=a[l];

for i:=2 to n do

y:=y*x+a[i];

write(y);

end.

Задача 15: Составить программу для нахождения наибольшего значения функции при изменении аргумента х от а до b с шагом h.

Программа имеет вид:

program max;

var a,b,c,h,x,y,ymax: real; begin

read(a,b,c,h); ymax:=-le30;

x:=a;

while x <= b do begin

y:=abs(c)*exp(c*x-x*x);

if y>ymax then ymax:=y; x:-x+h;

end;

write(ymax); end.

Задача 16: Составить программу для нахождения экстремума функции при изменении аргумента х от 0 до b/с с шагом h.

Функция у всегда положительна и имеет один экстремум. При с > 0 функция имеет минимум, а при с < 0 - максимум. Поэтому сначала надо определить знак с и присвоить переменной N значение +1, если с положительно (функция имеет минимум), и значение -1, если с отрицательно (функция имеет максимум).

Программа имеет вид:

program minmax;

label 40;

const d=0;

var a,b,c,e,h,x,y,ym: real;

n: integer; begin

read(a,b,c,h);

if с > 0 then n:=l else n:=-l; ym:=n*le30;

x:=d;

e:=b/c;

repeat

y:=abs(a)*exp(b*x+c*x*x); if n*ym <= n*y then goto 40

else

begin

ym:=y;

x:=x+h

end;

until x > e;

40: write(ym,n) end.

Задача 17: Составить программу для нахождения наименьшего элемента массива Х(x1,x2 ,... ,х50) и его порядкового номера.

Значения элементов массива X после ввода размещаются в памяти ЭВМ. В качестве начального значения наименьшего целесообразно взять значение первого элемента. Сравнение выбранного элемента следует начинать со вторым, третьим и т.д. При выполнении условия хi; < XMIN необходимо выполнять оператор присваивания XMIN:=X[I]; и IMIN:=I; Так как значение первого элемента может оказаться наименьшим, то перед циклом наряду с оператором ХМ1:=Х[1]; необходимо записать IMIN:=1; Программа имеет вид:

program minx; const nmas=50;

var xmin: real;

i, imin,n: integer;

x: array [1..nmas] of real; begin

read(n);

for i:=l to n do read (x[i]); xmin:=x[l];

imm:=l;

for i:=2 to n do

if x[i]<xmin then

begin

xmin:=x[i];

imin:=i;

end;

write(xmin,imin);

end.

Задача 18: Составить программу для упорядочивания элементов массива А(А1 А2, ..., А200), расположив их по убыванию в том же массиве.

При решении необходимо использовать метод сортировки вставками: пусть первые i элементов уже упорядочены по убыванию; берется (1+1)-й элемент и размещается среди первых i элементов так, чтобы упорядоченными оказались уже первые (i+1) элементов; этот метод применяется при i от 1 до 199. Программа имеет вид:

program sort_insert; const N=200;

type masl=array[l.. N] of real; var a:masl;

ai:real;

i,j:integer;

begin

for i:=l to N do read(a[i]); (*ввод элементов массива*)

for i:=2 to N do

begin

ai:=a[i];j:=i-l;

while (j>=l) and (a[j]<ai) do (*перемещение элементов*)

begin

a[j+l]:=[aj]; j:=j-1;

end;

a[j+l]:=ai; (*вставка элемента*)

end;

for i:=l to N do writeln(a[i]); (*вывод элементов *)

(*отсортированного массива*) end.

Задача 19: Составить программу для вычисления

где Х(х1,х2,... ,х20); а у b; значения у изменяются с шагом h.

Чтобы вычислить сумму произведений, необходимо во внешнем цикле изменять параметр i, а во внутреннем цикле - параметр k. При изменении параметра k вычисляется факториал, накапливается произведение и изменяется значение у.

Программа имеет вид:

program rez;

const nm=20;

var i,k,kf,nxd,ny: integer; a,b,h,p,y,z: real;

x: array [1..nm] of real; begin

read(a,b,h,nxd);

for i:=l to nxd do read(x[i]); z:=0;

ny:=trunc((b-a)/h)+l; for i:=l to nxd do

begin

p:=1;

kf:=1

y:=a;

for k:=l to ny do begin

kf:=kf*k;

p:=p*(x[i]+y)/kf;

y:=y+h;

end;

z:=z+p

end;

write('z=',z); end.

"

Задача 20: Составить программу для определения числа

Сочетаний , используя функцию при вычислении факториала.

Программа имеет вид:

program number; var ncm: real;

n,m,l: integer;

function fact (k: integer): integer; var p,i: integer;

begin

p:=l;

for i:=l to k do

p:=p*i;

fact:=p

end;

begin read(n,m);

I:=n-m;

ncm:=fact(n)/fact(m)/fact(I); write('chislo sochetaniy = ', ncm)

end.

Задача 21: Составить программу для вычисления функции: , где

Функцию для вычисления сумм в общем виде можно представить как:

Программа имеет вид:

program funy; const nk=50; type ind=l..nk;

mas=array[ind] of real;

var np, nt, nr, i: integer; p,t,r: mas;

x,j: real;

function sum (z:mas; nz: integer): real;

var y: integer;

s: real; begin

S:=0;

for y:=l to nz do

s:=s+z[y];

sum:=s; end;

begin

read(np,nt,nr);

for i:=l to np do read(p[i]);

for i:=l to nt do read(t[i]);

for i:=l to nr do read(r[i]); j:=sum(p,np)*x*x+sum(t,nt)*x+sum(r,nr);

write('j='j);

end.

Задача 22: Составить программу для вычисления функции z, используя для вычисления процедуру:

Формальными параметрами процедуры будут переменная х и результат с именем R. Чтобы избежать двукратного вычисления е, вводится дополнительный оператор присваивания С:=ЕХР(2.0*Х).

Программа имеет вид:

program funth;

var a,b,z,tl,t2,t3: real;

procedure th(x:real; var r:real);

begin

c:=exp(2.0*x):

r:=(c-l)/(c+l)

end; begin

read(a,b);

th(a,tl);

th(a-b,t2);

th(a*a-b*b,t3); z:=(tl+t2*t2)/sqrt(t3); write(z);

end.

Задача 23: Составить программу с процедурой без параметров для вычисления полярных координат и f =arctg (у/к) по прямоугольным координатам х и у (х > 0). Программа имеет вид:

program polkorl; var x,y,r,f: real;

n,i: integer; procedure polar; begin

r:=sqrt(x*x+y*y); f:=arctan(y/x);

end;

begin

read(n);

for i:=l to n do

begin

read(x,y);

polar;

write(r,f);

end

end.

Задача 24: Составить программу с процедурой без параметров для вычисления значений где ri и fi полярные координаты вектора с прямоугольными координатами

хi = i/(l+i2);

yi = 1/i.

Программа имеет вид:

program polkor2;

var x,y,r,f,d,s: real; i,n: integer; procedure polar;

begin

r:=sqrt(x*x+y*y); f:=arctan(y/x);

end;

begin

d:=1.0; s:=0;

read(n);

for i:=l to n do

begin

x:=i/(l+i*i); y:=l/i;

polar;

d:=d*r; s:=s+f

end;

write(d,s);

end.

Задача 25: Сформировать единичную матрицу В(10x10). Программа имеет вид:

program matrl;

const size=10;

var i,y: integer;

b: array [1.. size,1.. size] of integer;

begin

for i:=l to size do

for y:=l to size do

if y:=l then b[i,y]:=l

else b[i,y]:=0;

writeln(' ': 17,'edinichaya matrica');

writeln;

for i:=l to size do

for y:=l to size do

write(' ':3,b[i,y]:2)

end.