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

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

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

Вот такой у меня получился код :
Листинг программы
  1. Program CalculateTheQuantityOfDifferentNumbers;
  2. const N=10;
  3. type
  4. array1 = array [1..N] of integer;
  5. var arrray : array1;
  6. iCountDifferentNumbers, iCounter,NewCount,iNextElement: Integer;
  7. Procedure FillOut;
  8. var iCounter : integer;
  9. Begin
  10. Randomize;
  11. for iCounter:=1 to N do
  12. Begin
  13. arrray[iCounter]:=Random(550);
  14. Write(arrray[iCounter], ' ');
  15. end;
  16. end;
  17. Begin
  18. FillOut;
  19. iCountDifferentNumbers:=0;
  20. for iCounter:=1 to N do
  21. Begin
  22. newCount:=0;
  23. iNextElement:=iCounter+1;
  24. while (iNextElement<=N) and ( newCount=0) do
  25. Begin
  26. if arrray[iCounter]=arrray[iNextElement] then
  27. Begin
  28. newCount:=newCount+1;
  29. break;
  30. end;
  31. inc(iNextElement);
  32. end;
  33. if ( newCount=0) then
  34. inc(iCountDifferentNumbers);
  35. end;
  36. Writeln;
  37. Writeln('The quantity of different elements : ', iCountDifferentNumbers);
  38. end.
То есть сравниваем текущий элемент с последующими, при первом совпадении увеличиваем счетчик, в свою очередь счетчик различных элементов увеличивается за счет счетчика совпадений. Но не работает. Не понимаю,почему.
Нет,он всё-таки работает. По крайне мере,похоже на то. Но вопрос в другом. Вот такой код я нашел :
Листинг программы
  1. Begin
  2. b:=False; {Считаем, что это число единственное}
  3. j:=i+1; {Проверку начинаем со следующего элемента}
  4. {Пока не просмотрены все элементы и не найден совпадающий}
  5. While (j<=m) And Not b Do
  6. Begin
  7. If A[i]=A[j] Then b:=True; {Есть совпадение!}
  8. j:=j+1;
  9. End;
  10. If Not b Then s:=s+1; {Если не было совпадения, то увеличиваем s}
  11. End;
  12. WriteLn('Количество различных элементов = ',s);
  13. End.
Он тоже работает,но я не понимаю,почему. Изначально флажок опущен. Нашли совпадение, флажок поднялся. Так почему в условии цикла , как и в условии увеличения счетчика различных цифр стоит "not b ", ведь not b = true,а true у нас появляется,если мы НАШЛИ совпадение. Или же я не понимаю,как работает в данном случае ""not"?

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

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

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы