Помощь - Поиск - Пользователи - Календарь
Полная версия: удаление элементов
Форум «Всё о Паскале» > 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 просто так ... }

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