Сделать с помощью процедуры Даны два пятизначных числа. Определить, состоят ли они из одних и тех
цифр. Например, для чисел 51354 и 55314 ответ положительный, для чисел
55555 и 55551 — отрицательный.
Другие языки программирования и технологии
Паскаль программа через процедуру
Procedure Sort(a, b:integer);
var s1, s2: string;
var c: char;
var k, i: integer;
begin
s1 := inttostr(a);
s2 := inttostr(b);
for i := 2 to 5 do //Сортировка по возрастанию
begin
k := i;
while (k > 1) and (s1[k] < s1[k-1]) do
begin
c := s1[k]; s1[k] := s1[k-1]; s1[k-1] := c;
k := k - 1;
end;
k := i;
while (k > 1) and (s2[k] < s2[k-1]) do
begin
c := s2[k]; s2[k] := s2[k-1]; s2[k-1] := c;
k := k - 1;
end;
end;
Println(a, ' в порядке возрастания ', s1);
Println(b, ' в порядке возрастания ', s2);
if s1 = s2 then Println('Цифры одинаковые')
else Println('Цифры разные');
end;
var a, b: integer;
begin
Readln(a);
Readln(b);
Sort(a, b);
end.
var s1, s2: string;
var c: char;
var k, i: integer;
begin
s1 := inttostr(a);
s2 := inttostr(b);
for i := 2 to 5 do //Сортировка по возрастанию
begin
k := i;
while (k > 1) and (s1[k] < s1[k-1]) do
begin
c := s1[k]; s1[k] := s1[k-1]; s1[k-1] := c;
k := k - 1;
end;
k := i;
while (k > 1) and (s2[k] < s2[k-1]) do
begin
c := s2[k]; s2[k] := s2[k-1]; s2[k-1] := c;
k := k - 1;
end;
end;
Println(a, ' в порядке возрастания ', s1);
Println(b, ' в порядке возрастания ', s2);
if s1 = s2 then Println('Цифры одинаковые')
else Println('Цифры разные');
end;
var a, b: integer;
begin
Readln(a);
Readln(b);
Sort(a, b);
end.
Два вложенных цикла
И сравнение цифр чисел. Если хоть одна цифра в числах не совпала - возвращаем 0
Совпали все - 1.
Как получить цифры числа, могу дать алгоритм на Си. Переводить в Паскаль лень
Вот алгоритм и функция для нахождения суммы цифр любого n-значного целого числа:
int count_digital(a)
{
int digit, suma = 0 ;
a = ads(a) ; // рассматриваем только модуль числа
while(a > 0)
{
digit = a % 10 ; остаток от деления на 10 и есть текущая цифра
suma += digit ; // накапливаем сумму цифр числа
a /= 10 ; переходим к следующему десятичному разряду числа
}
return(suma) ;
}
И сравнение цифр чисел. Если хоть одна цифра в числах не совпала - возвращаем 0
Совпали все - 1.
Как получить цифры числа, могу дать алгоритм на Си. Переводить в Паскаль лень
Вот алгоритм и функция для нахождения суммы цифр любого n-значного целого числа:
int count_digital(a)
{
int digit, suma = 0 ;
a = ads(a) ; // рассматриваем только модуль числа
while(a > 0)
{
digit = a % 10 ; остаток от деления на 10 и есть текущая цифра
suma += digit ; // накапливаем сумму цифр числа
a /= 10 ; переходим к следующему десятичному разряду числа
}
return(suma) ;
}
type
TDigitCounter = array[0..9] of Integer;
procedure InitCounter(var a: TDigitCounter);
begin
FillChar(a, SizeOf(a), #0);
end;
function CountDigits(n: Integer): TDigitCounter;
var
r: TDigitCounter;
begin
InitCounter(r);
while n>0 do
begin
inc(r[n mod 10]);
n:=n div 10;
end;
CountDigits:=r;
end;
function DigitCountsEqual(dc1, dc2: TDigitCounter): Boolean;
var
r: Boolean;
i: Integer;
begin
r:=True;
for i:=0 to 9 do
r:=r and (dc1[i]=dc2[i]);
DigitCountsEqual:=r;
end;
var n1, n2: Integer;
begin
Readln(n1);
Readln(n2);
Writeln(DigitCountsEqual(CountDigits(n1), CountDigits(n2)));
Readln;
end.
TDigitCounter = array[0..9] of Integer;
procedure InitCounter(var a: TDigitCounter);
begin
FillChar(a, SizeOf(a), #0);
end;
function CountDigits(n: Integer): TDigitCounter;
var
r: TDigitCounter;
begin
InitCounter(r);
while n>0 do
begin
inc(r[n mod 10]);
n:=n div 10;
end;
CountDigits:=r;
end;
function DigitCountsEqual(dc1, dc2: TDigitCounter): Boolean;
var
r: Boolean;
i: Integer;
begin
r:=True;
for i:=0 to 9 do
r:=r and (dc1[i]=dc2[i]);
DigitCountsEqual:=r;
end;
var n1, n2: Integer;
begin
Readln(n1);
Readln(n2);
Writeln(DigitCountsEqual(CountDigits(n1), CountDigits(n2)));
Readln;
end.
program p1;
procedure p(n,m:integer; var r:boolean);
var a,b:set of 0..9; i:integer;
begin
a:=[]; repeat include(a,n mod 10); n:=n div 10 until n=0;
b:=[]; repeat include(b,m mod 10); m:=m div 10 until m=0;
r:=a=b;
end;
var n,m:integer; r:boolean;
begin write('n m: '); readln(n,m); p(n,m,r); writeln(r) end.
procedure p(n,m:integer; var r:boolean);
var a,b:set of 0..9; i:integer;
begin
a:=[]; repeat include(a,n mod 10); n:=n div 10 until n=0;
b:=[]; repeat include(b,m mod 10); m:=m div 10 until m=0;
r:=a=b;
end;
var n,m:integer; r:boolean;
begin write('n m: '); readln(n,m); p(n,m,r); writeln(r) end.
Если два вводимых числа не обязаны быть перестановкой цифр друг друга, то есть, например, 22333 и 33222 считаются состоящими из одних и тех же цифр, то можно сделать через множества. Процедура будет загружать в рабочий сет c именем С цифры введённых чисел, а в основной программе сет С будет перезагружаться во множества цифр А и B, соответствующие введённым числам. Если множества цифр A и B окажутся одинаковыми, выводим yes, а в противном случае no:
Var a,b,c:set of byte; m,n:longint;
Procedure cifras(x:longint); begin x:=abs(x); c:=[]; while (x > 0) begin
c:=c+[x mod 10]; x:=x div 10 end end;
Begin while true do begin write('m n > '); readln(m,n); cifras(m); a:=c; cifras(n); b:=c; if (a=b) then writeln('yes') else writeln('no') end end.
Var a,b,c:set of byte; m,n:longint;
Procedure cifras(x:longint); begin x:=abs(x); c:=[]; while (x > 0) begin
c:=c+[x mod 10]; x:=x div 10 end end;
Begin while true do begin write('m n > '); readln(m,n); cifras(m); a:=c; cifras(n); b:=c; if (a=b) then writeln('yes') else writeln('no') end end.
могу написать за чеканную монету
Похожие вопросы
- Помогите составить программу. тема "Процедуры и функции" при помощи Паскаль
- Паскаль!Программа Калькулятор
- Паскаль программа програмирование паскаль
- нужно создать на паскале программу которая будет находить повторяющиеся слова в массиве
- помощь в простенькой паскаль-программе)
- Как составить в Паскале программу, выводящую на экран график?
- Паскаль! Программа Калькулятор самая простая программа, 9 кл
- паскаль программа
- помогите написать паскаль программу
- Паскаль, программа на определение возраста . Почему он показывает неправильно ((( ...
Procedure Sort(a,b: integer);
var
f: integer;
ravno: boolean;
q1,q2: array[0..9] of integer;
begin
for f := 0 to 9 do
begin
q1[f]:=0;
q2[f]:=0;
end;
for f := 1 to 5 do
begin
inc(q1[a mod 10]);
inc(q2[b mod 10]);
a := a div 10;
b := b div 10;
end;
ravno := true;
for f := 0 to 9 do if q1[f] <> q2[f] then ravno :=false;
if ravno then Println('Цифры одинкаовые')
else Println('Цифры разные');
end;
var
a,b: integer;
begin
Readln(a);
Readln(b);
Sort(a,b);
end.