
Отчеты по проге паскаль вариант 27 / Отчет №3
.doc
МОСКОВСКИЙ ГОСУДАРСТВЕННЫЙ ИНСТИТУТ
ЭЛЕКТРОНИКИ И МАТЕМАТИКИ
(технический университет)
Кафедра ИТАС
ОТЧЕТ
ПО ЛАБОРАТОРНОМУ ПРАКТИКУМУ
по дисциплине “Алгоритмические языки и программирование”
Вариант___27______
Исполнитель Руководитель
__Хомич _ ____________
(фамилия) (фамилия)
___________ ____________
(подпись) (подпись)
Группа___АП-11____
Москва 2005
Содержание
1.Первая часть:
Постановка задачи, Внешняя спецификация 2
Алгоритм на псевдокоде 3
Листинг программы 4
Тесты 5
2.Вторая и третья части:
Постановка задачи, Внешняя спецификация 5
Алгоритм на псевдокоде 5
Листинг программы 6
Тесты 7
3.Четвертая часть:
Постановка задачи, Внешняя спецификация 8
Алгоритм на псевдокоде 8
Листинг программы 9-10
Тесты 11
Самостоятельная работа №3
Цель работы:
Алгоритмы вычисления по итерационным формулам. Алгоритмы обработки матриц.
Первая часть.
Постановка задачи:
1.Вычислить сумму членов бесконечного ряда, для заданного Eps:
Q=cos(2x)/(1*3) + cos(4x)/(3*5) + cos(6x)/(5*7) + ...
С точностью до |ai|<= Eps;
Внешняя спецификация:
Дано: x, Eps – real, заданы в задаче;
Результат:Q – real, сумма бесконечного ряда.
Алгоритм на псевдокоде
Алгоритм задача3.1;
НАЧАЛО
Ввод(x,Eps)
K:=1
Q:=(cos(2*k*x))/((1+2*(k-1))*(1+2*k))
y:=Q
Цикл пока abs(y)>Eps
K:=k+1
y:=cos(2*k*x)/((1+2*(k-1))*(1+2*k))
Q:=Q+y
КЦ
Вывод сообщения(Q)
КОНЕЦ.
Листинг программы
Program laba3;
uses crt;
var k:integer;
x,Q,y,Eps:real;
begin
clrscr;
writeln(' Pervaya Chast');
writeln('Vvedite x ');
read(x);
repeat
writeln('Vvedite Eps bolshe 0');
read(Eps);
until eps>0;
K:=1;
Q:=(cos(2*k*x))/((1+2*(k-1))*(1+2*k));
y:=Q;
while abs(y)>Eps do begin
K:=k+1;
y:=cos(2*k*x)/((1+2*(k-1))*(1+2*k));
Q:=Q+y;
end;
writeln('summa=',Q:10:3,' tekyshii chlen=',y:10:3,' Ego nomer v ryade=',k);
readkey
end.
Тесты
1.Попытка ввести отрицательный Eps:
Vvedite x:
2
Vvedite Eps bolshe 0:
-2
Vvedite Eps bolshe 0:
0.003
summa= -0.092 tekushii chlen= 0.002 Ego nomer v ryade=8
Вторая и третья части.
Постановка задачи:
2.В заданной целочисленной матрице A[1:n,1:n] найти, используя методы сортировки:
Четыре минимальных по абсолютной величине элемента в первом столбце.
3.В матрице A[1:n,1:n] вычислить:
Произведение максимального элемента на минимальный среди среди элементов, расположенных под главной диагональю.
Внешняя спецификация:
Дано: A[1:n,1:n] - array [1..n,1..n] of integer,заданная матрица;
Результат: A[n-4..n] – integer, четыре минимальных по абсолютной величине элемента в первом столбце.
max,min,max*min – integer, максимум, минимум и их произведение соответственно
среди элементов, расположенных под главной диагональю.
Алгоритм на псевдокоде
НАЧАЛО задачи 3.2, 3.3
Ввод(n,A[1:n,1:n])
повторять
f:=true;
Цикл от j:=1 до n-1
Если abs(a[1,j]) < (a[1,j+1]) то
f:=false;
ob:=a[1,j];
a[1,j]:=a[1,J+1];
a[1,j+1]:=ob;
Все
до тех пор пока f;
Кц
i:=1;
Цикл от j:=n-3 до n
Вывод сообщения(A[i,j]:6);
Кц
max:=-32756;
min:=32757;
Цикл от i:=2 до n
Цикл от j:=i-1 вниз до 1
Если A[i,j]>max то max:=A[i,j]
Все
Если A[i,j]<min то min:=A[i,j]
Все
Кц
Вывод сообщения(min,max,min*max);
КОНЕЦ
Листинг программы
program Vozvrashenie_Terminatora;
uses crt;
var
flag:boolean;
i,j,n,k,max,min,ob:integer;
f:boolean;
A:array[1..100,1..100] of integer;
begin
clrscr;
writeln(' Вторая часть');
repeat
writeln('Введите n >= 4 - размер матрицы');
read(n);
until n>=4;
writeln('Введите саму матрицу');
for i:=1 to n do
for j:=1 to n do
read(A[i,j]);
for j:=1 to n do
begin
for i:=1 to n do
write(a[i,j]:6);
writeln;
end;
readkey;
repeat
f:=true;
for j:=1 to n-1 do
if abs(a[1,j]) < (a[1,j+1]) then
begin
f:=false;
ob:=a[1,j];
a[1,j]:=a[1,J+1];
a[1,j+1]:=ob;
end;
until f;
writeln('Четыре минимальных по абсолютной величине элемента первого cтолбца матрицы'); i:=1;
for j:=n-3 to n do
write(a[i,j]:6);
writeln;
readkey;
writeln(' Третья часть');
max:=-32756;
min:=32757;
For j:=2 to n do
For i:=j-1 downto 1 do begin
if A[i,j]>max then max:=A[i,j];
if A[i,j]<min then min:=A[i,j];
end;
writeln('min и max:',min:6,max:6,' произведение',min*max:6);
end.
Тесты
1.Попытка ввести размерность матрицы меньше четырех:
Вторая часть
Введите n >= 4 - размер матрицы: 1
Введите n >= 4 - размер матрицы:4
Введите саму матрицу:
9 2 -8 66 31
5 0 -32 -21 1
4 8 64 -6 13
2 65 10 -47 10
-1 -4 98 5 21
Четыре минимальных по абсолютной величине элемента первого cтолбца матрицы:
5 4 2 -1
Третья часть
min и max: -4 98 произведение: -392
Четвертая часть.
Постановка задачи:
4.Дана матрица C[1:n,1:n]:
Упорядочить элементы в каждом столбце матрицы по возрастанию, а сами столбцы расположить по убыванию произведения элементов столбцов;
Внешняя спецификация:
Дано: C[1:n,1:n] - array [1..n,1..n] of integer, заданная матрица;
Результат: C[1:n,1:n] - array [1..n,1..n] of integer, упорядоченная по заданным правилам матрица.
Алгоритм на псевдокоде
НАЧАЛО задача3.4
Ввод(n,C[1:n,1:n])
{Упорядочиваем элементы в каждой строке}
Цикл от i:=1 до n
Цикл
t:=true
Цикл от j:=1 до n-1
Если C[i,j]>C[i,j+1] то
t:=false
ob:=c[i,j]
C[i,j]:=C[i,J+1]
C[i,j+1]:=ob
Все
Кц
до t=true
Кц
Кц
{В одномерный массив записываем кол-во отрицательных элементов в
строках нашей матрицы}
Цикл от i:=1 до n
Цикл от j:=1 до n
Если C[i,j]<0 то d[i]:=d[i]+1
Все
Кц
Кц
{Меняем строки местами, опираясь на сведения полученного одномерного массива}
Цикл от i:=1 до n-1
Цикл от j:=i+1 до n
Если D[i]<d[j] то
Цикл от l:=1 до n
ch:=C[j,l]
C[j,l]:=C[i,l]
C[i,l]:=ch
Кц
ob:=d[j]
d[j]:=d[i]
d[i]:=ob
Все
Кц
Кц
Вывод сообщения(C[1:n,1:n])
КОНЕЦ
Листинг программы
Program laba3chast4;
Uses crt;
Var c:array [1..100,1..100] of integer;
D:array [1..10] of integer;
i,j,k,n,l,ob,ch:integer;
t:boolean;
Begin
clrscr;
writeln('Chetvertaya chast');
repeat
Writeln('vvodim n > 0');
read(n);
until n>0;
writeln('Teper matricy');
For i:=1 to n do
For j:=1 to n do begin
write(' C[',i,',',j,']= ');
read(C[i,j]);
end;
writeln('Teper vivedem ety matricu');
For i:=1 to n do begin
For j:=1 to n do
write(C[i,j]:6);
writeln;
writeln;
end;
readkey;
{Упорядочиваем элементы в каждой строке}
For i:=1 to n do begin
repeat
t:=true;
for j:=1 to n-1 do
if C[i,j]>C[i,j+1] then begin
t:=false;
ob:=c[i,j];
C[i,j]:=C[i,J+1];
C[i,j+1]:=ob;
end;
until t=true;
end;
{В одномерный массив записываем кол-во отрицательных элементов в
строках нашей матрицы}
For i:=1 to n do
For j:=1 to n do if C[i,j]<0 then d[i]:=d[i]+1;
{Меняем строки местами, опираясь на сведения полученного одномерного массива}
For i:=1 to n-1 do
For j:=i+1 to n do
if D[i]<d[j] then begin
for l:=1 to n do begin
ch:=C[j,l];
C[j,l]:=C[i,l];
C[i,l]:=ch;
end;
ob:=d[j];
d[j]:=d[i];
d[i]:=ob;
end;
writeln('Vivod yporyadochennoi matrici');
For i:=1 to n do begin
For j:=1 to n do
write(C[i,j]:6);
writeln;
writeln;
end;
readkey
end.
Тесты
1.Попытка ввода неверного N:
Chetvertaya chast
vvodim n > 0
-1
vvodim n > 0
0
vvodim n > 0
4
Teper matricy
C[1,1]= 1
C[1,2]= 2
C[1,3]= 3
C[1,4]= -5
C[2,1]= -4
C[2,2]= -7
C[2,3]= -12
C[2,4]= -31
C[3,1]= -3
C[3,2]= 15
C[3,3]= -6
C[3,4]= 12
C[4,1]= 51
C[4,2]= -5
C[4,3]= -4
C[4,4]= -7
Teper vivedem ety matricu
1 2 3 -5
-4 -7 -12 -31
-3 15 -6 12
51 -5 -4 -7
Vivod yporyadochennoi matrici
-31 -12 -7 -4
-7 -5 -4 51
-6 -3 12 15
-5 1 2 3