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

Помогите пожалуйста с программированием в паскаль

Ввести целое число и определить, верно ли, что в его записи есть две одинаковые цифры.
пример:
1234 1224
нет. да.

Вот мое решение.

var a,b,c: integer;
begin
writeln('Введите целое число');
read(a);
while a<>0 do begin
b:=a mod 10;
a:=a div 10;
if c=b then begin
writeln('Да');
end
else
c:=b;
end;
writeln('Нет');
end.

При вводе 1234 выводит "нет" а при вводе 1224 вывыдит "да" "нет"
SK
Sergey Krikunov
462
После
writeln('Да');
поставь
Exit;

PS: но решение всё-равно неправильное.

Один из правильных вариантов:
program q195935038;

function Duplicate(n, x: Integer): Boolean;
var
 k: Integer;
begin
 k := 0;
 repeat
  Inc(k, Integer(n mod 10 = x));
  n := n div 10;
 until n = 0;
 Result := (k = 2); //Result := (k >= 2);
end;

var
 a, i: Integer;
 f: Boolean;
begin
 ReadLn(a);
 f := False;
 for i := 0 to 9 do
  if Duplicate(a, i) then
  begin
   f := True;
   Break;
  end;
 WriteLn(f);
 ReadLn;
end.
НН
Неизвестно Неизвестно
70 324
Лучший ответ
Sergey Krikunov спасибо друг, помог
Для подобных задач в Pascal существует тип "множество".

var digits: set of 0..9;
a: integer;
flg: boolean;
begin
digits := [];
readln(a);
repeat
flg := a mod 10 in digits;
digits := digits + [a mod 10];
a := a div 10
until flg or (a = 0);
if flg then wtiteln('Да') else wtiteln('Нет')
end.

Без дополнительного флага, но говнокодистее:

var digits: set of 0..9;
a: integer;
begin
digits := [];
readln(a);
repeat
if a mod 10 in digits then begin
writeln('Да');
exit
end;
digits := digits + [a mod 10];
a := a div 10
until a = 0;
wtiteln('Нет')
end.
Получится короче, если преобразовать число в текст
var a,x,i,j:integer;
y:string;
begin
a:=0;
readln(x);
str(x,y);
for i:=1 to length(y)-1 do
for j:=i+1 to length(y) do
if y[i]=y[j] then a:=1;
if a=1 then writeln('Da') else writeln('Net')
end.
Nurlan [....id176237331....]
Nurlan [....id176237331....]
83 844
У вас вывд "Нет" стоит после цикла вообще без всякого условия.
Для 1231 у вас не выведется "Да", потому что вы сравнивете только подряд идущие цифры.
Чему равно c при начале работы программы?

Заведите массив digits : array [0..9] of integer;
Считайте в него встречаемость цифр.
Вывод обоих ответов (Да/Нет) поставьте после цикла, где вы обрабатываете число.
Какое-то кривое решение
Замути лучше массив от 0 до 9 ноликами
Когда раскладываешь число если элемент с индексом цифры нолик то ставишь единичку
Если уже единичка то Z:=1
После цикла если z нолик то нет если единица то да