8. Целочисленная арифметика.

advertisement
ЦЕЛОЧИСЛЕННАЯ АРИФМЕТИКА
При решении ряда задач нам необходимо обрабатывать натуральные или целые числа. Операции,
которыми мы чаще всего будем пользоваться при решении этих задач – это операции div и mod.
div возвращает целое частное, а mod остаток от деления.
Например,
27 div 5 =5 27 mod 5=2.
Упражнение. Найдите значение выражения:
4 div 2=
34 div 12=
45 mod 21=
12 div 15=
5 mod 5=
12345 mod 10=
12345 div 10=
34 mod 12=
а) Как проверить, что число х является четным? А число у – нечетным?
if x mod 2=0 then writeln(‘Четное’);
if y mod 2<>0 then writeln(‘Нечетное’);
б) Как проверить, что некоторая переменная а, описанная в программе кратна 5?
if a mod 5=0 then writeln(‘Кратна’);
в) Как проверить, что некоторая переменная b, описанная в программе при делении на 8 дает
остаток 2?
if b mod 8=2 then writeln(‘Верно’);
г) Как проверить, что некоторая переменная а, описанная в программе кратна переменной b?
if a mod b=0 then writeln(‘Кратна’);
д) С помощью какой математической формулы можно узнать значение последней цифры
натурального числа?
a mod 10
е) Как отбросить от числа последнюю цифру?
a:=a div 10
Разберем, при решении каких задач мы используем операции целочисленного деления.
Задача 1
С клавиатуры вводится расстояние в м. Вывести это расстояние в более крупных единицах
измерения.
Program Task2;
Var S: longint;
km, m: integer;
Begin
write(‘S=’); readln (S);
km:=s div 1000;
m:= s mod 1000;
If km<> 0 then write (km,’ km ‘);
If m<> 0 then write(m, ‘ m ‘);
Readln;
End.
Задача 2
С клавиатуры задается натуральное двузначное число. Выяснить: какая из его цифр больше – цифра
десятков или цифра единиц.
Program Task;
Var a:integer;
Begin
write (‘a=’); readln(a);
if a mod 10 = a div 10 then writeln(‘Ravny’)
else if a mod 10>a div 10 then writeln (‘Cifra edinic bolshe’)
else writeln (‘Cifra desytkov bolshe’);
readln;
end.
Задача 3
С клавиатуры вводится натуральное число а, вывести на экран все натуральные делители этого
числа.
Идея решения: у любого натурального числа самый маленький делитель 1, а самый большой – само
это число. Будем перебирать все числа из диапазона от 1 до а и выводить те из них, на которые делится
а.
Program Delit;
Var a,i:integer;
begin
writeln(‘Введите натуральное число’);
readln(a);
for i:=1 to a do
if a mod i=0 then writeln(i);
end.
Задачи для самостоятельного решения.
1. С клавиатуры задаются два натуральных числа, если числа разной четности, то вывести их сумму, иначе
– их произведение.
2. Найти сумму цифр заданного с клавиатуры трехзначного натурального числа.
3. Число называется совершенным, если оно равно сумме своих делителей, исключая само это число.
Например, 6=1+2+3. Число 6 – совершенное число. С клавиатуры вводится число а. Выяснить, является
ли число а совершенным.
Задача 4
Найти сумму цифр, входящих в состав натурального числа а, которое вводится с клавиатуры.
Идея решения: пока в числе есть цифры (т.е. число отлично от 0) мы прибавляем к сумме
последнюю цифру числа, а затем эту цифру от числа откидываем (как это можно сделать?) Например:
S=0; a=12345
S=5, a=1234
S=9, a=123
S=12, a=12
S=14, a=1
S=15, a=0.
Program Summa;
Var a,S:integer;
begin
writeln(‘Введите натуральное число’);
readln(a);
S:=0;
while a<>0 do
begin
S:=S+ a mod 10;
a:=a div 10;
end;
writeln(S);
end.
Задача 5
С клавиатуры вводится натуральное число а, запишите в переменную b число, полученное
переворачиванием исходного числа. Т.е. если с клавиатуры ввели число 2345, то в переменной b
должно быть записано число 5432.
Идея решения: в качестве начального значения переменной b возьмем 0, будем отрывать от переменной
а по одной цифре с конца и приписывать в конец переменной b (как это можно сделать?)
Program Perev;
Var a,b:integer;
begin
writeln(‘Введите натуральное число’);
readln(a);
b:=0;
while a<>0 do
begin
b:=b*10+a mod 10;
a:=a div 10;
end;
writeln(b);
end.
Download