Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Задачи _ удаление элементов

Автор: лоен 20.01.2008 0:57

почему вот этот кусочек не работает

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 20.01.2008 1:02

Ну, мало ли что "нужно". Ты приведи, что ты ВВЕЛ в качестве данных, а там посмотрим...

Автор: лоен 20.01.2008 1:05

5
5 71 69 13 26
результат 0 0 0 0 0

Автор: volvo 20.01.2008 1:11

Тебе надо сначала ввести все элементы, а потом уж удалять, причем не делить само число на 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.

Автор: лоен 20.01.2008 1:16

оо, все ясно, спасибо ^_^

Автор: Client 20.01.2008 1:47

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 20.01.2008 2:16

Лучше так:

    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 просто так ... }