Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 6 043

/ вопрос закрыт /

Доброго времени суток, уважаемые эксперты!
Пожалуйста напишите на Delphi,

Даны два натуральных числа m и n(m< 9999, n < 9999). Проверить,
есть ли в записи числа n цифры, совпадающие с цифрами
в записи числа m.

Приложение:
  1.  
  2.  
  3.  


Ишбулатов Артур Гильманович Вопрос закрыт (ответы не принимаются, мини-форум закрыт)

Вопрос задал: Ишбулатов Артур Гильманович (статус: Посетитель)
Вопрос отправлен: 3 апреля 2012, 20:30
Состояние вопроса: закрыт, ответов: 2.

Ответ #1. Отвечает эксперт: min@y™

Ну, наверное, как-то вот так:

function GetInfo(const m, n: Word): Byte;
var
  X, Y: Word;
begin
  Result:= 0;
  Y:= m;
 
  while Y <> 0 do
    begin
      X:= n;
 
      while X <> 0 do
        begin
          if m mod 10 = X mod 10
            then Inc(Result);
 
          X:= X div 10;
        end;
 
      Y:= Y div 10;
    end;
end;

Хотя, нет, не так. Например, при m = 0 и n = 1000 функция выдаст неверный результат. Альтернативный вариант:

function GetInfo(const m, n: Word): Byte;
var
  X, Y: string;
  i, j: Integer;
begin
  Result:= 0;
  Y:= IntToStr(m);
  X:= IntToStr(n);
 
  for i:= 1 to Length(X) do
    for j:= 1 to Length(Y) do
      if X[i] = Y[j]
        then Inc(Result);
end;

Ответ отправил: min@y™ (статус: Доктор наук)
Время отправки: 4 апреля 2012, 09:48
Оценка за ответ: 5

Комментарий к оценке: Что-то ошибку выдает, помогите пожалуйста, вы ж эксперты

Ответ #2. Отвечает эксперт: DNK

Здравствуйте, Ишбулатов Артур Гильманович!

function IsContFigures(m, n: word): Boolean;
 
type
  TByteSet = set of Byte;
 
  // построение множества цифр, входящих в число
  function CreateFiguresSet(arg: Word): TByteSet;
  begin
    Result := [];
    repeat
      Include(Result, arg mod 10);
      arg := arg div 10;
    until arg = 0;
  end;
 
begin
  Result := CreateFiguresSet(m) * CreateFiguresSet(n) <> [];
  // перемножаем множества и смотрим, чтобы было не пустое
end;

Ответ отправил: DNK (статус: Студент)
Время отправки: 4 апреля 2012, 11:38


Мини-форум вопроса

Всего сообщений: 17; последнее сообщение — 4 апреля 2012, 18:31; участников в обсуждении: 3.
Мережников Андрей

Мережников Андрей (статус: Абитуриент), 3 апреля 2012, 21:08 [#1]:

Проблема в чем? Лень разобраться?
Ишбулатов Артур Гильманович

Ишбулатов Артур Гильманович (статус: Посетитель), 4 апреля 2012, 10:10 [#2]:

проблема в том что нет времени, два дня потратил на другие задачи, 15 из 23 решил, вот этот не осилил
min@y™

min@y™ (статус: Доктор наук), 4 апреля 2012, 10:12 [#3]:

Цитата (Ишбулатов Артур Гильманович):

15 из 23 решил, вот этот не осилил

А я осилил. Где моё пиво (оценка)?
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
min@y™

min@y™ (статус: Доктор наук), 4 апреля 2012, 10:17 [#4]:

Цитата (min@y™):

Что-то ошибку выдает, помогите пожалуйста, вы ж эксперты

Мы эксперты, но не телепаты. Ты ж предлагаешь угадать, что там у тебя за ошибка выдаётся.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
Ишбулатов Артур Гильманович

Ишбулатов Артур Гильманович (статус: Посетитель), 4 апреля 2012, 10:24 [#5]:

function GetInfo(const m, n: Word): Byte;
var
  X, Y: string;
  i, j: Integer;
begin
  Result:= 0;
  Y:= IntToStr(m);
  X:= IntToStr(n);
 
  for i:= 1 to Length(X) do
    for j:= 1 to Length(Y) do
      if X[i] = Y[j]
        then Inc(Result);
end;


Написал вот все это как и надо, программа просто зависает. Вот скрин, нужно чтобы вводились и и ответ выводился что-то типа:
Label4.Caption:='Цифра '+Edit3.Text+' встречается в записи числа '
и
Label4.Caption:='Цифра '+Edit3.Text+' не встречается в записи числа '
скрин http://fastpic.ru/view/33/2012/0404/69a45b203b79979b1a87dd3cfc5c65a6.jpg.html
min@y™

min@y™ (статус: Доктор наук), 4 апреля 2012, 10:30 [#6]:

Цитата (Ишбулатов Артур Гильманович):

программа просто зависает

А говорил, что ошибка вываливается.
Покажь весь код. В моей функции зависать нечему.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
Ишбулатов Артур Гильманович

Ишбулатов Артур Гильманович (статус: Посетитель), 4 апреля 2012, 10:33 [#7]:

procedure TForm1.BitBtn1Click(Sender: TObject);
function GetInfo(const m, n: Word): Byte;
var
  X, Y: string;
  i, j: Integer;
begin
  Result:= 0;
  Y:= IntToStr(m);
  X:= IntToStr(n);
 
  for i:= 1 to Length(X) do
    for j:= 1 to Length(Y) do
      if X[i] = Y[j]
        then Inc(Result);
        end;
     if X[i] = Y[j]  then Label4.Caption:='Цифра '+Edit3.Text+' встречается в записи числа '+IntToStr(p_ish)
        else Label4.Caption:='Цифра '+Edit3.Text+' не встречается в записи числа '+IntToStr(p_ish)
        end;
end.
Ишбулатов Артур Гильманович

Ишбулатов Артур Гильманович (статус: Посетитель), 4 апреля 2012, 10:34 [#8]:

сюда как-то надо впихать строки, где вводятся n и m и чтоб результат показал, как нв рисунке
min@y™

min@y™ (статус: Доктор наук), 4 апреля 2012, 11:43 [#9]:

Результат, который ты хочешь получить, не соответствует условию задачи.

Цитата (Ишбулатов Артур Гильманович):

Проверить, есть ли в записи числа n цифры, совпадающие с цифрами в записи числа m.

function GetInfo(const m, n: Word): Byte;
var
  X, Y: string;
  i, j: Integer;
begin
  Result:= 0;
  Y:= IntToStr(m);
  X:= IntToStr(n);
 
  for i:= 1 to Length(X) do
    for j:= 1 to Length(Y) do
      if X[i] = Y[j]
        then Inc(Result);
end;
 
procedure TForm1.BitBtn1Click(Sender: TObject);
var
  m, n: Integer;
begin
  if TryStrToInt(Edit1.Text, m) and TryStrToInt(Edit2.Text, n)
    then if GetInfo(m, n) <> 0
           then Label4.Caption:= 'В записи числа n цифры, совпадающие с цифрами в записи числа m, ЕСТЬ.'
           else Label4.Caption:= 'В записи числа n цифр, совпадающих с цифрами в записи числа m, нету.'
    else Application.MessageBox('Неверный ввод чисел.',
                                'Ошибка', mb_Ok + mb_IconError);
end;
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
Ишбулатов Артур Гильманович

Ишбулатов Артур Гильманович (статус: Посетитель), 4 апреля 2012, 15:58 [#10]:

Спасибо всем!)))

4 апреля 2012, 16:09: Вопрос перемещён из тематического раздела Delphi » Общие вопросы по программированию в раздел Лабораторный практикум » Delphi модератором Ерёмин А.А.

Мережников Андрей

Мережников Андрей (статус: Абитуриент), 4 апреля 2012, 17:03 [#11]:

можно было обойтись без вложенного цикла по Y, используя функцию pos, например.
min@y™

min@y™ (статус: Доктор наук), 4 апреля 2012, 17:17 [#12]:

Цитата (Мережников Андрей):

можно было обойтись без вложенного цикла по Y, используя функцию pos, например.

Ну чо ты такой зануда, а? Думаешь, что внутри функции Pos() цикла, штоль, нет?
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
Мережников Андрей

Мережников Андрей (статус: Абитуриент), 4 апреля 2012, 17:39 [#13]:

Цитата (min@y™):

Думаешь, что внутри функции Pos() цикла, штоль, нет?

Есть, но исходник смотрится лаконичней.
Да еще, поскольку вопрос в том - есть совпадения или нет, то можно остановиться после первого найденного совпадения, а не гонять циклы до упора.
min@y™

min@y™ (статус: Доктор наук), 4 апреля 2012, 17:55 [#14]:

Цитата (Мережников Андрей):

Да еще, поскольку вопрос в том - есть совпадения или нет, то можно остановиться после первого найденного совпадения, а не гонять циклы до упора.

Чёртов зануда!
function GetInfo(const m, n: Word): Boolean;
var
  X, Y: string;
  i, j: Integer;
begin
  Y:= IntToStr(m);
  X:= IntToStr(n);
 
  for i:= 1 to Length(X) do
    for j:= 1 to Length(Y) do
      if X[i] = Y[j]
        then begin
               Result:= True;
               Exit;
             end;
 
  Result:= False;
end;

Сходи в аптеку, купи презервативы.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
min@y™

min@y™ (статус: Доктор наук), 4 апреля 2012, 17:59 [#15]:

DNK предложил очень интересное решение. Я бы не додумался. Респект и уважуха.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
Мережников Андрей

Мережников Андрей (статус: Абитуриент), 4 апреля 2012, 18:21 [#16]:

Цитата (min@y™):

купи презервативы

:-) думаешь, если надеть их на монитор, то лучше видно будет :-)
min@y™

min@y™ (статус: Доктор наук), 4 апреля 2012, 18:31 [#17]:

Цитата (Мережников Андрей):

думаешь, если надеть их на монитор, то лучше видно будет

Да не, думаю, что если ты будешь использовать презервативы по прямому назначению, зануд на свете меньше будет. Не размножайся.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!

4 апреля 2012, 20:49: Вопрос закрыт (решение принял Ерёмин А.А.): Харе уже, вечно вас несёт куда-то…

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 февраля 2025, 11:30
Выполнено за 0.04 сек.