
Отчеты по проге паскаль вариант 27 / Отчет №5
.docМОСКОВСКИЙ ГОСУДАРСТВЕННЫЙ ИНСТИТУТ
ЭЛЕКТРОНИКИ И МАТЕМАТИКИ
(технический университет)
Кафедра ИТАС
ОТЧЕТ
ПО ЛАБОРАТОРНОМУ ПРАКТИКУМУ
по дисциплине “Алгоритмические языки и программирование”
Вариант___27______
Исполнитель Руководитель
__Хомич_ ____________
(фамилия) (фамилия)
___________ ____________
(подпись) (подпись)
Группа___АП-11____
Москва 2005
Содержание c.
1.Первая часть:
Постановка задачи, Внешняя спецификация 3
Алгоритм на псевдокоде, Листинг программы, 4
Тесты 5
2.Вторая часть:
Постановка задачи, Внешняя спецификация 6
Алгоритм на псевдокоде 7
Листинг программы 8
Тесты 9
3.Третья часть:
Постановка задачи, Внешняя спецификация 10
Алгоритм на псевдокоде 11
Листинг программы 12-13
Тесты 14
Самостоятельная работа №4
Цель работы:
Использование процедур и функций.
Первая часть.
Постановка задачи:
1.Оформить в виде функции общую часть в предложенных функциях:
a=v√v2-r2 / 2 – r2 / 2*ln|v|+√v2-r2
k=(x2-b2)7/2 / 7 + 2b2(x2-b2)5/2 / 5 + b4(x2-b2)3/2 / 3
Внешняя спецификация:
Дано:v, r, x, b – real, заданные числа;
Результат:a, k –real, полученные выражения.
Алгоритм на псевдокоде.
НАЧАЛО
Функция t(v,r:real);
t:=sqrt(v*v-r*r);
КФ
Ввод(v,r);
a:=v*t(v,r)/((2-r*r)*(2*ln(abs(v))+t(v,r)));
k:=sqr(w)*t(v,r)/7+2*r*r*w*sqr(t(v,r))/5+r*r*r*r*w/3;
Вывод(a,k)
КОНЕЦ
Листинг программы.
program diez1;
uses crt;
var k,w,a,b,v,r,x: real;
n,i:integer;
function t (v,r:real): real;
begin
t:=sqrt(v*v-r*r);
end;
begin
clrscr;
repeat
write('Введите v>r ');
readln(v,r)
until (r*r<>2) and (v>r);
a:=v*t(v,r)/((2-r*r)*(2*ln(abs(v))+t(v,r)));
writeln('Введите x>b');
repeat
readln(v,r);
until v>r;
w:=t(v,r)*sqr(t(v,r));
k:=sqr(w)*t(v,r)/7+2*r*r*w*sqr(t(v,r))/5+r*r*r*r*w/3;
writeln('a=',a:8:2);
writeln('k=',k:8:2);
readln;
end.
Тесты.
1.Ввод неверного x и y:
Введите v>r : 0 3
Введите v>r : -1 5
Введите v>r : 7 3
Введите x>b : 5 1
a= -0.62
k= 10842.70
Вторая часть.
Постановка задачи:
1. Вычислить G=min(max(abs(Bi,j))),где Bi,j-элементы квадратной матрицы n-ого порядка. j i
Внешняя спецификация:
Дано:B [1:n,1:n] – array of integer, заданная матрица;
n – integer, размер матрицы;
Результат: min – integer, минимальный элемент столбца среди максимальных по абсолютной величине эл-ов строки.
Алгоритм на псевдокоде
НАЧАЛО
Функция GG (n:byte;var B:matr):integer;
minj:=32767;
Цикл от i:= 1 до n
maxi:=B[1,j];
Цикл от i:=2 до n
Если abs(B[i,j])>abs(maxi) то
maxi:=B[i,j];
Если maxi<minj то minj:=maxi;
Все
КЦ
gg:=minj;
КФ
G:=gg(n,B); Вывод (G);
Все
КОНЕЦ.
Листинг программы.
program diez2;
uses crt;
type matr=array[1..10,1..10] of integer;
var B:matr;
n,i,j:byte;
G:integer;
function GG(n:byte;var B:matr):integer;
var i,j:byte;
minj,maxi:integer;
begin
minj:=32767;
for j:=1 to n do
begin
maxi:=B[1,j];
for i:=2 to n do
if abs(B[i,j])>abs(maxi) then
maxi:=B[i,j];
if maxi<minj then minj:=maxi;
end;
gg:=minj;
end;
BEGIN clrscr;
writeln('Программа ищет минимальный эл-т столбца среди максимальных по абс. величине эл-ов столбца'); repeat
writeln('Введите 0<n<=10 - размер матрицы');
read(n);
until(n>0) and (n<=10);
writeln('Введите эл-ты матрицы');
for i:=1 to n do
for j:=1 to n do
read(B[i,j]);
for i:=1 to n do
begin
for j:=1 to n do
write(B[i,j]:5);
writeln;
end;
G:=gg(n,B); write('G= ',G); readkey;
end.
Тесты
1.Нормальная работа:
Введите 0<n<=10 - размер матрицы: 3
Введите эл-ты матрицы:
5 98 1
-100 5 32
0 21 -54
G= -100
Третья часть.
Постановка задачи:
Дан целочисленный массив A[1..n]:
-
Посчитать количество повторений каждого элемента.
-
Сформировать новый массив, состоящий из элементов, которые повторяются в заданном массиве.
Пример:
{1,8,5,1,0,8,7,36,8} {1,8,1,8,8}
Внешняя спецификация:
Дано:C [1:n] – array of integer, заданный массив;
n – integer, размер матрицы;
Результат: b – array of integer, массив, состоящий из повторяющихся элементов заданного;
kol – array of integer, массив состоящий из всех элементов заданного без повторений;
sum – array of integer, массив, состоящий из количества повторений каждого элемента заданного массива.
Алгоритм на псевдокоде.
Процедура form(c:mass);
Цикл от i:=1 до n
f:=false
Цикл от j:=1 до n
Если (c[i]=c[j]) и (i<>j) и (f=false) то
b[k]:=c[i]
f:=true
k:=k+1
Все
Кц
Кц
КП
Процедура kolvo(c:mass);
l:=0
Цикл от i:=1 до n
j:=1
Цикл пока (j<=l) и ((c[i]<>kol[j])) или (i=j)
j:=j+1
Кц
Если j>l то
l:=l+1
kol[l]:=c[i];
sum[l]:=1;
Иначе
sum[j]:=sum[j]+1
Все
Кц
КП
НАЧАЛО
Ввод(n,c[1:n])
form(c)
kolvo(c)
Вывод(b,kol,sum)
КОНЕЦ
Листинг программы.
Program diez3;
uses crt;
type mass=array [1..20] of integer;
var c,b,kol,sum:mass;
i,j,k,l,n:integer;
f:boolean;
procedure form(c:mass);
Begin
k:=1;
For i:=1 to n do begin
f:=false;
For j:=1 to n do
if (c[i]=c[j]) and (i<>j) and (f=false) then
begin
b[k]:=c[i];
f:=true;
k:=k+1;
end;
end;
end;
procedure kolvo(c:mass);
var i,j:integer;
begin
l:=0;
for i:=1 to n do
begin
j:=1;
while (j<=l) and ((c[i]<>kol[j])) or (i=j) do
j:=j+1;
If j>l then begin
l:=l+1;
kol[l]:=c[i];
sum[l]:=1;
end else sum[j]:=sum[j]+1;
end;
end;
Begin
clrscr;
repeat
write(Введите количество элементов массива: ');
read(n);
until n>2;
write(Введите сами элементы: ');
For i:=1 to n do
read(c[i]);
form(c);
kolvo(c);
writeln('Массив имеет вид:');
for i:=1 to k-1 do
write(b[i]:3);
writeln;
writeln(‘Повторения:’);
write('Элемент ');
for i:=1 to l do
write(kol[i]:5);
writeln;
write(‘Количество повторений ');
for i:=1 to l do
write(sum[i]:5);
readkey
end.
Тесты
1.Пример из задания(массив с повторениями,нормальная работа):
Введите количество элементов массива: 9
Введите сами элементы: 1 8 5 1 0 8 7 36 8
Массив имеет вид
1 8 1 8 8
Повторения
Элемент 1 8 5 0 7 36
Количество повторений 2 3 1 1 1 1
2.Массив без повторений:
Введите количество элементов массива: 4
Введите сами элементы: 1 2 3 4
Массив имеет вид
Повторения
Элемент 1 2 3 4
Количество повторений 1 1 1 1