Лидеры рейтинга

ID: 405049

vsetin

Студент

2828


ID: 401284

Михаил Александров

Советник

906

Россия, Санкт-Петербург


ID: 226425

Konstantin Shvetski

Модератор

662

Россия, Северодвинск


ID: 259041

Алексеев Владимир Николаевич

Мастер-Эксперт

380

Россия, пос. Теплоозёрск, ЕАО


ID: 400669

epimkin

Профессионал

350


ID: 325460

CradleA

Мастер-Эксперт

297

Беларусь, Минск


ID: 137394

Megaloman

Мастер-Эксперт

260

Беларусь, Гомель


8.9.0

20.06.2021

JS: 2.9.2
CSS: 4.5.10
jQuery: 3.6.0
DataForLocalStorage: 2021-06-22 16:46:03-standard


Создание программ на языках Pascal, Delphi и Lazarus.

Администратор раздела: Зенченко Константин Николаевич (Старший модератор)

Консультация онлайн # 160028

Раздел: Pascal / Delphi / Lazarus
Автор вопроса: Popkova Yuliya Nikolaeva
Дата: 09.02.2009, 18:29 Консультация закрыта
Поступило ответов: 1

Дорогие эксперты помогите пожалуйста решить задачку:
дано натуральное число n, проверить будут ли все цифры числа различными!!

P.S. Я знаю что такая задача уже обсуждалась, но надо только через DIV и MOD в Паскале

Pleease!! а то из-за одной задачки до сессии не допускают...(( smile

Ответ # 243264 от Micren
Здравствуйте, Popkova Yuliya Nikolaeva!
Программа кроме проверки печатает встречающиеся повторно цифры:
Код
program Pascal_160028;
{ Основание системы счисления }
const
	CBase=10;
{ Диапазон цифр в числе }
type
	TDigits=0..CBase-1;
var
	t,i:TDigits;
	DigitsSet,Match:set of TDigits; { Множества присутствующих цифр
																		и повторно встретившихся }
	N:LongInt;
begin
{ Вводим число }
	Write('Enter number:');
	ReadLn(N);
{ Пока есть цифры }
	while N<>0 do begin
	{ Берем цифру }
		t:=N mod CBase;
	{ Отсекаем последнюю }
		N:=N div CBase;
	{ Если уже встречалась }
		if t in DigitsSet then Match:=Match+[t] { Добавим в повторно встретившиеся }
		else DigitsSet:=DigitsSet+[t];			{ Добавим в первый раз встретившиеся }
	end;
	{ Если нет повторно встретившихся }
	if Match=[] then WriteLn('All digits are different')
	else begin
	{ Если есть повторы печатаем их }
		Write('Not all digits are different: [');
		for i := 0 to CBase-1 do
			if i in Match then Write(i,',');
		WriteLn(#8,']');
	end;
	ReadLn;
end.

В принципе печатать совпадающие цифры не требуется. Поэтому вот программа без этого.
Код
program Pascal_160028;
{ Основание системы счисления }
const
	CBase=10;
{ Диапазон цифр в числе }
type
	TDigits=0..CBase-1;
var
	t:TDigits;
	DigitsSet:set of TDigits;
	N:LongInt;
	Different:Boolean;
begin
{ Вводим число }
	Write('Enter number:');
	ReadLn(N);
{ Пока есть цифры }
	Different:=true;
	while (N<>0) and Different do begin
	{ Берем цифру }
		t:=N mod CBase;
	{ Отсекаем последнюю }
		N:=N div CBase;
	{ Если уже встречалась }
		if t in DigitsSet then Different:=false
		else DigitsSet:=DigitsSet+[t];			{ Добавим в первый раз встретившиеся }
	end;
	{ Если нет повторно встретившихся }
	if Different then WriteLn('All digits are different')
	else Write('Not all digits are different');
	ReadLn;
end.

Выбирайте какая Вам больше нравится.

Micren

Посетитель
09.02.2009, 19:17
Мини-форум консультации # 160028

Нет сообщений в мини-форуме

Возможность оставлять сообщения в мини-форумах консультаций доступна только после входа в систему.
Воспользуйтесь кнопкой входа вверху страницы, если Вы зарегистрированы или пройдите простую процедуру регистрации на Портале.

Лучшие эксперты раздела

puporev

Профессор

Рейтинг: 132

Зенченко Константин Николаевич

Старший модератор

Рейтинг: 98

Лысков Игорь Витальевич

Мастер-Эксперт

Рейтинг: 0

Асмик Гаряка

Советник

Рейтинг: 0

Орловский Дмитрий

Мастер-Эксперт

Рейтинг: 0

lamed

Академик

Рейтинг: 0