Количество различных элементов в массиве - Free Pascal
Формулировка задачи:
Вот такой у меня получился код :
То есть сравниваем текущий элемент с последующими, при первом совпадении увеличиваем счетчик, в свою очередь счетчик различных элементов увеличивается за счет счетчика совпадений.
Но не работает. Не понимаю,почему.
Он тоже работает,но я не понимаю,почему. Изначально флажок опущен. Нашли совпадение, флажок поднялся. Так почему в условии цикла , как и в условии увеличения счетчика различных цифр стоит "not b ", ведь not b = true,а true у нас появляется,если мы НАШЛИ совпадение.
Или же я не понимаю,как работает в данном случае ""not"?
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.
Решение задачи: «Количество различных элементов в массиве»
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;
Объяснение кода листинга программы
- Объявляется булевая переменная b, по умолчанию равная true.
- Задаётся условие для цикла while: j <= m и not b.
- В цикле while выполняется следующая логика:
- Если A[i] равно A[j], то b устанавливается в true.
- j увеличивается на 1.
- После цикла while проверяется значение b.
- Если b не изменилось (осталось равным false), то счётчик s увеличивается на 1.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д