Определите число соседств в последовательности - Pascal
Формулировка задачи:
Добрый день , помогите решить такую задачку:
2.Даны натуральное число n, целые числа а1 ,…,аn:
а) определите число соседств:
1) двух положительных чисел;
2) двух чисел разного знака;
б) Выясните, является ли последовательность а1 , …, аn упорядоченной по убыванию.
Формирование массива(ввод) в виде процедуры,(вывод) массива в виде другой процедуры Поиск числа соседств двух положительных чисел и
двух чисел разного знака в виде функций, в каждую подпрограмму передавать исходный массив в виде параметра.
Решение задачи: «Определите число соседств в последовательности»
textual
Листинг программы
const nmax=30;
type mas=array[1..nmax] of integer;
procedure vvod(var a:mas;var n:byte);
var i:byte;
begin
repeat
write('Введите размер массива от 2 до ',nmax,' n=');
readln(n);
until n in [2..nmax];
writeln('Введите ',n,' целых чисел');
for i:=1 to n do
begin
write('a[',i,']=');
readln(a[i]);
end;
end;
procedure vyvod(a:mas;n:byte);
var i:byte;
begin
writeln('Исходный массив');
for i:=1 to n do
write(a[i],' ');
writeln;
end;
function pol_2(a:mas;n:byte):byte;
var k,i:byte;
begin
k:=0;
for i:=1 to n-1 do
if(a[i]>0)and(a[i+1]>0)then k:=k+1;
pol_2:=k;
end;
function raz_z(a:mas;n:byte):byte;
var k,i:byte;
begin
k:=0;
for i:=1 to n-1 do
if((a[i]>0)and(a[i+1]<0))or((a[i]<0)and(a[i+1]>0))then k:=k+1;
raz_z:=k;
end;
function ubyv(a:mas;n:byte):byte;
var k,i:byte;
begin
k:=0;
i:=1;
while(k=0)and(i<n) do
if a[i]<a[i+1]then k:=1
else i:=i+1;
ubyv:=k
end;
var a:mas;
n:byte;
begin
vvod(a,n);
vyvod(a,n);
writeln('Число соседств двух положительных чисел =',pol_2(a,n));
writeln('Число соседств двух чисел с разными знаками =',raz_z(a,n));
if ubyv(a,n)=0 then write('Массив упорядочен по убыванию')
else write('Массив не упорядочен по убыванию')
end.
Объяснение кода листинга программы
- Константа
nmaxустанавливается со значением 30 (const nmax=30;) - Создается тип
mas- массив из 30 целых чисел (type mas=array[1..nmax] of integer;) - Описывается процедура
vvod, принимающая массивaи размер массиваnпо ссылке и запрашивающая ввод элементов массива с клавиатуры. - Описывается процедура
vyvod, принимающая массивaи размер массиваnи выводящая исходный массив на экран. - Описывается функция
pol_2, принимающая массивaи размер массиваn, которая подсчитывает число соседств двух положительных чисел в массиве. - Описывается функция
raz_z, принимающая массивaи размер массиваn, которая подсчитывает число соседств двух чисел с разными знаками в массиве. - Описывается функция
ubyv, принимающая массивaи размер массиваn, которая проверяет, упорядочен ли массив по убыванию. - Объявляется массив
aи переменнаяnтипаbyte. - В основной программе вызывается процедура
vvodдля ввода массиваaи определения размераn. - Вызывается процедура
vyvodдля вывода исходного массива. - Вызываются функции
pol_2иraz_zдля подсчета числа соседств двух положительных чисел и числа соседств двух чисел с разными знаками соответственно. - Проверяется с помощью функции
ubyv, упорядочен ли массив по убыванию, и выводится соответствующее сообщение. Этот код фактически работает со введенным пользователем массивом целых чисел и выполняет различные действия с этими числами, подсчитывая различные характеристики и проверяя его порядок.