Массивы Одномерный - Выписать из массива А в новый массив В все числа левее Х и подходящие под условие Z, удалить из массива все Y левее Х и все Z правее Х, не создавая новый массив, но изменяя массив А. Х – ближайшее по модулю к максимальному числу
Описание
ЗАДАНИЕ 1 только
Вариант . РК Массивы
Цель работы:
/ задача из РК программа в Pascal Lazarus.
В архиве также файл с объяснениями работы программы. Тэги: Программа на Lazarus, PascalObject, Pascal, Delphi, Turbo Delphi, Pascal ABC / Анимация, ЛР, РК, ДЗ, 2023
Условия для программы, под которые она выполнена:
ЗАДАНИЕ 1
Выписать из массива А в новый массив В все числа левее Х и подходящие под условие Z, удалить из массива все Y левее Х и все Z правее Х, не создавая новый массив, но изменяя массив А.
Х – ближайшее по модулю к максимальному числу (последнее, если несколько).
Y – отрицательное.
Z – больше нуля и кратно 8.
Пример работы программы:
Вводить этот массив (20 символов), Х здесь 80 (он будет тем самым центром массива, от которого все крутится), максимальное число 96:
2, 4, 8, 16, -8, -16, 0, 5, 1, -10, -90, 12, 16, 80, -70, 0, -16, 8, 24, 96
Ответ:
8, 16, 16, 80, -70, 0, -16

Программа в сделанном виде:







Показать/скрыть дополнительное описание
Рубежный контроль 2 . Вариант . РК Массивы Цель работы: / задача из РК программа в Pascal Lazarus. В архиве также файл с объяснениями работы программы. Тэги: Программа на Lazarus, PascalObject, Pascal, Delphi, Turbo Delphi, Pascal ABC / Анимация, ЛР, РК, ДЗ, 2023 Условия для программы, под которые она выполнена: Выписать из массива А в новый массив В все числа левее Х и подходящие под условие Z, удалить из массива все Y левее Х и все Z правее Х, не создавая новый массив, но изменяя массив А. Х – ближайшее по модулю к максимальному числу (последнее, если несколько). Y – отрицательное. Z – больше нуля и кратно 8. Пример работы программы: Вводить этот массив (20 символов), Х здесь 80 (он будет тем самым центром массива, от которого все крутится), максимальное число 96: 2, 4, 8, 16, -8, -16, 0, 5, 1, -10, -90, 12, 16, 80, -70, 0, -16, 8, 24, 96 Ответ: 8, 16, 16, 80, -70, 0, -16 Программа в сделанном виде: 1.Запрашивает у пользователя количество элементов в массиве n.
2.Создает массив A длиной n. 3.Запрашивает у пользователя ввод элементов массива A через пробел. 4.Находит максимальное число в массиве и его индекс (maxChislo и maxChisloIndex). 5.Ищет число X, которое находится ближе всего к максимальному числу по модулю (такое число, что разница между ним и максимальным числом наименьшая) и его индекс (X и X_index). 6.Удаляет элементы из массива A, которые находятся слева от X и соответствуют условию Y и не соответствуют Z (числа, меньше 0 или не кратные 8) и удаляет элементы справа от X, которые соответствуют условию Z (положительные числа, кратные 8). 7.Выводит полученный массив A. Программа выполняет следующие шаги: •Ищет максимальное число в массиве.
•Находит число X, которое ближе всего к максимальному числу по модулю и отличное от максимального числа. •Удаляет элементы из массива A, которые находятся слева от X и соответствуют условию Y и не соответствуют Z (числа, меньше 0 или не кратные 8) и удаляет элементы справа от X, которые соответствуют условию Z (положительные числа, кратные 8). •Выводит полученный массив A. Пример работы программы: Вводить этот массив (20 символов), Х здесь 80 (он будет тем самым центром массива, от которого все крутится), максимальное число 96: 2, 4, 8, 16, -8, -16, 0, 5, 1, -10, -90, 12, 16, 80, -70, 0, -16, 8, 24, 96 Ответ: 8, 16, 16, 80, -70, 0, -16 Код: program project1; var n, i, j, X_index, maxChisloIndex: integer; maxChislo, minX, X: integer; A: array of integer; begin writeln(\'Kolichestvo elementov v massive:\'); readln(n); writeln; SetLength(A, n); writeln(\'Vvedite elementi massiva cherez probel:\'); for i := 0 to n - 1 do begin read(A); end; writeln; maxChislo := -999999999; //присваиваем наименьшее, т.к.
ищем наибольшее minX := 999999999; //присваиваем наибольшее, т.к. ищем наименьшее X_index:= 0; //Ищем максимальное число в массиве for i := 0 to High(A) do begin if (A >= maxChislo) then //если максимальное число в массиве повторяется, то берется последнее т.к. знак = begin maxChislo := A; maxChisloIndex := i; end; end; //Ищем число самое ближайшее по модулю от максимального числа (Ищем Х) , если таких несколько берем последнее (знак <= в условии) for i := 0 to High(A) do begin if ((Abs(maxChislo - A) <= minX) and (A <> maxChislo)) then //ищем наименьшую разницу между числами и чтобы они не были равны (неполучился 0) begin X := A; minX := Abs(maxChislo - A); X_index := i; end; end; writeln; //Выводим if maxChislo <> -999999999 then begin writeln(\'Maksimalnoe chislo: \', maxChislo) ; if X_index >= 0 then writeln(\'Chislo X v dannom massive: \', A[X_index]) else writeln(\'Chislo X ne naideno, v dannom massive vse chisla ravni !\'); end; //Выполним условия задачи: оставим слева от Х все числа, подходящие под условие Z, //удалим все числа Y левее X и все числа Z правее X i := 0;//обнулим счетчик while i < Length(A) do //пока счетчик не дойдет до конца массива, делай begin //пишем условия, какие числа удаляем до Х (это Y и не Z) if (i < X_index) and ((not((A > 0) and (A mod 8 = 0)) or ((A < 0)))) then //если ((i меньше индекса Х) и (НЕ (больше нуля и кратно 8) или меньше 0)) тогда //здесь мы удаляем ненужный член (сдвигаем массив на его место влево) begin for j := i to (High(A) - 1) do //от текущего значения до конца массива, делай A[j] := A[j + 1]; //текущему значению присваиваем следующее значение в массиве SetLength(A, (Length(A) - 1)); //длину массива сокращаем на одну позицию X_index := X_index- 1; //двигаем влево индекс позиции числа Х end else //пишем условие, какие число удаляем после Х (это Z) if (i > X_index) and (A > 0) and (A mod 8 = 0) then begin for j := i to High(A) - 1 do A[j] := A[j + 1]; SetLength(A, Length(A) - 1); //здесь все тоже самое, как и выше, только не нужно двигать позицию Х end else //увеличиваем счетчик на 1, чтобы переключиться на следующий член массива begin i := i + 1; end; end; writeln; // Выводим полученный массив A writeln(\'Poluchennii massiv:\'); for i := 0 to High(A) do begin write(A); if i < n - 1 then write(\', \'); end; readln(); readln(); // два вызова readln() для задержки консоли end.
.
Файлы условия, демо
Характеристики решённой задачи
Список файлов
