Количество различных элементов в массиве - Free Pascal

Узнай цену своей работы

Формулировка задачи:

Вот такой у меня получился код :
Program CalculateTheQuantityOfDifferentNumbers;
const N=10;
type 
         array1 = array [1..N] of integer;
var arrray : array1;
iCountDifferentNumbers, iCounter,NewCount,iNextElement: Integer;
Procedure FillOut;
var iCounter : integer;
   Begin
    Randomize;
       for iCounter:=1 to N do
          Begin
             arrray[iCounter]:=Random(550);
              Write(arrray[iCounter], '       ');
          end;
   end;
Begin
   FillOut;
   iCountDifferentNumbers:=0;
   for iCounter:=1 to N do
      Begin
      newCount:=0;
      iNextElement:=iCounter+1;
      while (iNextElement<=N) and ( newCount=0) do
         Begin
                      if arrray[iCounter]=arrray[iNextElement] then
                            Begin 
                               newCount:=newCount+1;
                               break;
                            end;
                      inc(iNextElement);
         end;
      if ( newCount=0) then 
         inc(iCountDifferentNumbers);
      end;
   Writeln;
   Writeln('The quantity of different elements  : ', iCountDifferentNumbers);
end.
То есть сравниваем текущий элемент с последующими, при первом совпадении увеличиваем счетчик, в свою очередь счетчик различных элементов увеличивается за счет счетчика совпадений. Но не работает. Не понимаю,почему.
Нет,он всё-таки работает. По крайне мере,похоже на то. Но вопрос в другом. Вот такой код я нашел :
Begin
    b:=False; {Считаем, что это число единственное}
    j:=i+1; {Проверку начинаем со следующего элемента}
    {Пока не просмотрены все элементы и не найден совпадающий}
    While (j<=m) And Not b Do
     Begin
        If A[i]=A[j] Then b:=True; {Есть совпадение!}
        j:=j+1;
     End;
    If Not b Then s:=s+1; {Если не было совпадения, то увеличиваем s}
   End;
  WriteLn('Количество различных элементов = ',s);
End.
Он тоже работает,но я не понимаю,почему. Изначально флажок опущен. Нашли совпадение, флажок поднялся. Так почему в условии цикла , как и в условии увеличения счетчика различных цифр стоит "not b ", ведь not b = true,а true у нас появляется,если мы НАШЛИ совпадение. Или же я не понимаю,как работает в данном случае ""not"?

Решение задачи: «Количество различных элементов в массиве»

textual
Листинг программы
var b:boolean;//по умолчанию=true
.............
b:=false;//или b:=not b;
 While (j<=m) And Not b Do//пока not b или b=false
     Begin
        If A[i]=A[j] Then b:=True; {Есть совпадение!}//сменили флаг b=true или просто b
        j:=j+1;
     End;
    If Not b Then s:=s+1; {Если не было совпадения, то увеличиваем s}//если же флаг не изменился, b=false или not b
   End;

Объяснение кода листинга программы

  1. Объявляется булевая переменная b, по умолчанию равная true.
  2. Задаётся условие для цикла while: j <= m и not b.
  3. В цикле while выполняется следующая логика:
    • Если A[i] равно A[j], то b устанавливается в true.
    • j увеличивается на 1.
  4. После цикла while проверяется значение b.
    • Если b не изменилось (осталось равным false), то счётчик s увеличивается на 1.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

9   голосов , оценка 3.333 из 5
Похожие ответы