HOME ПРИМЕРЫ THANKS НОВИЧКАМ ДОКИ LINKS JavaScript Mail


 
В этот день много лет назад...
30 апреля. В 1812 году (205 лет назад) - Луизиана становится 18-м штатом США.
 
 

Turbo Pascal Examples.
Повторяющиеся элементы

Графика:
Построение графика функции
Прыгающий по экрану мячик.
Качание маятника.
Вложенные цветные круги.
Броуновское движение. Использование объектов.
Матрицы и массивы:
Сортировка элементов массива.
Удаление одинаковых элементов.
Простой пример на поворот матрицы.
Сортировка методом Шелла. +функции измерения временных интервалов.
Проверка выпуклости многоугольника.
Перемоножение матриц
Вычисление определителя матрицы. Рекурсия.
Нахождение обратной матрицы.
Задача об автостоянке.
Рекурсия. Подземелье сокровищ.
Численные методы:
Задачка на определение угла между стрелками часов.
Проверка на принадлежность точки многоугольнику.
Нахождение точки пересечения двух отрезков на плоскости.
Сортировка методом Шелла. +функции измерения временных интервалов.
Сортировка методом "пузырька". Пример на динамические структуры данных. Связанные списки.
Нахождение корня функции методом половинного деления.
Вычисление арккосинуса
Нахождение суммы цифр натурального числа.
Работа с фалами:
Рекурсивное сканирование директорий.
Работа со строками:
Работа со словами в предложении с разделителями.
Простейший синтаксический анализатор для распознавания и вычисления многчлена.
Синтаксический анализатор для распознавания и вычисления многчлена.
Работа со строками: смена кодировки, удаление тегов из HTML текста, обработка
Переименование файлов из кириллицы в латиницу.
Выдача контекстной подсказки.
Частотный словарь символов.
Подсчет повторяющихся символов в строке.
Ссылочные переменные:
Моделирование стека.
Пасьянс "Косынка".
Игры:
Пасьянс "Косынка".
Игра "Питон"
Игра "Анацефал". Пример использования объектов.
Игра "Минное поле"
Большие проекты:
Электронная картотека (без исходника)


 
Повторяющиеся элементы
Даны натуральные числа N, A1…, An. Удалить из последовательности A1,…, An повторяющиеся числа. Указать числа, которые имели повторения.
(В ответ на сообщение в форуме. Частично использован код оттуда.)
Некоторые пояснения.
Исходная последовательность заносится в массив А размерностью до максимального NMax, но фактически равна заданному с монитора N.
Массив b - двумерный массив, содержит исключительно повторяющиеся в массиве А элементы и их количество. b[i,1] - повторяющийся элемент, b[i,2]- количество этих элементов в А. Изначально b заполняется нулями. Ясно, что максимальная размерность массива b может достигать половины размерности исходного массива А. Поэтому она описана как 1+NMax div 2. Единица добавлена для случая, когда NMax нечетно, поскольку div возвращает лишь целые числа.
Процедура putInMatch(ind,val:integer) заносит элемент val в массив повторений b. ind - это индекс этого элемента в А (здесь не используется)
Массив unic содержит информацию об уникальности i-того элемента в массиве А. Он нужен, чтобы не искать повторения уже найденных повторов при последующих проходах. В принцие, можно было бы написать простую функцию elementInMatch, но с этим массивом нагляднее, проще и быстрее.


Uses Crt;
Const Nmax=9999;
Type Mas = Array [1..Nmax] of Integer;
     ElemUnic = array [1..NMax] of boolean;
     Matches = Array [1..1+Nmax div 2,1..2] of Integer;
Var A : Mas; b:Matches; unic : ElemUnic;
i, j, N, nm : Integer;
Flag : Boolean;
{------------------------------------------}
Procedure InputOutput; {Opisanie procedury vvoda-vyvoda dannyh}
Begin ClrScr;
Write('N = ');
ReadLn(N);
if N>Nmax then writeln('Oshibka! Vvvedeno slishkom bol~shoe kolichestvo chisel v massive! Vvedite chislo men~she',Nmax,#7);
if N=1 then writeln('v odnom chisle, kak eato ne pechal~no, ne mozhet byt~ povtorjajushchihsja chisel!',#7);

For i := 1 to N do
  unic[i]:=true;
For i := 1 to 1+Nmax div 2 do
  begin
  b[i,1]:=0;b[i,2]:=0;
  end;
{
For i := 1 to N do
begin
Write('A[' , i , '] = ') ;
ReadLn(A[i]);
end;
}

randomize;
For i := 1 to N do a[i] := random(10);

WriteLn; WriteLn('Massiv A');
For i := 1 to N do Write(A[i],',');
WriteLn; WriteLn
End;


{------------------------------------------}
Procedure putInMatch(ind,val:integer);
var inMatch:boolean;
    i:integer;
  begin
  inMatch:=false;
  i:=0;
  while ((i<nm) and (not inMatch)) do
    begin
    i:=i+1;
    if (b[i,1]=val)
      then inMatch := true;
    end;
  if (inMatch) then
    inc(b[i,2])
  else
    begin
    inc(nm);
    b[nm,1]:=val;
    b[nm,2]:=2;
    end;
  end;

Procedure Search; { Opisanie procedury }
var i:integer;

Begin { poiska reshenija }
for i:=1 to N-1 do
for j:=i+1 to N do
  if (unic[j]) then
  begin
  if (a[i]=a[j]) then
    begin
    unic[j]:=false;
    putInMatch(j,a[j]);
    end;
  end;

End;
{------------------------------------------}
BEGIN
InputOutput; { vyzov procedury vvoda-vyvoda dannyh }
nm:=0;
Search; { vyzov procedury poiska reshenija zadachi }
Flag := nm>0;
WriteLn( 'O t v e t : ');
If flag then
  begin
  WriteLn('Elementy bez povtorov:');
  for i:=1 to N do if (unic[i]) then
    write(' a[',i,']=',a[i]);
  writeln;writeln('Povtoreniya:');
  for i:=1 to nm do
    writeln(' a[]=',b[i,1],' povtorilsa ',b[i,2],' raz');
  end
else WriteLn('Net sovpadajushchih chisel.');
ReadLn
END.


 

 

 

 

 

 

 


HOME