Задача в Паскале.

Компьютеры программирование программы паскаль

Найти количество различных цифр данного натурального числа.

Где допущена ошибка? Программа работает неправильно.

Program Tzifra;
Uses crt;
Var
a,b,c,ch,s: longint;
Begin
Clrscr;
Write('Chislo='); ReadLn(ch);
S:=0;
e:=ch;
While ch>0 do
Begin
a:=ch mod 10;
ch:= ch div 10;
While e>0 do
Begin
b:=e mod 10;
e:=e div 10;
If b<>a then s:=s+1;
End;
End;
WriteLn(s,' ','tzifr');
ReadLn;
End.

Примечание:
Число вводится с клавиатуры
Ответы:
ну, как я вижу у тебя переменная "e:=ch;" не задана
Во-первых, ты не определил переменную е. Во-вторых, переменная s у тебя то большая, то маленькая. Имеет ли это значение, я, честно сказать, не помню, но стараюсь, что бы все было одинаково. Теперь по самой программе.
Как я понимаю, надо посчитать количество РАЗНЫХ цифр в числе, а иначе зачем каждую цифру сравнивать с остальными?
Попробуем задать этой программе ch = 335. Разных цифр две - 3 и 5.
Write('Chislo='); ReadLn(ch); //ch = 335
s:=0; // это счетчик
e:=ch; // e = ch = 335, ЗДЕСЬ ЭТУ СТРОКУ НАДО УБРАТЬ
While ch>0 do // цикл по цифрам ch, на 3 шаге выходим
 Begin
  a:=ch mod 10; // 1) a = 335 mod 10 = 5 ; 2) a = 33 mod 10 = 3
  ch:= ch div 10; // 1) ch = 335 div 10 = 33 ; 2) ch = 33 div 10 = 3
  e:=ch; // ЭТУ СТРОКУ НАДО ВСТАВИТЬ СЮДА
   While e>0 do // цикл по цифрам e, на 3 шаге выходим
    Begin
     b:=e mod 10; // 1.1) b = 335 mod 10 = 5 ; 1.2) b = 33 mod 10 = 3 ; 1.3) b = 3 mod 10 = 3
     e:=e div 10; // 1.1) e = 335 div 10 = 33 ; 1.2) e = 33 div 10 = 3 ; 1.3) e = 3 div 10 = 0
     // После отработки этого цикла первый раз е становится = 0 и больше не меняется, поэтому цикл отработает один раз.
     If b<>a then s:=s+1; // 1.1) b = a = 5, s = 0 ; 1.2) b = 3, a = 5, s = 1 ; 1.3) b = 3, a = 5, s = 2
    End;
   End;
WriteLn(s,' ','tzifr');


12 лет назад

RPI.su - самая большая русскоязычная база вопросов и ответов. Наш проект был реализован как продолжение популярного сервиса otvety.google.ru, который был закрыт и удален 30 апреля 2015 года. Мы решили воскресить полезный сервис Ответы Гугл, чтобы любой человек смог публично узнать ответ на свой вопрос у интернет сообщества.

Все вопросы, добавленные на сайт ответов Google, мы скопировали и сохранили здесь. Имена старых пользователей также отображены в том виде, в котором они существовали ранее. Только нужно заново пройти регистрацию, чтобы иметь возможность задавать вопросы, или отвечать другим.

Чтобы связаться с нами по любому вопросу О САЙТЕ (реклама, сотрудничество, отзыв о сервисе), пишите на почту [email protected]. Только все общие вопросы размещайте на сайте, на них ответ по почте не предоставляется.