Написать программу, которая находит одинаковые цифры двух чисел. В pascal, желательно через function. Можно чтобы токого не было.Входные данные:466 476. Выходные даныые:6 6.
Заранее спасибо
Ответы
Ответ дал:
0
PascalABC.NET 3.3.5, сборка 1659 от 09.04.2018
Внимание! Если программа не работает, обновите версию!
function Duplicates(a,b:int64):array of char;
begin
var ha:=a.ToString.ToHashSet;
ha.IntersectWith(b.ToString.ToHashSet);
Result:=ha.ToArray
end;
begin
var m,n:int64;
Write('Введите через пробел два натуральных числа: ');
Read(m,n);
var r:=Duplicates(m,n);
if r.Length=0 then Writeln('Нет цифр, встречающихся в обоих числах')
else r.Println(',')
end.
Примеры
Введите через пробел два натуральных числа: 12345 6789067
Нет цифр, встречающихся в обоих числах
Введите через пробел два натуральных числа: 1342103 6748644
4
Реализация без множеств
procedure nToArray(n:int64; a:array of boolean);
begin
for var i:=0 to 9 do a[i]:=False;
if n=0 then a[0]:=True
else
while n>0 do begin
a[n mod 10]:=True;
n:=n div 10
end
end;
function Duplicates(a,b:int64):array of boolean;
begin
var ma:=new boolean[10];
var mb:=new boolean[10];
nToArray(a,ma);
nToArray(b,mb);
Result:=new boolean[10];
for var i:=0 to 9 do
Result[i]:=ma[i] and mb[i]
end;
begin
var m,n:int64;
Write('Введите через пробел два натуральных числа: ');
Read(m,n);
var r:=Duplicates(m,n);
Write('Совпадающие цифры: ');
for var i:=0 to 9 do
if r[i] then Write(i,' ');
Writeln
end.
Пример
Введите через пробел два натуральных числа: 12352423 98789635233
Совпадающие цифры: 2 3 5
Внимание! Если программа не работает, обновите версию!
function Duplicates(a,b:int64):array of char;
begin
var ha:=a.ToString.ToHashSet;
ha.IntersectWith(b.ToString.ToHashSet);
Result:=ha.ToArray
end;
begin
var m,n:int64;
Write('Введите через пробел два натуральных числа: ');
Read(m,n);
var r:=Duplicates(m,n);
if r.Length=0 then Writeln('Нет цифр, встречающихся в обоих числах')
else r.Println(',')
end.
Примеры
Введите через пробел два натуральных числа: 12345 6789067
Нет цифр, встречающихся в обоих числах
Введите через пробел два натуральных числа: 1342103 6748644
4
Реализация без множеств
procedure nToArray(n:int64; a:array of boolean);
begin
for var i:=0 to 9 do a[i]:=False;
if n=0 then a[0]:=True
else
while n>0 do begin
a[n mod 10]:=True;
n:=n div 10
end
end;
function Duplicates(a,b:int64):array of boolean;
begin
var ma:=new boolean[10];
var mb:=new boolean[10];
nToArray(a,ma);
nToArray(b,mb);
Result:=new boolean[10];
for var i:=0 to 9 do
Result[i]:=ma[i] and mb[i]
end;
begin
var m,n:int64;
Write('Введите через пробел два натуральных числа: ');
Read(m,n);
var r:=Duplicates(m,n);
Write('Совпадающие цифры: ');
for var i:=0 to 9 do
if r[i] then Write(i,' ');
Writeln
end.
Пример
Введите через пробел два натуральных числа: 12352423 98789635233
Совпадающие цифры: 2 3 5
Ответ дал:
0
Почему? Этот код же почти поход на код ТурбоПаскаля за исключения кое-каких деталей
Ответ дал:
0
похож*
Ответ дал:
0
Вот именно эти детали. Тип для массива определить, обеспечить инициализации, массив не может быть возвращен функцией, ... кое что еще - так и набежит.
Ответ дал:
0
Вы слишком быстро отвыкли от "турбофишек" )))
Ответ дал:
0
Видимо
Вас заинтересует
1 год назад
2 года назад
2 года назад
8 лет назад
8 лет назад
8 лет назад