Изменить данную программу, так, чтобы она удаляла все отрицательные элементы! Type...

0 голосов
28 просмотров

Изменить данную программу, так, чтобы она удаляла все отрицательные элементы!
Type LinMass = array [1..100] of Integer;
Var A : LinMass;
N, i, j, i1 : Integer;
begin
Write('Количество элементов массива: ');
ReadLn(N);
i1:=0;
For I := 1 To N Do
Begin
Write('Введите A[', I, '] ');
ReadLn(A[i]);
if(A[i]<0)and(i1=0)then i1:=i;<br> End;
if i1=0 then write('Отрицательных элементов нет')
else
begin
if i1=n then n:=n-1
else
begin
for i:=i1 to n-1 do
A[i]:=A[i+1];
n:=n-1;
end;
writeln('Удаление первого отрицательного элемента');
For I := 1 To N Do write(a[i]:6);
end;
end.


Информатика (93 баллов) | 28 просмотров
Дан 1 ответ
0 голосов
Правильный ответ

Var
    A: array [1..100] of Integer;
    N, i, j, k: Integer;

begin
    Write('Количество элементов массива: ');
    ReadLn(N);
    k := 0;
    
    for i := 1 To N Do
    begin
        Write('A[', I, '] = ');
        ReadLn(A[i]);
        {A[i] := Random(100) - 50;
        write(A[i], ' ');}
        if A[i] < 0 then k := i;
    end;
    writeln;
    
    {фильтр, если нет отрицательных}
    if k = 0 then begin
        write('Отрицательных элементов нет');
        halt;
    end;
    
    writeln('Удаление отрицательных элементов');
    k := 1;
    while (n > 0) and (k <= n) do <br>    begin
        if A[k] < 0 then begin
            for i := k to n - 1 do
                A[i] := A[i + 1];
            n := n - 1;
        end
        else k := k + 1;
    end;
    
    for i := 1 To N Do
        write(A[i], ' ');
end.

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

(53.1k баллов)