Помощь - Поиск - Пользователи - Календарь
Полная версия: удаление элементов
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
лоен
почему вот этот кусочек не работает
const Nmax=10000;
var n,i,s,b,j: integer;
a:array [1..Nmax] of integer;
begin
Writeln('Vvedite dliny posledovatelnosti(n<=10000)');
Readln(n);
Writeln('Vvedite posledovatelnost');
For i:=1 to n Do Begin
s:=0;
Readln(A[i]);
While a[i]>=1 Do Begin
b:=a[i] mod 10;
S:=s+b;
a[i]:=a[i] div 10;
end;
If s mod 8=0 then
for j:= i to n-1 do a[j]:=a[j+1];
end;
For i:=1 to n Do Write(A[i],' ');
Readln;
end.


Добавлено через 1 мин.
нужно удалить числа сумма цифр которых делится на 8
volvo
Ну, мало ли что "нужно". Ты приведи, что ты ВВЕЛ в качестве данных, а там посмотрим...
лоен
5
5 71 69 13 26
результат 0 0 0 0 0
volvo
Тебе надо сначала ввести все элементы, а потом уж удалять, причем не делить само число на 10 (иначе у тебя будут все нули, в чем ты уже убедился), а использовать дополнительную переменную:

const Nmax=10000;
var
n, i, s, b, j: integer;
a: array[1 .. Nmax] of integer;

begin
Writeln('Vvedite dliny posledovatelnosti(n<=10000)');
Readln(n);
Writeln('Vvedite posledovatelnost');
for i := 1 to n do Readln(A[i]);

i := 1;
while i <= n do begin { <--- Это - чтобы можно было изменять размер "на лету" }
s := 0;
b := A[i]; { <--- Вспомогательная переменная }
while b > 0 do begin
S := s + (b mod 10);
b := b div 10;
end;

if (s mod 8) = 0 then begin
n := n - 1; { <--- Уменьшаем "размер" массива }
for j := i to n do a[j]:=a[j+1];
end;
inc(i);
end;

for i :=1 to n Do Write(A[i],' ');
Readln;
end.
лоен
оо, все ясно, спасибо ^_^
Client
if (s mod 8) = 0 then begin
n := n - 1; { <--- Уменьшаем "размер" массива }
for j := i to n do a[j]:=a[j+1];
dec(i)//без него "пропадает" следующий элемент
end;
inc(i);
end;
volvo
Лучше так:
    if (s mod 8) = 0 then begin
n := n - 1;
for j := i to n do a[j]:=a[j+1];
end
else inc(i); { <-- Чтобы не изменять значение i просто так ... }

Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.