Показать сообщение отдельно
  #2  
Старый 22.12.2012, 07:34
Аватар для orion_asm
orion_asm orion_asm вне форума
Прохожий
 
Регистрация: 23.06.2012
Адрес: Украина, Днепропетровск
Сообщения: 19
Версия Delphi: XE3
Репутация: 10
По умолчанию

Такого рода задачи решаются просто добавлением еще одного массива. Общий алгоритм такой - в цикле крутим исходный массив. Совпадают элементы ? - если да, считаем количество совпадений. Если нет - увеличиваем счетчик для другого массива и по этому счетчику копируем не совпадающий элемент. Вот пример. Немного подлатал вашу программу - ввел проверку ввода значения размера массива. Комментарии чтобы не возникало лишних вопросов.
Код:
program Project2;
 {$APPTYPE CONSOLE}
 uses
 SysUtils;
 var
 n, i, j, k : integer;
 a,b : array[0..10] of integer;
 begin
  j := 0; // счетчик повторений
  k := 0; // счетчик массива b
  Randomize;
  write('Enter n = ');
  readln(n);
  // Проверка условия введенного n
  // n больше 10 или меньше 1?
  if ((n < 1) or (n > 10)) then
  begin
    // да, предупреждаем, выходим
    writeln('Error, array range must be > 0 and <= 10');
    writeln('Press any key...');
    readln;
    Exit;
  end;
 writeln('ishodnui massiv:');
 for i := 0 to n do
  begin
   a[i] := random(10);
   write(a[i], ' ');
  end;
 writeln;
 // Проверка совпадений
 for i := 0 to n do
  begin
    {
      Текущий элемент массива равен
      следующему?
    }
    if (a[i] = a[i + 1]) then
    begin
      // считаем количество совпадений
      k := k + 1;
      // начинаем цикл заново
      continue;
     end
     // нет совпадений?
    else
      // копируем a[i] в b[j]
      b[j] := a[i];
      // увеличиваем итератор
      j := j + 1;
  end;
  // Результат:
  writeln('Result:');
  {
    выводим массив от 0
    до введенного n минус
    количество совпадений
  }
  for i := 0 to n-k do
  write(b[i],' ');
  writeln;
  write('Press any key...');
  readln;
end.
Ответить с цитированием