Удалить первый отрицательный элемент массива

Удалить первый отрицательный элемент массива

Заполнить массив случайными положительными и отрицательными целыми числами. Вывести его на экран. Удалить из массива все отрицательные элементы и снова вывести.

Если очередной элемент массива отрицателен, то все элементы следующие за ним надо передвинуть на одну ячейку вперед. В результате отрицательный элемент как бы затрется, а учитываемую длину массива надо уменьшить на единицу.

Поскольку непредсказуемо могут меняться как длина массива, так и счетчик-индекс элементов, то цикл for не подходит. Когда встречается отрицательный элемент, то индекс не увеличивается, т.к. на это место записывается новый элемент, который будет проверяться в следующей итерации цикла. При этом надо уменьшить значение длины массива.
Если же элемент не отрицательный, то надо перейти к следующему элементу, т.е. увеличить индекс и при этом не уменьшать длину массива.

const N = 10 ;
var
a : array [ 1 .. N ] of integer ;
i , k , m : byte ;
begin
randomize ;
for i : = 1 to N do begin
a [ i ] : = random ( 10 ) — 5 ;
write ( a [ i ] : 4 )
end ;
writeln ;

i : = 1 ;
m : = N ;
while i = m do
if a [ i ] 0 then begin
m : = m — 1 ;
for k : = i to m do
a [ k ] : = a [ k + 1 ] ;
end
else
i : = i + 1 ;

for i : = 1 to m do
write ( a [ i ] : 4 ) ;
writeln ;
end .

#include
#define N 10
main ( ) <
int a [ N ] , i , j , m ;
srand ( time ( NULL ) ) ;
for ( i = 0 ; i N ; i ++ ) <
a [ i ] = rand ( ) % 10 — 5 ;
printf ( "%d " , a [ i ] ) ;
>
printf ( "
" ) ;
i = 0 ;
m = N ;
while ( i m )
if ( a [ i ] 0 ) <
m -= 1 ;
for ( j = i ; j m ; j ++ )
a [ j ] = a [ j + 1 ] ;
> else
i += 1 ;

for ( i = 0 ; i m ; i ++ ) <
printf ( "%d " , a [ i ] ) ;
>
printf ( "
" ) ;
>

program enot;
VAR a: array [1..5] of integer;
i,b: integer;
begin
for i:= 1 to 5 do
a[i]:= random(51)-25;
for i:= 1 to 5 do
write(a[i],’ ‘);
writeln();
for i:= 1 to 5 do
if a[i] b
then
write(‘ ‘, a[i]);
end.

Другие вопросы из категории

Растровый графический файл содержит черно-белое изображение ( без градации серого ) размером 400 на 250 точек . Каков информационный объем этого файла ? ( в Кб)

Читайте также:  Почему айфон не может найти сеть

положительного целого числа к ( например, если к= 28796, то н= 7).
p.s язык Паскаль:)

Читайте также

и В(3*3). Вывести на экран тот из них, у которого меньше сумма элементов главной диагонали.

17.Дан массив А(3*4). Заменить все отрицательные элементы на противоположные.

отрицательных элементов окажется больше, чем во втором, и значение FALSE в противном случае. Использовать такую процедуру для массивов: R = (0; 0.005; -0.02; -87.5; 50) W = (45; 721.5; 8.63; -76.97; 3)

каждый его элемент был равен утроенному значению его порядкового номера (индекса). 3. Ввести массив с клавиатуры, найти и вывести сумму элементов массива. 4. Ввести массив с клавиатуры, подсчитать, сколько в нем положительных элементов, а сколько отрицательных. 5. В одномерном массиве подсчитать, сколько отрицательных элементов находится на четных местах и сколько положительных на нечетных. 6. Элементы массива вводятся с клавиатуры, заменить в нем все отрицательные элементы их квадратами, а положительные кубами. Вывести на экран исходный и новый массив. 7. Ввести массив с клавиатуры, найти и вывести на экран максимальный и минимальный элементы. 8. Написать программу, которая определяет есть ли в массиве элемент введенный пользователем, подсчитывает их количество и выводит номер первого найденного элемента.

1) Из элементов данного массива W[1..20] создать 2 новых массива, первый из которых содержит только положительные элементы, а второй только отрицательные.

2) Заполнить СЛУЧАЙНЫМИ числами в диапазоне от 1 до 10 два массива A[20] и B[20]. Найти и вывести на экран только те элементы этих массивов и их номера, значения которых попарно совпадают.
Например, если A[2]=B[2]=4, то на экран надо вывести: Номер-2, значение-4.
3) Заменить найденный минимальный элемент числом 100 и показать на экране массив с этой заменой.

Читайте также:  Диск не распределен как исправить windows 10

Задача

В одномерном массиве удалить все четные элементы и оставить только нечетные.

Похожие задачи

Решение

Данную задачу можно решить несколькими способами.

Способ 1. Скопировать в другой массив только нечетные элементы.

Это самый простой способ удаления элементов массива (в данном случае четных чисел), так как не требуется сжимать исходный массив. В представленном выше решении задачи переменная m хранит количество найденных нечетных элементов и в то же время, при заполнении второго массива является меняющимся индексом элементов.

Способ 2. Удалять четные элементы в текущем массиве, перезаписывая их расположенными правее нечетными.

Этот способ решения задачи сложнее. Здесь если встречается четный элемент, то весь остаток массива сдвигается на одну ячейку вперед. При этом найденный четный элемент затирается. Переменная m уменьшается, т. к. количество элементов массива становится меньше.

Способ 3. Использовать открытый массив.

Этот способ следует считать наиболее рациональным (однако в школьном курсе открытые массивы могут не изучаться). В предыдущих вариантах по-сути массивы не уменьшались, на экран выводилась лишь часть массива. Можно было бы вообще просто перебрать исходный массив, ничего с ним не делать и вывести на экран только нечетные элементы.

Открытый массив позволяет изменять свою длину. В решении задачи ниже после того как нечетные элементы сдвинуты и "затерли" нечетные, изменяется длина массива (процедурой setlength). Она устанавливает новую длину массива. Особенностью открытых массивов в Pascal является то, что их индексация начинается с нуля.

Ссылка на основную публикацию
Adblock detector