Заполнить массив случайными положительными и отрицательными целыми числами. Вывести его на экран. Удалить из массива все отрицательные элементы и снова вывести.
Если очередной элемент массива отрицателен, то все элементы следующие за ним надо передвинуть на одну ячейку вперед. В результате отрицательный элемент как бы затрется, а учитываемую длину массива надо уменьшить на единицу.
Поскольку непредсказуемо могут меняться как длина массива, так и счетчик-индекс элементов, то цикл for не подходит. Когда встречается отрицательный элемент, то индекс не увеличивается, т.к. на это место записывается новый элемент, который будет проверяться в следующей итерации цикла. При этом надо уменьшить значение длины массива. Если же элемент не отрицательный, то надо перейти к следующему элементу, т.е. увеличить индекс и при этом не уменьшать длину массива.
Pascal
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.
-1 -3 2 -4 -5 3 -3 2 -5 4
2 3 2 4
Язык Си
#include < stdio.h>
#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("\n");
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("\n");
}
3 4 4 -1 4 -1 1 4 3 2
3 4 4 4 1 4 3 2
Python
from random import random
a = []
for i in range(10):
n = int(random()*10) - 5
a.append(n)
print(a)
i = 0
m = 10
while i < m:
if a[i] < 0:
del a[i]
m -= 1
else:
i += 1
print(a)
В Питоне задача решается проще, т.к. нет надобности сдвигать элементы. Можно просто удалить тот или иной элемент из списка с помощью функции del.
КуМир
алг удаление элементов
нач
цел N = 10
цел таб a[1:N]
цел i,k,m
нц для i от 1 до N
a[i] := int(rand(0,10)) - 5
вывод a[i], " "
кц
вывод нс
i := 1
m := N
нц пока i <= m
если a[i] < 0 то
m := m-1
нц для k от i до m
a[k] := a[k+1]
кц
иначе
i := i + 1
все
кц
нц для i от 1 до m
вывод a[i], " "
кц
кон
1 2 -4 0 -2 -1 -5 3 0 -1
1 2 0 3 0
Basic-256
N = 10
dim a(N)
for i=0 to N-1
a[i] = int(rand*10) - 5
print a[i] + " ";
next i
print
i = 0
m = N-1
while i <= m
if a[i] < 0 then
m = m-1
for j=i to m
a[j] = a[j+1]
next j
else
print a[i] + " ";
i = i + 1
endif
endwhile
-1 2 2 -5 0 1 -1 -1 0 4
2 2 0 1 0 4
Подписаться
1 Комментарий
Новые
СтарыеПопулярные
Межтекстовые Отзывы
Посмотреть все комментарии
роман
11 месяцев назад
В одномерном списке A=(a1, а2, …, аn) удалить все отрицательные элементы, расположенные между положительными. с++
Pascal
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
Язык Си
#include < stdio.h> #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("\n"); 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("\n"); }
3 4 4 -1 4 -1 1 4 3 2 3 4 4 4 1 4 3 2
Python
from random import random a = [] for i in range(10): n = int(random()*10) - 5 a.append(n) print(a) i = 0 m = 10 while i < m: if a[i] < 0: del a[i] m -= 1 else: i += 1 print(a)
В Питоне задача решается проще, т.к. нет надобности сдвигать элементы. Можно просто удалить тот или иной элемент из списка с помощью функции del.
КуМир
алг удаление элементов нач цел N = 10 цел таб a[1:N] цел i,k,m нц для i от 1 до N a[i] := int(rand(0,10)) - 5 вывод a[i], " " кц вывод нс i := 1 m := N нц пока i
Basic-256
N = 10 dim a(N) for i=0 to N-1 a[i] = int(rand*10) - 5 print a[i] + " "; next i print i = 0 m = N-1 while i
В одномерном списке A=(a1, а2, …, аn) удалить все отрицательные элементы, расположенные между положительными. с++