Часть II
Задание 3
Задание
Дан целочисленный массив A[1:n].Написать программу, включающую две процедуры с параметрами. В первой процедуре необходимо подсчитать количество повторений каждого элемента массива A. Вторая процедура решает следующую задачу: Сформировать новый массив, содержащий все различные элементы массива A по одному разу.
Постановка задачи
Дано: n, A[1:n].
Результат: b
При: n – натуральное, n<=nmax.
Связь:
1)nb:=0
д
ля
i=1,n,
j
:=1
пока
a[i]≠b[j]
и
j<=nb; nb:=nb+1,b[nb]:=a[i],kol[nb]:=1,если
j>nb, иначе
j:=j+1;
2)ptr=2
b[1]:=a[1]
b[ptr]:=a[i] и ptr:=ptr+1 если для ∃b[ptr] нету равного ему ∀a[i]
Внешняя спецификация
Введите число элементов массива A
Введите целое положительное число
Введите массив A из <n> элементов
Введите <i> целое число
Исходный массив
<A1><A2>..<An>
Новый массив, содержащий элементы исходного по-одному разу
<B1><B2>..<Bptr-1>
Алгоритм
Внутренние переменные
a,b[1..20]-цел
n,i,ptr-цел
z-вещ
Процедура p1
Внутрнние переменные
i,j,nb-цел
Начало проц
nb:=0;
Цикл для i:=1 до n
Начало
j:=1;
Цикл пока (a[i]<>b[j]) и (j<=nb)
j:=j+1;
кцикл
if j>nb то
nb:=nb+1;
b[nb]:=a[i];
kol[nb]:=1
Иначе kol[j]:=kol[j]+1;
кесли
Цикл для i:=1 до nb
Вывод('Количество элементов массива, равных ', b[i],' = ',kol[i]);
кцикл
Конец проц;
Процедура p2
Внутренние переменные
i2,j2-цел
Начало проц
b[1]:=a[1];
ptr:=2;
Цикл для i2:=2 до n
flag:=false;
Цикл для j2:=1 до ptr-1
если a[i2]=b[j2] то
flag:=true;
если flag=false то
b[ptr]:=a[i2];
ptr:=ptr+1;
кесли
кцикл
кцикл
Вывод('Новый массив, содержащий элементы исходного по-одному разу');
Цикл для i2:=1 до ptr-1
Вывод(' ',b[i2]);
кцикл
Конец проц
Начало
Вывод('Введите число элементов массива A');
цикл Вывод('Введите целое положительное число');
ввод(z);
пока (z>0) и (z=Округлить(z));
n:= Округлить(z);
кцикл
Вывод('Введите массив A из ', n,' элементов');
Цикл для i:=1 до n
цикл Вывод('Введите ',i,' целое число');
ввод(z);
пока z=Округлить(z);
a[i]:=Округлить(z);
кцикл
кцикл
Вывод('Исходный массив');
Цикл для i:=1 до n
Вывод(a[i],' ');
кцикл
p1(a,n);
p2(a,n);
Конец
Текст программы
program Lab5;
type mass=array[1..20] of integer;
var
a,b:mass;
n,i,ptr:integer;
z:real;
flag:boolean;
//1
procedure p1(a:mass; n:integer);
var i,j,nb:integer;
b,kol:mass;
begin
nb:=0;
for i:=1 to n do
begin
j:=1;
while (a[i]<>b[j]) and (j<=nb) do
begin
j:=j+1;
end;
if j>nb then
begin
nb:=nb+1;
b[nb]:=a[i];
kol[nb]:=1
end
else kol[j]:=kol[j]+1;
end;
for i:=1 to nb do
writeln('Количество элементов массива, равных ', b[i],' = ',kol[i]);
end;
{Procedure p1(a:mass; n:integer);
var i1,j1:integer;
begin
For i1:=1 to n do
Begin
kol:=0;
For j1:=1 to n do
If (i1<>j1)and (A[i1]=A[j1]) then
kol:=kol+1;
Writeln (' Элемент A [',i1,'] = ',A[i1],'. Повторяется - ',kol,' раз ');
End;
End;}
// 22
Procedure p2(a:mass;n:integer);
var i2,j2:integer;
begin
b[1]:=a[1];
ptr:=2;
For i2:=2 to n do
begin
flag:=false;
for j2:=1 to ptr-1 do
if a[i2]=b[j2] then
flag:=true;
if flag=false then
begin
b[ptr]:=a[i2];
ptr:=ptr+1;
end;
end;
Writeln('Новый массив, содержащий элементы исходного по-одному разу');
For i2:=1 to ptr-1 do
Write(' ',b[i2]);
end;
//3
begin
writeln('Введите число элементов массива A');
repeat writeln('Введите целое положительное число');
readln(z);
until (z>0) and (z=round(z));
n:=round(z);
writeln('Введите массив A из ', n,' элементов');
for i:=1 to n do
begin
repeat writeln('Введите ',i,' целое число');
readln(z);
until z=round(z);
a[i]:=round(z);
end;
Writeln('Исходный массив');
For i:=1 to n do
write(a[i],' ');
writeln;
p1(a,n);
p2(a,n);
end.
Тесты к программе и результаты
Введённые данные |
Результат |
Исходный массив 23 62 -62 6 62 |
Количество элементов массива, равных 23 = 1 Количество элементов массива, равных 62 = 2 Количество элементов массива, равных -62 = 1 Количество элементов массива, равных 6 = 1 Новый массив, содержащий элементы исходного по-одному разу 23 62 -62 6 |
Исходный массив 4 4 4 4 |
Количество элементов массива, равных 4 = 4 Новый массив, содержащий элементы исходного по-одному разу 4 |
Исходный массив 1 -5 -6 23 7 17 |
Количество элементов массива, равных 1 = 1 Количество элементов массива, равных -5 = 1 Количество элементов массива, равных -6 = 1 Количество элементов массива, равных 23 = 1 Количество элементов массива, равных 7 = 1 Количество элементов массива, равных 17 = 1 Новый массив, содержащий элементы исходного по-одному разу 1 -5 -6 23 7 17 |
