
Отчеты по проге паскаль вариант 27 / Отчет №4
.doc
МОСКОВСКИЙ ГОСУДАРСТВЕННЫЙ ИНСТИТУТ
ЭЛЕКТРОНИКИ И МАТЕМАТИКИ
(технический университет)
Кафедра ИТАС
ОТЧЕТ
ПО ЛАБОРАТОРНОМУ ПРАКТИКУМУ
по дисциплине “Алгоритмические языки и программирование”
Вариант___27______
Исполнитель Руководитель
__Хомич_ ____________
(фамилия) (фамилия)
___________ ____________
(подпись) (подпись)
Группа___АП-11____
Москва 2005
Содержание: с.
Первая часть:
Постановка задачи, внешняя спецификация 3
Алгоритм на псевдокоде 4
Листинг программы 5
Тесты 6-7
Вторая часть:
Постановка задачи, внешняя спецификация 8
Алгоритм на псевдокоде 9
Листинг программы 10
Тесты 11
Самостоятельная работа №4
Цель работы:
Алгоритмы с досрочным выходом из цикла.Алгоритмы обработки целых чисел.
Первая часть.
Постановка задачи:
1.Вычислить матрицу C[1:p,1:q] где p=max(n,r) q=max(m,l) при условии
Ai,j+Bi,j ,если Ai,j и Bi,j - существуют
Ai,j ,если Bi,j не существует, а Ai,j существует
Сi,j = Bi,j ,если Ai,j не существует, а Bi,j существует
-
,если Ai,j и Bi,j не существуют.
В массиве C обнулить максимальный элемент, если он совпадает с одним из элементов первого столбца матрицы A.
Внешняя спецификация:
Дано: A[1:n,1:m],B[1:r,1:l] – array of integer,матрицы заданные в задаче;
Результат:С[1:p,1:q], – array of integer,полученная матрица.
Алгоритм на псевдокоде:
НАЧАЛО
Ввод(A[1:n,1:m],B[1:r,1:l]);
Если r>n то x:=r иначе x:=n
Все
Если l>m то y:=l иначе y:=m
Все
max:=-32758;
Цикл от i:=1 до x
Цикл от j:=1 до y
Если (i<=n) и (j<=m) и (i<=r) и (j<=l) то C[i,j]:=A[i,j]+B[i,j]
Все
Если (i<=n) и (j<=m) и ((i>r) или (j>l)) то C[i,j]:=A[i,j]
Все
Если ((i>n) или (j>m)) и (i<=r) и (j<=l) то C[i,j]:=B[i,j]
Все
Если ((i>n) или (j>m)) и ((i>r) или (j>l)) то C[i,j]:=0
Все
Если C[i,j]>max то
max:=C[i,j]
imax:=i
jmax:=j
Все
Кц
Кц
Цикл от i:= 1 до n
Если max=A[i,1] то C[imax,jmax]:=0
Все
Кц
Вывод сообщения(C[1:p,1:q])
КОНЕЦ
Листинг программы:
Program Robokop1;
Uses crt;
Type mas=array [1..100,1..100] of integer;
Var r,l,m,n,i,j,k,x,y,max,imax,jmax:integer; A,B,C:mas;
Begin clrscr;
writeln('Введите размерность матрицы.'); repeat
writeln('Введите n и m:');
read(n,m);
until (n>0) and (m>0);
writeln('Теперь введите элементы матрицы: '); For i:=1 to n do
For j:=1 to m do begin
write(' A[',i,',',j,']= ');
read(A[i,j]);
end;
writeln('Мы получили :');
For i:=1 to n do begin
For j:=1 to m do write(A[i,j]:6); writeln; writeln; end;
Writeln('Введите размерность 2-ой матрицы:'); repeat
write('Введите r и l:');
read(r,l);
until (r>0) and (l>0);
write('Теперь введите элементы этой матрицы: ');
For i:=1 to r do
For j:=1 to l do begin
write(' B[',i,',',j,']= ');
read(B[i,j]);
end;
writeln('Мы получили:');
For i:=1 to r do begin
For j:=1 to l do write(B[i,j]:6); writeln; writeln; end; readkey;
If r>n then x:=r else x:=n; If l>m then y:=l else y:=m; max:=-32758;
For i:=1 to x do
For j:=1 to y do begin
If (i<=n) and (j<=m) and (i<=r) and (j<=l) then C[i,j]:=A[i,j]+B[i,j]; If (i<=n) and (j<=m) and ((i>r) or (j>l)) then C[i,j]:=A[i,j]; If ((i>n) or (j>m)) and (i<=r) and (j<=l) then C[i,j]:=B[i,j]; If ((i>n) or (j>m)) and ((i>r) or (j>l)) then C[i,j]:=0; If C[i,j]>max then begin
max:=C[i,j];
imax:=i;
jmax:=j;
end;
end;
For i:= 1 to n do
If max=A[i,1] then C[imax,jmax]:=0; writeln('Конечная матрица имеет вид:'); For i:=1 to x do begin
For j:=1 to y do write(C[i,j]:6); writeln; writeln; readkey; end; end.
Тесты:
1.Ввод неправильной размерности матриц:
Введите размерность матрицы
Вводим n и m: -3 -4
Вводим n и m: 0 6
Вводим n и m: 0 0
Вводим n и m: 1 -2
Теперь введите элементы этой матрицы: ……………..
2.Вводим такую матрицу, что максимальный эл-т не обнулится:
Введите размерность матрицы
Вводим n и m:2 2
Теперь введите элементы этой матрицы:
A[1,1]= 1
A[1,2]= -4
A[2,1]= 6
А[2,1]= 2
Мы получили:
1 -4
6 2
Введите размерность 2-ой матрицы:
Вводим n и m:2 2
Теперь введите элементы этой матрицы:
B[1,1]= 7
B[1,2]= 6
B[2,1]= -5
B[2,2]= 0
Мы получили:
7 6
-3 0
Мы получили:
8 2
3 2
3.Ввод матриц так,чтобы максимальный обнулился:
Введите размерность матрицы
Вводим n и m:2 2
Теперь введите элементы этой матрицы:
A[1,1]= 1
A[1,2]= -4
A[2,1]= 6
А[2,1]= 2
Мы получили:
8 4
6 2
Введите размерность 2-ой матрицы:
Вводим n и m:2 2
Теперь введите элементы этой матрицы:
B[1,1]= 7
B[1,2]= 6
B[2,1]= -5
B[2,2]= 0
Мы получили:
0 3
-5 0
Мы получили:
0 7
1 2
Вторая часть.
Постановка задачи:
Посчитать, сколько элементов заданного массива начинается с задуманной цифры M.
Внешняя спецификация:
Дано: A[1..n] - array [1..n] of integer,заданный массив;
M – integer, задуманная цифра.
Результат: count– integer,количество чисел в массиве, начинающихся с M.
Алгоритм на псевдокоде:
НАЧАЛО
Ввод(A[1.n],M)
count:=0;
Цикл от i:=1 до n
x:=a[i]
Цикл пока x >=10
x:= x div 10
Кц
Если x=m то count:=count+1
Все
Кц
Если count>0 то
Вывод сообщения(count,m)
Иначе Вывод сообщения (m)
КОНЕЦ
Листинг программы.
Program Robocop2;
Uses crt;
Var
A: array [1..100] of integer; count,i:byte; x,m,n:integer;
Begin clrscr;
writeln('Программа считает сколько эл-ов массива начинается с задуманной вами буквы М'); repeat
write('Введите размерность массива: ');
read(n);
until (n>0);
writeln('Теперь введите сам массив');
For i :=1 to n do begin write('A[',i,']='); read(A[i]);
end;
repeat
Writeln('Введите 0<M<10: '); readln(m);
until (m<10) and (m>0); count:=0;
For i:=1 to n do begin x:=a[i]; while x >=10 do
x:= x div 10;
if x=m then count:=count+1; end;
If count>0 then
write('Получается ',count,' чисел, начинающихся с ',m)
else write ('В массиве нет чисел,начинающихся с ',m);
readkey
end.
Тесты
1.Ввод неправильной размерности массива:
Введите размерность массива -4
Введите размерность массива = 0
Введите размерность массива 5
Теперь введите сам массив: ……
2.В массиве нет чисел, начинающихся с заданной цифры:
Введите размерность массива 5
Теперь введите сам массив
A[1]=6
A[2]=81
A[3]=3
A[4]=-12
A[5]=54
Введите 0<M<10: 4
В массиве нет чисел,начинающихся с 4
3.Нормальная работа программы:
Введите размерность массива 6
Теперь введите сам массив
A[1]=1
A[2]=34
A[3]=3000
A[4]=-54
A[5]=98
A[6]=3
Введите 0<M<10: 3
Получается 3 чисел, начинающихся с 3