Другие языки программирования и технологии

Как можно записать это условие на Паскале???

Дан одномерный массив.Нужно найти количество элементов повторяющихся более одного раза . Вот что я сделала, я упорядочила массив по убыванию, теперь я думала, что мне нужно сравнить 2 соседних элемента, если они равны, то вот повторяются, можно включать счетчик, но не тут-то было. Учительница говорит, что нужно сравнивать 1 со 2, 3с 4, 5с 6 и я не знаю как написать такое условие. Пожалуйста, помогите....
var a:array [ 1..100 ] of integer;//razmer sam zadavay
n,i,tmp,j,k,sum:integer;
begin
readln(n);//predel
randomize;//mogno i ruchkami vvesti
for i:=1 to n do
a [ i ] :=random(20);//po viboru
for i:=1 to n do
write(a [ i ] ,' ');
for i:=n-1 downto 1 do
for j:=1 to i do
if a [ j ] >a [ j + 1 ] then begin
tmp:= a [ j ] ;
a [ j ] := a [ j + 1 ] ;
a [ j + 1 ] := tmp;
end;
writeln;
for i:=1 to n do
write(a [ i ] ,' ');
for i:=1 to n-1 do
if a [ i ] =a [ i + 1 ] then
begin
inc(k);
while a [ i ] =a [ i + 1 ] do
inc(i)
end;
writeln;
writeln(k);

end.
Денис Тяпкин
Денис Тяпкин
603
Лучший ответ
идущие подряд повторяющиеся элементы
Const
nmax=100;
Var
k,i,n,j:Integer;
a:Array[1..nmax] Of Integer;
Begin
Readln(n);
For i:=1 to n do
Readln(a[ i ]);
k:=1;
a[n+1]:=maxint;
For i:=1 To n Do
If a[ i ] = a[ i+1 ]
Then k:=k+1
Else
if k>1
Then
Begin
writeln(a[ i ],'повторяется ',k,' раза');
k:=1
End;
Readln
End.
Олег Пленне
Олег Пленне
63 514
Полностью согласен с первым ответом

Лан, допустим массив [5,6,1,0,6,4,9,5,3,5]
Упорядоченный: [9,6,6,5,5,5,4,3,1,0]
Сравниваем (твой вариант) : 9 != 6, 6 == 6, первый элемент найден
Сравниваем (вариант училки) : 9 != 6, 6 != 5, дальше можно не продолжать
Вывод 1: алгоритм (её) не подходит к способу, в котором массив упорядочивается, а упорядочивать лучше в любом случае. Сравнивать каждый элемент с каждым слишком долго
Вывод 2: училка лол)
*D
*** Dias ***
37 544
плохая идея. нерациональная. сложный цикл для сортировки плюс еще один для поиска повторов.
училку вы не поняли. думаю что она предложила следующее:
сравнивать 1 со вторым и последующими до поиска повторений. потом 2 с 3 и последующими до поиска повторений. и т. д.
странно тебе учительница сказала.. . а если, допустим, не 1 со 2ым равны, а 2ой с 3им? Она не права.
А у тебя хорошая идея. Получается, ты сравниваешь поочередно 1 и 2, затем 2 и 3, затем 3 и 4 и т. д. Удачи!
Я только что пытался написать тебе эту программу, но у меня ничего не получилось, т. к. голова от Pascal'я уже "кипит", т. к. я примерно 8 часов пытался написать себе программу для курсовой работы. Однако, там полюбому должно быть два цикла for для сравнения элементов, и ещё второй массив, в который ты будешь заносить количество повторений. Т. е. у тебя должно получиться примерно следующее (учти, это необходимо доработать, т. к. он считает не правильно) :
....
kol:=0;
for i:=1 to n do begin
for k:=1 to n do
if i<>k then
if w=w[k] then begin
kol:=kol+1;
end;
end;
....

В это программе, как видно, переменная kol считает количество повторяющихся чисел. Условный оператор, который сравнивает i и k нужен для того, чтобы ПК не считал элемент соседним самому себе. В самом начале этого промежутка программы переменной kol присваивается значение ноль, для чтобы если вдруг в память ПК осталось значение с предыдущего выполнения программы, чтобы к этому значению программа не стала прибавлять новое количество повторений чисел - <О как я "завернул">
P.S.Извиняюсь, если не помог, а запутал, но надеюсь на благотворность моих действий