Вывести закономерность возрастания или убывания по первым двум числам - Turbo Pascal
Формулировка задачи:
Не правильно считает программа : задаю случайный массив одномерный от 1 до 20 , с числами пример от -50 до 100 , нужно вывести закономерность возрастания или убывания по первым двум числам , и после продолжить убирая лишние элементы массива. Но получается так на пример массив :-1 0 2 3 -5 ............7; получается -1 0 2 3 7 возрастание правильно или пример 6 5 8 -4 6 -1..... ; получается 6 5 -4 -1 ... правильно. А может и так 3 6 8 4 6 2 .... определяет убывание 3 2 вместо возрастание , не стабильно работает в чём ошибка , понять не могу ?
Листинг программы
- var
- h: array[1..20] of integer;
- i, k: integer;
- b: boolean;
- begin
- writeln('Generated massif:');
- Randomize;
- for i := 1 to 20 do
- begin
- h[i] :=-50 + random(100);
- write(' ', h[i]);
- if i <> 1 then
- if (h[i] <> h[i - 1]) then
- begin
- if h[i - 1] < h[i] then b := true //increase
- else b := false; //decrease
- end
- end;
- writeln;
- writeln;
- write('ready massif ');
- if b then writeln('(increase: )')
- else writeln('(decrease: )');
- write(' ', h[1]); //first number of massif
- k := h[1]; //fix first
- if b then //increasing of numbers
- begin
- for i := 2 to 20 do
- if k <h[i] then
- begin write(' ', h[i]); k := h[i] end
- end
- else //decreasing of numbers
- begin
- for i := 2 to 20 do
- if k > h[i] then
- begin write(' ', h[i]); k := h[i] end
- end;
- readln;
- end.
Решение задачи: «Вывести закономерность возрастания или убывания по первым двум числам»
textual
Листинг программы
- const n=20;
- var
- a:array[1..n] of integer;
- i,j:integer;
- b:boolean;
- begin
- randomize;
- for i:=1 to n do begin
- a[i]:=random(101)-50;
- write(a[i],' ');
- end;
- writeln;
- j:=1; //индекс отобранного элемента
- b:=a[1]<a[2]; //если true, то последовательность возрастающая
- if b then write('increasing:') else write('decreasing:'); //собственно вывод типа этой последовательности
- write(a[j]); //вывод первого элемента
- for i:=2 to n do if (a[i]>a[j]=b) then begin write(' ',a[i]);j:=i;end;
- //цикл для вывода остальных элементов,
- //удовлетворяющих требованию для первых двух,
- //т.е. последний элемент, удовлетворяющий
- //требованиям a[j] при сравнении с текущим
- //должен принимать значение равное переменной
- // b (a[1]<a[2])
- end.
Объяснение кода листинга программы
- Переменная n инициализируется значением 20.
- Создается массив a, который может вместить до 20 целых чисел.
- Создаются две переменные i и j, которые будут использоваться для цикла.
- Вызывается функция randomize, чтобы инициализировать генератор случайных чисел.
- Запускается цикл for, который выполняется 20 раз. В каждой итерации этого цикла присваивается случайное число от 1 до 100 (включительно) переменной a[i], и это число выводится на экран с пробелом.
- После завершения цикла выводится символ новой строки.
- Переменная b инициализируется значением true. Она будет использоваться для определения типа последовательности (возрастающей или убывающей).
- Если значение переменной b равно true, то выводится сообщение
increasing:
, что означает, что последовательность является возрастающей. - Если значение переменной b равно false, то выводится сообщение
decreasing:
, что означает, что последовательность является убывающей. - Выводится первый элемент массива a[j].
- Запускается цикл for, который начинается со второго элемента массива (i=2) и продолжается до последнего элемента (n-1).
- Внутри цикла проверяется условие a[i]>a[j] и если оно выполняется, то выводится элемент a[i] и переменная j обновляется, чтобы отразить текущее значение j.
- Цикл завершается, когда выполнено условие a[i]>a[j] для всех элементов от i=2 до n-1.
- Выводится последнее значение переменной j, которое должно быть равно b (a[1]<a[2]).
- Конец программы.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д