Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 25.04.2018, 20:32   #1
Firstaid
Пользователь
 
Регистрация: 05.04.2018
Сообщений: 27
Восклицание [Visual Basic 6.0] Проверить, все ли цифры данного натурального числа N различны

Проверить, все ли цифры данного натурального числа N различны

Каким образом это реализовать? Что нужно делать с числом, чтобы выяснить это. На мысль приходит делить число на 10, даже код нашел на паскале, теперь пытаюсь реализовать это в бейсике:

uses crt;
var n:longint;
k,p,t:byte;
m:set of byte;
begin
clrscr;
write('n=');
readln(n);
m:=[];p:=0;t:=0;
while n>0 do
begin
k:=n mod 10;
t:=t+1;
if not (k in m)then
begin
include(m,k);
p:=p+1;
end;
n:=n div 10;
end;
if p=t then write('В числе все цифры разные')
else write('В числе не все цифры разные');
readln
end.

Должно получиться так:

Private Sub Command1_Click

n = Val(Text1)

Do While n > 0

k = n Mod 10
t = t + 1(не пойму для чего здесь t, подскажите)

Вот эту строчку не пойму: if not (k in m)then (что значит k in m в паскале и как это на бейсике реализовать)

И вот этот вот блок тоже не пойму, к чему он и что означает и как его записать:

include(m,k);
p:=p+1;
end;
n:=n div 10;
end;

Давайте вместе подумаем, как это все упорядочить. Есть у кого какие мысли?
Firstaid вне форума Ответить с цитированием
Старый 25.04.2018, 21:53   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

я не знаю синтаксис VB,
но я бы написал что-то вроде
Код:
Private Sub Command1_Click

 Dim n As Long, i As Integer, one As Integer
 Dim isAllDifferent As Boolean
 Dim digits(10) As Integer

 For i = 0 To 9 Step 1
   digits(i) = 0
 Next i
 
 isAllDifferent = True
 
 n = Abs(Val(Text1))
 
 Do While n > 0
   one = n Mod 10
   digits(one) = digits(one) + 1
   If digits(one) > 1 Then
     isAllDifferent = False
   End If
   n = n \ 10
 Loop
 
 If isAllDifferent Then
    Print "Все цифры разные"
 Else
    Print "Есть повторяющиеся цифры"
 End If
 
End
Serge_Bliznykov вне форума Ответить с цитированием
Старый 25.04.2018, 22:03   #3
Aleksandr H.
2 the Nation Glory
Старожил
 
Аватар для Aleksandr H.
 
Регистрация: 27.05.2014
Сообщений: 3,289
По умолчанию

Цитата:
Сообщение от Firstaid Посмотреть сообщение
Давайте вместе подумаем, как это все упорядочить.
Начни со шрифта.
Код:
if not (k in m)then
- если k не принадлежит множеству m тогда...

Цитата:
Сообщение от Firstaid Посмотреть сообщение
Есть у кого какие мысли?
множества на VB замени Dictionary и там храни значения последнего разряда и сравнивай каждый новый разряд со словарем.

Serge_Bliznykov на несколько тактов можно ускорить если после определения isAllDifferent = False выйти Exit Do
Кто умер, но не забыт, тот бессмертен.
Лао-Цзы.

Последний раз редактировалось Aleksandr H.; 25.04.2018 в 22:06.
Aleksandr H. вне форума Ответить с цитированием
Старый 26.04.2018, 11:16   #4
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Сообщение от Aleksandr H. Посмотреть сообщение
на несколько тактов можно ускорить если после определения isAllDifferent = False выйти Exit Do
да, спасибо, я знаю.
просто не стал усложнять. боюсь, что для новичка и так слишком сложно
Serge_Bliznykov вне форума Ответить с цитированием
Старый 27.04.2018, 15:08   #5
Firstaid
Пользователь
 
Регистрация: 05.04.2018
Сообщений: 27
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
я не знаю синтаксис VB,
но я бы написал что-то вроде
Код:
Private Sub Command1_Click

 Dim n As Long, i As Integer, one As Integer
 Dim isAllDifferent As Boolean
 Dim digits(10) As Integer

 For i = 0 To 9 Step 1
   digits(i) = 0
 Next i
 
 isAllDifferent = True
 
 n = Abs(Val(Text1))
 
 Do While n > 0
   one = n Mod 10
   digits(one) = digits(one) + 1
   If digits(one) > 1 Then
     isAllDifferent = False
   End If
   n = n \ 10
 Loop
 
 If isAllDifferent Then
    Print "Все цифры разные"
 Else
    Print "Есть повторяющиеся цифры"
 End If
 
End
Спс, выручил
Firstaid вне форума Ответить с цитированием
Старый 27.04.2018, 16:40   #6
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

не за что, пожалуйста!
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Дано натуральное число n (n < 9999). Выяснить, различны ли все четыре цифры этого числа fanatloko Паскаль, Turbo Pascal, PascalABC.NET 5 23.06.2013 21:01
Программа ,позволяющая проверить,все ли цифры натурального числа M различны. Swetic Помощь студентам 1 24.05.2013 13:08
с++ Выяснить, образуют ли цифры данного натурального числа N воз- растающую последовательность. Anya She Помощь студентам 5 10.12.2012 14:51
напечатать в возрастающем порядке все цифры, не входящие в запись данного натурального числа Aimet Паскаль, Turbo Pascal, PascalABC.NET 1 18.06.2011 19:57
напечатать в убывающем порядке все цифры, не входящие в запись данного натурального числа Aimet Паскаль, Turbo Pascal, PascalABC.NET 0 16.06.2011 21:18