Алгоритмы обработки натуральных чисел

Содержание

Слайд 2

С третьей переменной tmp := a; a := b; b :=

С третьей переменной
tmp := a;
a := b;
b := tmp;
Используя

только две переменные
a:=a+b; b:=a-b; a:=a-b; a:=a/b; b:=b*a; a:=b/a;

Алгоритм перестановки двух чисел местами

Слайд 3

Решение: По коду из числа х четыре раза вычитается 9. В

Решение:
По коду из числа х четыре раза вычитается 9. В Х

остается значение < 9.
Т.е. X – 9*L=M
Х= 4+5*9=49 или Х=5+4*9=41
Ответ: 49
Слайд 4

Программа var x,l,m,q,i:integer; begin for i:=1000 downto 1 do begin x:=i;

Программа

var x,l,m,q,i:integer;
begin
for i:=1000 downto 1 do begin
x:=i;
q:=9;
l:=0;
while

x>=q do begin
l:=l+1;
x:=x-q;
end;
m:=x;
if m if (l=4) and (m=5) then begin writeln(i); break end;
end;
end.
Слайд 5

Целочисленное деление n mod 10 n div 10 n mod 2=0

Целочисленное деление

n mod 10
n div 10
n mod 2=0
n mod x<>0
Дано трехзначное

число, найти сумму его цифр.
readln(n);
s:= n div 100 + n div 10 mod 10 + n mod 10;
writeln(s);
Слайд 6

Разложение натурального числа на цифры var n:integer; begin readln(n); while n>0

Разложение натурального числа на цифры

var n:integer;
begin
readln(n);
while n>0 do begin
write(n mod

10, ‘ ‘);
n:=n div 10;
end;
end.
Вместо вывода цифр может быть
s:= s + n mod 10;
k:= k+1;
и т.п.
Слайд 7

Представление натурального числа в системе счисления по основанию р (р var

Представление натурального числа в системе счисления по основанию р (р<=10)

var n:integer;
begin
readln(n);
while

n>0 do begin
write(n mod p, ‘ ‘);
n:=n div p;
end;
end.
Вместо вывода цифр может быть
s:= s + n mod p;
k:= k+1;
и т.п.
Слайд 8

1. Ниже записан алгоритм. Сколько существует таких чисел , при вводе

1. Ниже записан алгоритм. Сколько существует таких чисел , при вводе

которых алгоритм печатает сначала 2, а потом 12?
var x, a, b: integer;
begin
readln(x);
a:=0; b:=0;
while x>0 do begin
a:=a + 1;
b:=b + (x mod 10);
x:=x div 10;
end;
writeln(a);
write(b);
end.

Решение:
а – количество цифр, b – сумма цифр
Х – двузначное число, сумма цифр = 12
Это числа 39,48,57,66,75,84,93
Всего 7 чисел.

Слайд 9

Программа var x, a, b, i, k: integer; begin k:=0; for

Программа

var x, a, b, i, k: integer;
begin
k:=0;
for i:=1 to 1000

do begin
x:=i;
a:=0; b:=0;
while x>0 do begin
a:=a + 1;
b:=b + (x mod 10);
x:=x div 10;
end;
if (a=2) and (b=12) then k:=k+1;
end;
writeln(k);
end.
Слайд 10

2. Ниже записана программа. Получив на вход число x , эта

2. Ниже записана программа. Получив на вход число x , эта программа печатает

два числа, L и M. Укажите наибольшее из таких чисел x, при вводе которых алгоритм печатает сначала 3, а потом 7.
var x, L, M: integer;
begin     
readln(x);     
L := 0;     
M := 0;     
while x > 0 do     
begin         
L := L + 1;         
if x mod 2 = 0 then             
M := M + (x mod 10) div 2;         
x := x div 10;     
end;     
writeln(L);     
writeln(M);
end.

Решение:
L – количество цифр, М – сумма половинок четных цифр.
Х- число трехзначное, сумма половинок его четных цифр =7.
Наибольшее число 986.

Слайд 11

Программа var x, L, M, max,i: integer; begin max:=0; for i:=100

Программа

var x, L, M, max,i: integer;
begin
max:=0;
for i:=100 to 1000 do begin

x:=i;
L := 0;
M := 0;
while x > 0 do begin
L := L + 1;
if x mod 2 = 0 then
M := M + (x mod 10) div 2;
x := x div 10;
end;
if (L=3)and(M=7) {and(i>max)} then max:=i;
end;
writeln(max);
end.
Слайд 12

3. Получив на вход натуральное число x, этот алгоритм печатает два

3. Получив на вход натуральное число x, этот алгоритм печатает два

числа: a и b. Укажите наименьшее натуральное число, при вводе которого алгоритм печатает сначала 4, а потом –5.
var x, a, b: longint;
begin
readln(x);
a := 0; b := 1;
while x > 0 do begin
if x mod 2 > 0 then
a := a + x mod 9
else
b := b * (x mod 9);
x := x div 9;
end;
writeln(a);
write(b);
end.

Решение: 1) Число в сс с нечетным основанием чётно тогда и только тогда, когда сумма всех его цифр чётна. 2) Четность числа сохраняется в любой сс.
а – сумма цифр в 9 сс, b – произведение цифр в 9 сс. а=4, b=5
a=4=1+3 =2+2=1+1+1+1=1+1+2 - ищем наименьшее число. b=5 – одна цифра.
Проверим 45. Число нечетное, а=5 – неверно!
Проверим 54. Число нечетное, а=4, х=5, снова число нечетное а=9 – неверно!
Проверим число 135. Число нечетное -> а=5, не подходит!
Пусть число 153. Число нечетное -> а=3, число 15 четное -> b=5, число 1 нечетное -> а=4
Ответ: 1539=129

Слайд 13

Программа var x, a, b,i: longint; begin for i:=1 to 1000

Программа

var x, a, b,i: longint;
begin
for i:=1 to 1000 do begin
x:=i;
a :=

0; b := 1;
while x > 0 do begin
if x mod 2 > 0 then
a := a + x mod 9
else
b := b * (x mod 9);
x := x div 9;
end;
if (a=4) and(b=5) then begin writeln(i); break; end;
end;
end.
Слайд 14

Алгоритм Евклида (НОД) 1-й вариант: while L M do if L

Алгоритм Евклида (НОД)

1-й вариант:
while L <> M do
if L >

M then
L := L – M
else
M := M – L;
2-й вариант:
while (L <> 0) and (M<> 0) do
if L > M then L :=L mod M
else M := M mod L;
writeln (L + M);
Слайд 15

4. Ниже на пяти языках программирования записан алгоритм. Получив на вход

4. Ниже на пяти языках программирования записан алгоритм. Получив на вход

число x, этот алгоритм печатает число M. Известно, что x > 100. Укажите наименьшее такое (т.е. большее 100) число x, при вводе которого алгоритм печатает 26.
var x, L, M: integer;
begin     
readln(x);     
L := x;     
M := 65;     
if L mod 2 = 0 then  M := 52;     
while L <> M do         
if L > M then  L := L - M else  M := M – L;     
writeln(M);
end.  

Решение:
НОД=26
Тогда М=52, L должно быть четное и >100
НОД(L,M)=26
Пусть L=104
Пусть L=130
Ответ: 26

Слайд 16

Программа var x, L, M,i: integer; begin for i:=100 to 1000

Программа

var x, L, M,i: integer;
begin
for i:=100 to 1000 do begin
x:=i;
L :=

x;
M := 65;
if L mod 2 = 0 then M := 52;
while L <> M do
if L > M then
L := L - M
else M := M-L;
if M=26 then begin writeln(i); break; end;
end;
end.
Слайд 17

5. Ниже записан алгоритм. После выполнения алгоритма было напечатано 3 числа.

5. Ниже записан алгоритм. После выполнения алгоритма было напечатано 3 числа.

Первые два напечатанных числа – это числа 9 и 81. Какое наибольшее число может быть напечатано третьим?
var x, y, z: longint;
r, a, b: longint;
begin
readln(x, у);
if у > x then begin
z:= x; x:= у; у:= z;
end;
a:= x; b:= y;
while b > 0 do begin
r:= a mod b;
a:= b;
b:= r;
end;
writeln(a);
writeln(x);
write(у);
end.

Решение:
НОД(x,y)=9
x>y по коду!
х=81, пусть y=72

Слайд 18

Программа var x, y, z: integer; r, a, b, max, i,

Программа

var x, y, z: integer; r, a, b, max, i, j:

integer;
begin
max:=0;
for i:=1 to 200 do
for j:=1 to 200 do begin
x:=i; y:=j;
if y > x then begin
z:= x; x:= y; y:= z; end;
a:= x; b:= y;
while b > 0 do begin
r:= a mod b;
a:= b;
b:= r;
end;
if (a=9) and (x=81) {and (y>max)} then max:=y
end;
writeln(max);
end.
Слайд 19

Делители натурального числа 1 способ: readln(n); k:=0; for i:=1 to n

Делители натурального числа

1 способ:
readln(n);
k:=0;
for i:=1 to n do
if n

mod i =0 then k:=k+1;
или
readln(n);
k:=2;
for i:=2 to n div 2 do
if n mod i =0 then k:=k+1;
Слайд 20

Делители натурального числа 2 способ: readln(n); k:=0; for i:=1 to trunc(sqrt(n))

Делители натурального числа

2 способ:
readln(n);
k:=0;
for i:=1 to trunc(sqrt(n)) do
if n

mod i =0 then
if i*i=n then k:=k+1 {делитель=i}
else k:=k+2; {два делителя:i и n div i}
Слайд 21

var i,k,j:integer; a:array[1..2] of integer; begin for i:=174457 to 174505 do

var i,k,j:integer;
a:array[1..2] of integer;
begin
for i:=174457 to 174505 do begin
k:=0;
for

j:=2 to i div 2 do
if i mod j=0 then if k<2 then begin k:=k+1; a[k]:=j end
else k:=k+1;
if k=2 then writeln (a[1],' ',a[2]);
end;
end.
Слайд 22

Напишите программу, которая ищет среди целых чисел, принадлежащих числовому отрезку [228224;

Напишите программу, которая ищет среди целых чисел, принадлежащих числовому отрезку [228224;

531135], числа, среди делителей которых есть хотя бы 4 различных куба натуральных нечетных чисел. Для каждого найденного числа запишите количество таких делителей, наибольший из них и само число. В качестве делителей не рассматривать число 1. Так, например, для числа 8 учитываются делители 2, 4, 8. Например, для числа 54 имеем следующие делители 2, 3, 6, 9, 18, 27, 54. Есть только один делитель – куб натурального числа 27=3*3*3

var i,j,k,m,d:integer;
begin
for i:=228224 to 531135 do begin
d:=3; k:=0; m:=0;
while d*d*d<=i do begin
if i mod (d*d*d)=0 then begin k:=k+1; m:=d*d*d; end;
d:=d+2;
end;
if k>3 then writeln(k,' ', m,' ',i);
end;
end.

Слайд 23

Программы для написания программ Компилятор онлайн: https://rextester.com/l/pascal_online_compiler Скачать PascalABC.NET: http://pascalabc.net/ssyilki-dlya-skachivaniya

Программы для написания программ

Компилятор онлайн: https://rextester.com/l/pascal_online_compiler
Скачать PascalABC.NET: http://pascalabc.net/ssyilki-dlya-skachivaniya