| 
| 
 | Вопрос # 6 043/ вопрос закрыт / | 
 |  Доброго времени суток, уважаемые эксперты!Пожалуйста напишите на Delphi,
 
 Даны два натуральных числа m и n(m< 9999, n < 9999). Проверить,
 есть ли в записи числа n цифры, совпадающие с цифрами
 в записи числа m.
 
|  |   Вопрос задал: Ишбулатов Артур Гильманович (статус: Посетитель)Вопрос отправлен: 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™ (статус: Доктор наук), 4 апреля 2012, 10:12 [#3]: Цитата (Ишбулатов Артур Гильманович): 15 из 23 решил, вот этот не осилил  А я осилил. Где моё пиво (оценка)?
 Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп! |  
|   | 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™ (статус: Доктор наук), 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™ (статус: Доктор наук), 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, 16:09: Вопрос перемещён из тематического раздела Delphi » Общие вопросы по программированию в раздел Лабораторный практикум » Delphi модератором Ерёмин А.А. 
|   | Мережников Андрей (статус: Абитуриент), 4 апреля 2012, 17:03 [#11]:можно было обойтись без вложенного цикла по Y, используя функцию pos, например. |  
|   | min@y™ (статус: Доктор наук), 4 апреля 2012, 17:17 [#12]: Цитата (Мережников Андрей): можно было обойтись без вложенного цикла по Y, используя функцию pos, например.  Ну чо ты такой зануда, а? Думаешь, что внутри функции Pos() цикла, штоль, нет?
 Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп! |  
|   | Мережников Андрей (статус: Абитуриент), 4 апреля 2012, 17:39 [#13]: Цитата (min@y™): Думаешь, что внутри функции Pos() цикла, штоль, нет? Есть, но исходник смотрится лаконичней.
 Да еще, поскольку вопрос в том - есть совпадения или нет, то можно остановиться после первого найденного совпадения, а не гонять циклы до упора.
 |  
|   | 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™ (статус: Доктор наук), 4 апреля 2012, 17:59 [#15]:DNK предложил очень интересное решение. Я бы не додумался. Респект и уважуха. Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп! |  
|   | Мережников Андрей (статус: Абитуриент), 4 апреля 2012, 18:21 [#16]: Цитата (min@y™): купи презервативы 
  думаешь, если надеть их на монитор, то лучше видно будет   |  
|   | min@y™ (статус: Доктор наук), 4 апреля 2012, 18:31 [#17]: Цитата (Мережников Андрей): думаешь, если надеть их на монитор, то лучше видно будет Да не, думаю, что если ты будешь использовать презервативы по прямому назначению, зануд на свете меньше будет. Не размножайся.
 Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп! |  4 апреля 2012, 20:49: Вопрос закрыт (решение принял Ерёмин А.А.): Харе уже, вечно вас несёт куда-то… Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте. |