|
Вопрос # 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: Вопрос закрыт (решение принял Ерёмин А.А.): Харе уже, вечно вас несёт куда-то…
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|