Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
КНИГА_Учимся программировать TURBO PASCAL 7.doc
Скачиваний:
32
Добавлен:
19.08.2019
Размер:
1.62 Mб
Скачать

Var old, new : real; к : integer;

BEGIN

WRITE('BBEДИTE X = ');

READLN (OLD);

WRITE('BBEДИTE X = ');

READLN (NEW);

K:= 0;

REPEAT

IF NEW*OLD<0 THEN К := K+1;

OLD := NEW;

WRITE('BBEAMTE X =');

READLN (NEW)

UNTIL NEW = 0;

IF K>0 THEN

WRITELN('ПОСЛЕДOBATEЛЬНОСТЬ МЕНЯЕТ ЗНАК ', К, 'РАЗ')

ELSE

WRITELN('ПOCЛEДOBATEЛЬНОСТЬ НЕ МЕНЯЕТ ЗНАКА')

END.

Для решения задачи:

- формируем тело программы и описываем переменные;

- вводим два первых числа как OLD и NEW, задаем началь­ное значение счетчика К;

- в цикле сравниваем два этих числа, и если их знаки не рав­ны, то значение счетчика увеличивается на единицу;

- переприсваиваем значение OLD := NEW и вводим новое -NEW;

- в зависимости от счетчика К выводим результат.

Переменные:

OLD - предыдущее число;

NEW - рассматриваемое число;

К - счетчик.

ВВЕДИТЕ X = -4

ВВЕДИТЕ X = 5

ВВЕДИТЕ X = -4

ВВЕДИТЕ X = 4

ВВЕДИТЕ X = -4

ВВЕДИТЕ X = 4

ВВЕДИТЕ X = 0

ПОСЛЕДОВАТЕЛЬНОСТЬ МЕНЯЕТ ЗНАК 5 РАЗ

ВВЕДИТЕ X = 4

ВВЕДИТЕ X = 2

ВВЕДИТЕ X = 88

ВВЕДИТЕ X = 0

ПОСЛЕДОВАТЕЛЬНОСТЬ НЕ МЕНЯЕТ ЗНАКА

Рис. 3.5. Результат работы PRG3_7

Задача 3.8 Вводится последовательность из п произвольных чисел. Определить, сколько раз последователь­ность меняет знак.

Основная сложность в этой задаче - запомнить, какой знак был у числа перед появлением серии нулей. Ввод нуля не обязательно озна­чает, что последовательность меняет знак. Например, при вводе 1 0 0 -2 последовательность меняет знак, а при 1 0 0 2 - нет.

Для решения нужно ввести вспомогательный флаг F, с помо­щью которого можно запомнить знак числа перед серией нулей.

PROGRAM PRG3_8;

Var old, new, f : real;

K, I, N : INTEGER;

BEGIN

REPEAT

WRITE('BBEДИTE ДЛИНУ ПОСЛЕДОВАТЕЛЬНОСТИ N = ');

READLN (N);

UNTIL N>0;

WRITE('BBEДИTE X =' );

READLN (OLD);

F := OLD;

K= 0;

FOR I := 2 TO N DO

BEGIN

WRITE('BBEДИTE X =');

READLN (NEW);

IF (NEW<>0) AND (F = 0) THEN F := NEW;

IF NEW*F<0 THEN

BEGIN

F := NEW;

К := K+1

END;

OLD := NEW;

END;

IF K>0 THEN

WRITELN('ПOCЛEДOBATEЛЬНОСТЬ МЕНЯЕТ ЗНАК ', К, 'РАЗ')

ELSE

WRITELN('ПOCЛEДOBATEЛЬHOCTЬ HE МЕНЯЕТ ЗНАКА')

END.

Для решения задачи:

- формируем тело программы и описываем переменные;

- вводим длину последовательности, первое число OLD, зада­ем начальное значение счетчика К;

- задаем значение знака числа OLD как F;

- в цикле вводим число NEW;

- сравниваем знаки NEW и F; если они не равны, то значение счетчика увеличивается на единицу и знак F изменяется на противоположный;

- если считывается число, равное нулю, то знак F не изменя­ется;

- перепрнсваиваем значение OLD := NEW и вводим новое - NEW;

- в зависимости от счетчика К выводим результат.

Переменные:

OLD - предыдущее число;

NEW - рассматриваемое число;

К - счетчик;

F - вспомогательная переменная;

I - переменная цикла;

N - длина последовательности.

ВВЕДИТЕ ДЛИНУ ПОСЛЕДОВАТЕЛЬНОСТИ N = 7

ВВЕДИТЕ X = -4

ВВЕДИТЕ X = 0

ВВЕДИТЕ X = 0

ВВЕДИТЕ X = -4

ВВЕДИТЕ X = -4

ВВЕДИТЕ X = 4

ВВЕДИТЕ X = 0

ПОСЛЕДОВАТЕЛЬНОСТЬ МЕНЯЕТ ЗНАК 1 РАЗ

ВВЕДИТЕ ДЛИНУ ПОСЛЕДОВАТЕЛЬНОСТИ N = 4

ВВЕДИТЕ X = 4

ВВЕДИТЕ X = 2

ВВЕДИТЕ X = 0

ВВЕДИТЕ X = 0

ПОСЛЕДОВАТЕЛЬНОСТЬ НЕ МЕНЯЕТ ЗНАКА

Рис. 3.6. Результат работы PRG3_8

Задача 3.9 Вводится последовательность ненулевых чисел, 0 - конец последовательности. Определить, явля­ется ли последовательность возрастающей.

Решение данной задачи строится от противного. Математиче­ски для того, чтобы последовательность была возрастающей, для каждого очередного элемента NEW и предыдущего OLD должно выполняться условие NEW > OLD

Любое нарушение данного условия приводит к тому, что по­следовательность не может быть возрастающей.

PROGRAM PRG3_9;