Количество различных элементов в массиве - 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.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д