Сколько раз меняется знак в данной последовательности чисел? Запомнить номера позиций, в которых меняется знак - Turbo Pascal
Формулировка задачи:
Помогите пожалуйста переделать программу.
Вот задание для программы :Задан массив. Определить сколько раз меняется знак в данной последовательности чисел, запомнить номера позиций, в которых меняется знак.
Вот сама программа:
Помогите сделать ее с процедурами ввода, обработки, вывода.
Решение задачи: «Сколько раз меняется знак в данной последовательности чисел? Запомнить номера позиций, в которых меняется знак»
textual
Листинг программы
uses crt; const n=10; type mas=array[1..n] of integer; procedure vvod(var a:mas); var i:byte; begin randomize; for i:=1 to n do begin repeat a[i]:=-10+random(21); until a[i]<>0;//массив без 0 end; end; procedure vyvod(a:mas); var i:byte; begin writeln('Массив'); for i:=1 to n do write(a[i]:3); writeln; end; procedure obr(a:mas); var i,k:byte; begin writeln('Знак меняется в позициях'); k:=0; for i:=2 to n do if a[i]*a[i-1]<0 then begin inc(k); write(i:2); end; writeln; if k=0 then write('Знак ни разу не меняется') else write('Всего смен знака=',k) end; var a:mas; begin clrscr; vvod(a); vyvod(a); obr(a); readln end.
Объяснение кода листинга программы
- Объединение модулей (использование): uses crt;
- Объявление константы размера массива: const n=10;
- Объявление типа массива: type mas=array[1..n] of integer;
- Объявление процедуры ввода массива: procedure vvod(var a:mas);
- Объявление переменной для цикла: var i:byte;
- Цикл для заполнения массива: for i:=1 to n do
- Повторение ввода значения до ненулевого: repeat a[i]:=-10+random(21); until a[i]<>0;
- Объявление процедуры вывода массива: procedure vyvod(a:mas);
- Вывод значения массива: writeln('Массив');
- Цикл для вывода значений массива: for i:=1 to n do
- Вывод значения с отступами: write(a[i]:3);
- Объявление процедуры обработки массива: procedure obr(a:mas);
- Объявление переменных для цикла и счетчика: var i,k:byte;
- Цикл для проверки смены знаков: for i:=2 to n do
- Проверка знака на смену: if a[i]*a[i-1]<0 then
- Увеличение счетчика при смене знака: inc(k);
- Вывод номера позиции: write(i:2);
- Вывод общего количества смены знаков: write('Всего смен знака=',k)
- Проверка на отсутствие смены знаков: if k=0 then write('Знак ни разу не меняется')
- Объявление переменной для чтения: var readln;
- Начало выполнения программы: begin clrscr; vvod(a); vyvod(a); obr(a); readln; end.