Если в последовательности имеются равные элементы, изменить значения всех её элементов по правилу - PascalABC.NET
Формулировка задачи:
Разработать алгоритм и программу нисходящим способом, предполагая заданной матрицу А из 5 строк и 5 столбцов или одномерные массивы, указанной длины. Если в последовательности C1, C2, ... C(n) имеются равные элементы, изменить значения всех её элементов по правилу C(i) = C(i) + A (j,i). Прогу писали раньше, но сейчас её надо переделать для Procedure, одну ли несколько выделить. Попытался написать, но вот что то не получается, помогите исправить, или скажите, как.
Решение задачи: «Если в последовательности имеются равные элементы, изменить значения всех её элементов по правилу»
textual
Листинг программы
const n=5; //по условию
type matr=array[1..n,1..n] of integer;//искать одинаковые в вещественных массивах это
//занятие мало перспективное
type mas=array[1..n] of integer;
procedure massiv(var c:mas);
var i:byte;
begin
writeln('Массив С');
for i:=1 to n do
begin
c[i]:=random(10);
write(c[i]:3);
end;
writeln;
end;
procedure matrica(var a:matr);
var i,j:byte;
begin
writeln('Матрица А');
for i:=1 to n do
begin
for j:=1 to n do
begin
a[i,j]:=10+random(50);
write(a[i,j]:3);
end;
writeln;
end;
end;
procedure viyavlenie(c:mas;var k:byte);
var i,j:integer;
begin
k:=0;
i:=1;
while(i<n)and(k=0) do
begin
j:=i+1;
while(j<=n)and(k=0) do
if c[j]=c[i] then k := 1
else inc(j);
if k=0 then inc(i);
end;
end;
procedure izmenenie_massiva(a:matr;var c:mas);
var i:integer;
begin
writeln('В массиве имеются одинаковые элементы');
for i:= 1 to n do
begin
c[i]:=c[i]+a[i,i];
write(c[i]:4);
end;
end;
var a:matr;
c:mas;
k:byte;
begin
randomize;
massiv(c);
matrica(a);
viyavlenie(c,k);
if k = 0 then writeln('В массиве одинаковых элементов нет') else
izmenenie_massiva(a,c);
end.
Объяснение кода листинга программы
- Объявлены две константы: n = 5 (размер массива) и T = array[1..n,1..n] of integer (тип матрицы).
- Создаются две переменные: mas (массив) и matr (матрица).
- В процедуре massiv создается массив c размером n и заполняется случайными числами от 0 до 9.
- В процедуре matrica создается матрица a размером n x n и заполняется случайными числами от 10 до 50.
- В процедуре viyavlenie осуществляется поиск одинаковых элементов в массиве c. Переменная k инициализируется нулем, а переменные i и j инициализируются единицей.
- Пока i меньше n и k равно нулю, выполняется внутренний цикл, который ищет элемент c[j], равный c[i]. Если такой элемент найден, k изменяется на единицу.
- Если k остается равным нулю после внутреннего цикла, увеличивается значение i.
- Если k равно единице, вызывается процедура izmenenie_massiva, которая изменяет значения элементов массива c, добавляя к ним соответствующие значения из матрицы a.
- Если k равно нулю, выводится сообщение
В массиве одинаковых элементов нет. - В основной части программы создаются переменные a и c, инициализируются нулевыми значениями, а затем вызываются функции massiv, matrica и viyavlenie.
- Если k равно нулю, выводится сообщение
В массиве одинаковых элементов нет. В противном случае вызывается функция izmenenie_massiva.