Работа с массивами и строками.




Лабораторная работа №1

Структура программы на Паскале.
Организация ввода-вывода данных.
Использование стандартных функций.

 

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

; ; ; ; (m, n, k, j – целые).

Указание. Использовать соотношения: ; ; ; ; .

program p1;

var x,y,a,b,c,d,z,s,p,q: real;

t:boolean;

m,n,k,j: integer;

begin

write('x='); readln(x);

write('y='); readln(y);

z:=x*x/(x*x+1);

a:=arctan(z/sqrt(1-z*z));

z:=1+sqrt(y*y*y*y+1);

b:=ln(z)/ln(10);

c:=exp((y-x*x)*ln(2));

d:=cos(2*x*y)/sin(2*x*y);

s:=(a-b)/(c-d);

writeln('s=',s:9:6);

 

z:=abs(x);

a:=exp(y*ln(z));

b:=abs(y);

c:=exp(x*ln(b))+1;

d:=sqrt(c);

p:=frac(a-d);

writeln('p=',p:9:6);

 

z:=sin(x+y+pi/4)/cos(x+y+pi/4);

a:=exp(pi-x*y);

c:=exp(-abs(y)*ln(2));

b:=arctan(sqrt(1-c*c)/c);

q:=z*a/(x*y-b);

writeln('q=',q:9:6);

 

t:=((abs(s)<abs(p)) or (abs(p)<abs(q)) and ((x*x-y*y)<1));

writeln('t=', t);

 

write('n='); readln(n);

write('j='); readln(j);

m:=(n shl 2)+n;

k:=(j div (j shr 1));

writeln('m=', m);

writeln('k=',k);

end.

 

1. Составить программу, определяющую, попала ли точка с координатами (x, y) внутрь заштрихованной области.

 

program interval;

var x,y: real;

begin

write('x='); readln(x);

write('y='); readln(y);

if ((x*x+y*y<9) and (y>=0) and (x>0) and (y<ln(x)) and (y>-x+2))

or ((x*x+y*y<9) and (y>x*x) and (y>-x+2) and (x>0)) then

writeln('точка принадлежит области')

else writeln('точка не принадлежит области');

readln

 

end.

 

4. Изучить и запустить программу, которая вычисляет сумму, разность, произведение или частное двух чисел в зависимости от знака операции +, –, *, / (т.е. простейший калькулятор). Добавить в программу операцию возведения x в степень y.

 

program calc;

var x,y,r:real;

c:char;

Begin

write('Операнд 1: '); readln(x);

write('Операция: '); readln(c);

write('Операнд 2: '); readln(y);

Case c of

'+': r:=x+y;

'-': r:=x-y;

'*': r:=x*y;

'/': if y<>0 then r:=x/y

else

begin writeln ('Деление на 0');exit end;

'^': if x>0 then r:=exp(y*ln(x))

else

begin writeln ('неверное значение x'); exit end;

else

begin writeln ('Hеверная операция');exit end;

end;

writeln (x:6:3,' ',c,' ',y:6:3,' = ',r:9:6);

readln

End.


 

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

 

program korni;

var a,b,c,d,x1,x2: real;

begin

write('a b c: '); readln(a,b,c);

d:=b*b-4*a*c;

if d>0 then

begin

x1:=(-b+sqrt(d))/(2*a);

x2:=(-b-sqrt(d))/(2*a);

writeln('x1=',x1:9:6,' x2=',x2:9:6);

end

else if d=0 then

begin

x1:=-b/(2*a);

writeln('x1=',x1:9:6);

end

else writeln('нет корней');

readln

end.

 

Лабораторная работа №3

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

1.Составить программы, вычисляющие значения выражений:

б) в) д) ж)
к) .

Б )

program p1;

var n, i: integer;

s:real;

begin

write ('n=');

readln(n);

s:=0;

for i:=1 to n do

s:=s+1/exp(2/3*ln(i));

writeln ('s=',s:9:6);

readln

end.

В)

program p2v;

var i: integer;

s, ch, x, f:real;

begin

write ('x=');

readln(x);

s:=0; f:=1; ch:=x;

for i:=1 to 10 do

begin

f:=f/(2*i)/(2*i-1); ch:=ch*x;

s:=s+ch*f;

end;

writeln ('s=',s:9:6);

readln

end.

 

Д)

program p1d;

var n,k: integer;

x,s:real;

begin

write ('n='); readln(n);

write ('x='); readln (x);

s:=1;

for k:=1 to n do

s:=s*ln(k*x)/ln(2)/k;

writeln ('s=',s:9:6);

readln

end.

 

Ж)

program p1zh;

var i,j: integer;

s:real;

begin

s:=0;

for i:=1 to 10 do

for j:=i to 10 do

s:=s+1/(i+j*j);

writeln ('s=',s:9:6);

readln

end.

 

К)

program p1k;

var n,k: integer;

z,s:real;

begin

write ('n='); readln(n);

s:=0; z:=0;

for k:=1 to n do

begin

z:=z+sin(k);

s:=s+1/z;

end;

writeln ('s=',s:9:6);

readln

end.

 

2. Составить программу, находящую сумму всех двузначных чисел у которых число единиц делится нацело на число десятков.

 

program p3v;

var s1,d,e,k: integer;

begin

s1:=0;

for k:=10 to 99 do

begin

e:=k mod 10;

d:=k div 10;

if e mod d=0 then begin write(k,' '); s1:=s1+k; end;

end;

writeln('s1=', s1);

readln

end.

 

3. Составить программу, выводящую на экран все простые числа в интервале от 1 до 100 (простым называется число, которое делится нацело только на 1 и на себя).

 

program p4;

var n,k, del, rez: integer;

f:boolean;

begin

for n:=1 to 100 do

begin

f:=true;

for k:=2 to n div 2 do

if n mod k = 0 then f:=false;

if f then write(n,' ');

end;

readln

end.

 

 

4. Изучить и запустить программу вычисления значений функции на интервале x 1£ x £ x 2 с шагом h и найти ее максимальное и минимальное значение и среднее арифметическое:

program p6;

var x,y,a, x1, x2,h,xmin,ymin,SA, xmax, ymax: real;

n, i: integer;

begin

writeln('введите число а, начало и конец интервала и шаг h');

readln(a, x1, x2, h);

if (x2>x1) and ((x2-x1)>2*h) then

begin

x:=x1;

n:=round ((x2-x1)/h);

if (x>a) then y:=sqr(sin(abs(x))) else y:=cos(x*x);

writeln ('x=', x:7:3, ' y=', y:9:4);

xmin:=x; ymin:=y; xmax:=x; ymax:=y; SA:=y;

for i:=1 to n do begin

x:=x1+i*h;

if (x>a) then y:= sqr(sin(abs(x))) else y:=cos(x*x);

writeln ('x=', x:7:3,' y=', y:9:4);

if y<ymin then begin

ymin:= y; xmin:=x;

end;

if y>ymax then begin

ymax:=y; xmax:=x;

end;

SA:=SA+y;

end;

writeln('минимальное значение y =', ymin:9:4, ' при x=', xmin:7:3);

writeln('максимальное значение y =', ymax:9:4, ' при x=', xmax:7:3);

writeln('Среднее значение функция ', SA/(n+1):9:4);

end

else writeln ('Hеверно заданы х1 и х2');

readln

end.

 

5. Вычислить с помощью рекуррентной формулы сумму ряда с заданной точностью e (использовать оператор цикла с постусловием):

.

program p4;

var s,u,x,eps: real; {s – сумма, u – член ряда, eps - точность}

n: integer; {x – аргумент функции, n – номер члена ряда}

begin

writeln(’Введите аргумент x и точность eps’);

readln(x, eps);

u:=1; s:=u; n:=0; { инициализация переменных}

repeat

u:=–u*x*x/(2*n+1)/(2*n+2); {рекуррентная формула}

s:=s+u; {суммирование ряда}

n:=n+1; {счетчик}

until abs(u)<eps;

writeln(’Сумма ряда равна ’, s:10:6);

writeln(’Для сравнения cos(x)=’, cos(x):10:6);

readln

end.

6.Вычислить суммы рядов с точностью e = 0,0001. Использовать, где это целесообразно, рекуррентные формулы. Использовать цикл с предусловием (а, в), с постусловием (б, г):

в) г)

 

В)

program p5v;

var eps,a,s:real;

n: integer;

begin

write ('eps='); readln(eps);

a:=2; s:=a; n:=1;

while abs(a)>eps do

begin

a:=-2/(n+1)*a;

s:=s+a; n:=n+1;

end;

writeln ('s=', s:12:10);

end.

 

 

Г)

program p5g;

var eps,a,s: real;

n: integer;

begin

write ('eps='); readln(eps);

a:=-1/6; s:=a; n:=1;

repeat

a:=-n*a/(2*n+6);

s:=s+a; n:=n+1;

until abs(a)<eps;

writeln('s=',s:9:6);

end.

 

7. Вычислить суммы рядов с точностью e = 0,0001. Использовать, где это целесообразно, рекуррентные формулы.

 

program p5b;

var eps,a,s: real;

n: integer;

begin

write ('eps='); readln(eps);

s:=0; n:=2;

repeat

a:=exp(n*n*ln((n-1)/(n+1)));

s:=s+a; n:=n+1;

writeln(a:9:6)

until abs(a)<eps;

writeln('s=',s:9:6);

end.

 

 

Лабораторная работа №4

Работа с массивами и строками.

1. Изучить и запустить программу, осуществляющую ввод массива с клавиатуры, сортировку его по убыванию и вывод на экран. С ее помощью составить программу, выполняющую следующие действия над вещественным одномерным массивом А (n):

а) поиск и вывод на экран минимального и максимального элементов с указанием номера;

б) перестановку элементов массива (1-го с последним, 2-го с предпоследним, и т.д.);

program p1a;

var A: array [1..100] of real;

i,j,n,imax,imin: integer;

z,max,min,m: real;

begin

write ('введите длину массива (n<100):');

readln (n);

writeln ('введите элементы массива:');

for i:=1 to n do

begin

write ('A [', i, ']=');

readln (A [i])

end;

writeln('Массив А:');

for i:=1 to n do write (A [i]:6:3, ' ');

writeln;

{a}

max:=a[1]; imax:=1;

min:=a[1]; imin:=1;

for i:=2 to n do begin

if max<a[i] then begin max:=a[i]; imax:=i; end;

if min>a[i] then begin min:=a[i]; imin:=i; end;

end;

writeln ('max=',max:6:3,' в позиции ',imax);

writeln ('min=',min:6:3,' в позиции ',imin);

 

{б}

for i:=1 to n div 2 do

begin

z:=A[i];

A[i]:=A[n+1-i];

A[n+1-i]:=z;

end;

writeln ('Массив А после перестановки:');

for i:=1 to n do write(A [i]:6:3, ' ');

writeln;

{в}

for i:=1 to n-1 do

for j:=i+1 to n do

if A [i]>A [j] then

begin

z:=A[i]; A[i]:=A[j]; A[j]:=z;

end;

writeln ('отсортированный массив:');

for i:=1 to n do write(A [i]:6:3, ' ');

writeln;

readln

end.

2. Изучить и запустить программу, осуществляющую ввод матрицы А с клавиатуры, перестановку указанных строк и вывод матрицы на экран в виде таблицы. С ее помощью составить программу, выполняющую следующие действия над вещественным двумерным массивом А (m ´ n), mn:

в) транспонирование матрицы А;

г) вычисление и печать результатов перемножения матриц А и А Т: B = АА Т, С = А Т А.

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

 

program v2;

var at,B,C,A: array [1..10,1..10] of real;

i,j,k,n,m,m1,m2,imax,jmax: integer;

z,max: real;

begin

write('введите число строк (m<10):');

readln(m);

write('введите число столбцов (n<10):');

readln(n);

for i:=1 to m do

for j:=1 to n do

begin

write('A[', i, ',', j, ']=');

readln(a[i,j])

end;

writeln('исходная матрица:');

for i:=1 to m do

begin

for j:=1 to n do write(a[i,j]:6:2, ' ');

writeln

end;

{в}

for i:=1 to n do

for j:=1 to m do at[i,j]:=A[j,i];

 

writeln ('Матрица At:');

for i:=1 to n do

begin

for j:=1 to m do write(at[i,j]:6:2, ' ');

writeln

end;

 

{г}

for i:=1 to m do

for j:=1 to m do

begin

b[i,j]:=0;

for k:=1 to n do b[i,j]:=b[i,j]+A[i,k]*at[k,j];

end;

writeln ('Матрица B=A*at:');

for i:=1 to m do

begin

for j:=1 to m do write(b[i,j]:6:2, ' ');

writeln

end;

 

for i:=1 to n do

for j:=1 to n do begin

c[i,j]:=0;

for k:=1 to m do

c[i,j]:=c[i,j]+at[i,k]*A[k,j];

end;

writeln ('Матрица c=at*A:');

for i:=1 to n do

begin

for j:=1 to n do write(c[i,j]:6:2, ' ');

writeln

end;

 

 

{д}

max:=a[1,1];

imax:=1; jmax:=1;

for i:=1 to m do

for j:=1 to n do

if a[i,j]>max then

begin

max:=a[i,j];

imax:=i;

jmax:=j

end;

writeln(imax,' ',jmax);

 

if jmax<>1 then

for i:=1 to m do begin

z:=a[i,1]; a[i,1]:=a[i,jmax]; a[i,jmax]:=z;

end;

 

writeln('матрица 1:');

for i:=1 to m do

begin

for j:=1 to n do write(a[i,j]:6:2, ' ');

writeln

end;

 

if imax<>1 then

for j:=1 to n do begin

z:=a[1,j]; a[1,j]:=a[imax,j]; a[imax,j]:=z;

end;

writeln('матрица 2:');

for i:=1 to m do

begin

for j:=1 to n do write(a[i,j]:6:2, ' ');

writeln

end;

 

 

{ write('введите номера переставляемых строк:');

readln(m1, m2);

if(m1>m) or (m2>m) or (m1=m2) then

begin

writeln('неверные номера строк');

exit

end;

for j:=1 to n do

begin

z:=a[m1,j]; a[m1,j]:=a[m2,j]; a[m2,j]:=z

end;

writeln('матрица после перестановки:');

for i:=1 to m do

begin

for j:=1 to n do write(a[i,j]:6:2, ' ');

writeln

end; }

readln

end.

 

3. Составить программу, которая во введенной с клавиатуры строке удаляет лишние пробелы между словами, оставляя один.

 

program p3;

var s: string;

j,i: integer;

begin

writeln('Введите строку:');

readln(s);

for i:=2 to length(s) do

if(S[i]=' ') and (s[i-1]=' ') then begin

for j:=i to length(s)-1 do

s[j]:=s[j+1];

s[0]:=chr(ord(s[0])-1);

i:=i-1;

end;

writeln('Результат:');

writeln(s);

readln

end.

 


Лабораторная работа №5

Процедуры и функции.

2. Изучить и запустить программу вычисления длины вектора, заданного в виде массива из 3 чисел, в которой вычисление длины вектора реализовано в виде функции. С ее помощью составить программу обработки векторов, заданных в виде массива из 3 чисел, выполняющую следующие действия: а) вычисление скалярного произведения двух векторов; б) вычисление угла между двумя векторами;

 

program vectors;

type vect=array[1..3] of real;

var a,b: vect;

z:real;

function len(x:vect):real;

begin

len:=sqrt(x[1]*x[1]+x[2]*x[2]+x[3]+x[3])

end;

function sp(x,y:vect):real;

begin

sp:=x[1]*y[1]+x[2]*y[2]+x[3]+y[3]

end;

function ygol(x,y:vect):real;

var t:real;

begin

t:=sp(x,y)/len(x)/len(y);

if t=0 then ygol:=pi/2

else

ygol:=arctan(sqrt(1-t*t)/t);

end;

begin

writeln('введите компоненты векторa а');

readln(a[1],a[2],a[3]);

writeln('введите компоненты вектора b');

readln(b[1],b[2],b[3]);

z:=sp(a,b);

writeln('а,b: ',z:6:2);

readln;

z:=ygol(a,b);

writeln('угол=',z*180/pi:6:2,' градусов');

readln;

end.


 

3. Изучить и запустить программу, осуществляющую ввод квадратных матриц А и В и вывод их суммы С = А + В (ввод, вывод и сложение матриц реализованы в виде процедур). С ее помощью составить программу обработки матриц, выполняющую следующие действия (реализовать в виде процедур):

а) транспонирование матрицы A;

б) вычисление произведения двух матриц С = АВ;

 

program matrix;

type matr=array[1..10,1..10] of real;

var a,b,c,at: matr;

n: integer;

 

procedure inp(var x:matr; n:integer; t:char);

var i,j:integer;

begin

for i:=1 to n do

for j:=1 to n do

begin

write(t,'[', i, ',', j, ']=');

readln(x[i,j])

end

end;

 

procedure outp(x:matr; n:integer);

var i,j: integer;

begin

for i:=1 to n do

begin

for j:=1 to n do write(' ',x[i,j]:6:2);

writeln

end

end;

 

procedure sum(x,y:matr; n:integer; var s:matr);

var i,j:integer;

begin

for i:=1 to n do

for j:=1 to n do s[i,j]:=x[i,j]+y[i,j]

end;

 

procedure trans(x:matr; n:integer; var xt:matr);

var i,j:integer;

begin

for i:=1 to n do

for j:=1 to n do xt[i,j]:=x[j,i]

end;

 

procedure tr(x,y:matr; n:integer; var c:matr);

var i,j,k:integer;

begin

for i:=1 to n do

for j:=1 to n do begin

c[i,j]:=0;

for k:=1 to n do

c[i,j]:= c[i,j]+ x[i,k]*y[k,j];

end;

end;

 

begin

writeln('Введите размерность матриц n: ');

readln(n);

writeln('Введите матрицу а');

inp(a,n,'A');

writeln(' матрица а:');

outp(a,n);

writeln('Введите матрицу б');

inp(b,n,'b');

writeln(' матрица б:');

outp(b,n);

sum(a,b,n,c);

writeln('Матрица с=а+б:');

outp(c,n);

trans(a,n,at);

writeln(' Матрица at:');

outp(at,n);

tr(a,b,n,c);

writeln('Матрица c=a*b:');

outp(c,n);

readln

end.

 



Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2017-06-21 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: